我正在创建一个可恢复并显示html文本的应用程序,该文本在线存储在mysql主机上。如果快照没有任何数据,则应重试查询并重建视图,直到获取数据为止。
这就是我用数据库中的数据创建窗口小部件的方式:
FutureBuilder(
future: crud_database.getDatos(url),
builder: (context, snapshot){
if(snapshot.hasError) print(snapshot.error);
if( snapshot.hasData){
return WebView(
initialUrl: UriData.fromString(snapshot.data[0]["webhtml"], mimeType: "text/html").toString() ,
onWebViewCreated: (WebViewController webViewController){
_controller.complete(webViewController);
},
);
}else{
return Center(
child: CircularProgressIndicator(),
);
}
},
)
您可以使用StreamBuilder
代替FutureBuilder
,并创建一个处理重试并使用Stream
来通知UI的方法,如下所示:
final _streamController = StreamController<YourData>();
@override
void initState() {
super.initState();
_fetchData();
}
Future _fetchData() async {
YourData data = await crud_database.getDatos(url);
if (data == null) {
_streamController.sink.addError("No data, trying again");
return await _fetchData();
}
_streamController.sink.add(data);
}
@override
void dispose() {
_streamController.close();
super.dispose();
}
@override
Widget build(BuildContext context) {
body: StreamBuilder(
stream: _streamController.stream,
builder: (context, snapshot) {
...
}
)
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句