我正在开发一个Flutter应用程序,但想知道在从UI调用异步代码时应该做什么--比方说UI小部件的构建方法。
例如,我的应用程序通过一个服务类连接Firebase,该服务类使用Async-Await样式从Firebase获取记录。使用await可以确保我的服务类的方法在返回UI端之前完成记录检索。
@override
Widget build(BuildContext context) {
RealtimeDatabase.getData() // my service class
.then((onValue) {
..... // do something after the async call is completed
}
..... // do something immediately before the async call is done
class RealtimeDatabase {
Future<String> getData() async {
DataSnapshot dataSnapshot = await FirebaseDatabase.instance.reference().orderByKey().once(); // will wait until completed
.....
.....
吉米
在Flutter中,有一些小部件可以帮助您无缝地完成此操作(例如FutureBuilder
、StreamBuilder
),您可以根据它们的分辨率来控制要呈现的内容。
FutureBuilder
上的示例:
Widget build(BuildContext context) {
return new FutureBuilder(
future: FirebaseDatabase.instance.reference().child("node"),
builder: (BuildContext context, AsyncSnapshot snapshot) {
return snapshot.hasData? new Scaffold(
///start building your widget tree
):new CircularProgressIndicator(); ///load until snapshot.hasData resolves to true
},);
}
StreamBuilder
的示例:
class Database {
DatabaseReference _refProfile = FirebaseDatabase.instance.reference().child(
"profiles");
getProfiles() => _refProfile.onValue; }
Widget build(BuildContext context) {
return new StreamBuilder<Event>(
stream: _database.getProfiles(), //_database = new Database()
builder: (BuildContext context, AsyncSnapshot<Event> event) {
return event.hasData?new Scaffold(
///build your widget tree
):new CircularProgressIndicator();
/// place holder
}
另一方面,StreamBuilder
使您能够继续监听数据,并且可以根据数据的任何更新来更新UI的状态。
我可能还不够清楚--情况是,我的现有代码不支持异步,我希望使用新的库,如System.net.http和只支持异步方法的AWS SDK。因此,我需要弥补这一差距,并能够拥有可以同步调用的代码,然后可以在其他地方调用异步方法。 我读了很多书,有很多次有人问这个问题,也有人回答这个问题。 从非异步方法调用异步方法
问题内容: 我最近写了我的第一个Android应用程序,大约有8,000-10,000行代码。一直阻碍我使用常规设计模式的一件事是android对异步调用(打开对话框,活动等)的大量使用。因此,我的代码很快就开始看起来像“意大利面”,而我最终开始不喜欢某些类。 是否有适用于任何人都会推荐的系统的特定设计模式或编程方法?对于编写可管理的异步代码有什么建议吗? 问题答案: 使用全局变量 如果您不想用简
我正在编写一段scala代码,其中第三方库返回一个Future[Boolean]对象,而我需要在我的scala代码中使用这个Future对象,这段代码完全是以同步方式编写的。 目前,我正在对第三方库操作执行Await.result,以确保它只返回布尔值。有没有更好的处理方法,我的scala代码需要一个布尔值来做进一步的操作?
当您有服务器端代码(即一些)并且您的函数是异步的--因此它们返回--在等待函数时调用是否被认为是最佳做法? 我读到它的性能更好,因为它不需要将线程上下文切换回原来的线程上下文。但是,使用ASP.NET Web Api,如果请求是在一个线程上传入的,并且您等待某个函数并调用,当您返回函数的最终结果时,该函数可能会将您置于另一个线程上。 我在下面打了一个例子来说明我所说的:
我有一个关于用wsimport工具生成Java工件的问题(by Maven Jax-WS) 当我从WSDL生成Java工件时,我希望将web服务项目打包为WAR文件,将其客户机打包为JAR文件。 在哪里放置生成的工件,在哪里放置WSDL?关于组织Web服务项目的最佳实践是什么? 提前谢谢你! 向你问好,尤里卡·克里扎尼克
问题内容: 我在数组上进行映射,对于新对象的返回值之一,我需要进行异步调用。 该功能的实现将类似于 我不清楚做到这一点的最佳方法是什么…承诺?嵌套的回调?在ES6或ES7中使用某些东西,然后与Babel进行转换? 目前实现此目的的最佳方法是什么? 谢谢! 问题答案: 一种方法是(ES6)。 该答案将在Node 4.0+中起作用。较旧的版本将需要Promise polyfill或库。我还使用了ES6