gpt4 book ai didi

flutter - 我怎样才能 "retry"构建?

转载 作者:行者123 更新时间:2023-12-03 03:25:15 26 4
gpt4 key购买 nike

我正在创建一个应用程序,它可以恢复并显示在线存储在 mysql 主机上的 html 文本。如果快照没有任何数据,它应该重试查询并重建 View ,直到它获得数据。

这就是我使用数据库中的数据创建小部件的方式:

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) {
...
}
)
}

关于flutter - 我怎样才能 "retry"构建?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58458713/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com