flutter - 小部件是在应该使用之前创建的 => 导致错误
问题描述
我有一个带有 futurebuilder 的自定义小部件,我想用它来加载一些数据。
这是它的样子:
class LoadOverlay extends StatefulWidget {
Widget child;
LoadOverlay({Key key, this.child}) : super(key: key);
@override
_LoadOverlayState createState() => _LoadOverlayState();
}
class _LoadOverlayState extends State<LoadOverlay> {
@override
Widget build(BuildContext context) {
return FutureBuilder(
future: Catalog.catalog.loadAsset(), //Here the csvString gets loaded
builder: (BuildContext context, AsyncSnapshot snapshot) {
if (snapshot.hasData)
return widget.child;
else {
return Scaffold(
body: Center(
child: CircularProgressIndicator(), //Tells the user that something is loading
),
);
}
}
);
}
}
这就是我使用它的方式:
class _HomePageState extends State<HomePage> {
@override
Widget build(BuildContext context) {
return LoadOverlay(
child: Scaffold(
body: Center(
child: Text(Catalog.catalog.csvString), //This gets created to early
),
)
);
}
}
问题是Text(Catalog.catalog.csvString)
在 futurebuilder 执行之前被加载,因为 csvString 还没有完成我得到一个空错误。如果我像这样将它放入LoadOverlay
if (snapshot.hasData)
Text(Catalog.catalog.csvString)
它之所以有效,是因为代码仅在快照有数据后才执行。
那么我如何将一个小部件传递给 FutureBuilder,在执行未来之后调用和绘制它
解决方案
你可以传递一个空的String
while csvString
is still null
。
child: Text(Catalog.catalog.csvString ?? ''),
或者
初始化时String
分配一个空。csvString
String csvString = '';
推荐阅读
- openxml - Aspose.Cells - 打开由 EPPlus 生成的 OpenXml 文件
- php - print_r($_POST) 不打印任何内容
- java - 如何使用名称将 id 值从一个表传递到另一个表并将信息存储到数据库
- wordpress - WordPress 网站中的 Http 错误 500
- javascript - 通过查询字符串截断加号传递变量
- git - 推送标签时如何触发VSTS构建和发布?
- python - 使用python获取随机单词
- terraform - 是否可以向 terraform 模块添加模板或循环
- python - Python附加具有numpy数组类型的类属性
- scala - 没有 var scala 的累积和