未来的 LateInitializationError
LateInitializationError with Future
希望你能帮帮我!
错误提示 'tables' 尚未初始化。但是当我设置 tables = []
而不是
widget.data.then((result) {tables = result.tables;})
有效。我认为问题出在我的应用程序状态 data 这是一个 Future.
我的简化代码:
class NavBar extends StatefulWidget {
final Future<Metadata> data;
const NavBar({Key? key, required this.data}) : super(key: key);
@override
State<NavBar> createState() => _NavBarState();
}
class _NavBarState extends State<NavBar> {
late List<MyTable> tables;
@override
void initState() {
widget.data.then((result) {
tables = result.tables;
});
super.initState();
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: SafeArea(
child: buildPages(page.p)
)
);
}
Widget buildPages(index){
switch (index) {
case 0:
return ShowTablesNew(tables: tables);
case 1:
return const Details();
case 2:
return const ShowTables();
default:
return const ShowTables();
}
}
}
未来不包含任何数据。这是一种异步计算,将“稍后”提供数据。初始化错误的发生是因为变量 'tables' 被标记为 late init 但在 future 完成之前被访问,而实际上它尚未初始化。
检查 this codelab 使用 dart 进行异步编程。
对于您的代码,您可以在 initState 方法中使用 async/await 来执行类似这样的操作
String user = '';
@override
void initState() {
asyncInitState();
super.initState();
}
void asyncInitState() async {
final result = await fetchUser();
setState(() {
user = result;
});
}
但是由于您使用的是自定义对象列表,最直接的方法可能是使用 a FutureBuilder widget
希望你能帮帮我!
错误提示 'tables' 尚未初始化。但是当我设置 tables = []
而不是
widget.data.then((result) {tables = result.tables;})
有效。我认为问题出在我的应用程序状态 data 这是一个 Future.
我的简化代码:
class NavBar extends StatefulWidget {
final Future<Metadata> data;
const NavBar({Key? key, required this.data}) : super(key: key);
@override
State<NavBar> createState() => _NavBarState();
}
class _NavBarState extends State<NavBar> {
late List<MyTable> tables;
@override
void initState() {
widget.data.then((result) {
tables = result.tables;
});
super.initState();
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: SafeArea(
child: buildPages(page.p)
)
);
}
Widget buildPages(index){
switch (index) {
case 0:
return ShowTablesNew(tables: tables);
case 1:
return const Details();
case 2:
return const ShowTables();
default:
return const ShowTables();
}
}
}
未来不包含任何数据。这是一种异步计算,将“稍后”提供数据。初始化错误的发生是因为变量 'tables' 被标记为 late init 但在 future 完成之前被访问,而实际上它尚未初始化。 检查 this codelab 使用 dart 进行异步编程。
对于您的代码,您可以在 initState 方法中使用 async/await 来执行类似这样的操作
String user = '';
@override
void initState() {
asyncInitState();
super.initState();
}
void asyncInitState() async {
final result = await fetchUser();
setState(() {
user = result;
});
}
但是由于您使用的是自定义对象列表,最直接的方法可能是使用 a FutureBuilder widget