未来的 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