我正在创建一个应用程序,它可以恢复并显示在线存储在 mysql 主机上的 html 文本。如果快照没有任何数据,它应该重试查询并重建视图,直到它获得数据。
这就是我使用数据库中的数据创建小部件的方式:
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(),
);
}
},
)
Run Code Online (Sandbox Code Playgroud)
您可以使用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) {
...
}
)
}
Run Code Online (Sandbox Code Playgroud)