Flutter:空值检查操作符用于空值,late关键字也不起作用

0dxa2lsx  于 2023-05-23  发布在  Flutter
关注(0)|答案(2)|浏览(172)

我尝试在应用程序上渲染一个简单的10 x10字符网格,但网格框没有正确渲染(只显示字符,而不是框本身),并且我得到一个异常:用于空值的空检查运算符。我尝试使用late关键字,但这给了我异常“LateInitializationError:字段'grid'尚未初始化。”任何关于如何解决此问题的想法都将非常有用。谢谢!

class _MyHomePageState extends State<MyHomePage> {
  Grid? grid;
  List<String> selectedList = [];
  var isLoaded = true;
  @override
  void initState() {
    // TODO: implement initState
    getData();
    super.initState();

  }

  getData() async{
    grid = await RemoteService().getGrid();
    if(grid!=null){
      print('Payload received');
      setState(() {
        isLoaded = true;
      });
    }
  }
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('Wordsearch'),
      ),
      body: Visibility(
        visible: isLoaded,
        replacement: const Center(child: CircularProgressIndicator()),
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.center,
          children: [
            for(var i=0;i<10;i++) Row(
              children: [
                for(var j=0;j<10;j++) GridItem(
                    item: grid!.grid[i][j],
                    isSelected: (bool value){
                      setState(() {
                        if(value){
                          selectedList.add(grid!.grid[i][j]);
                        } else{
                          selectedList.remove(grid!.grid[i][j]);
                        }
                      });
                    })
              ],
            )
          ],
        )
      ),
    );
  }
}
pengsaosao

pengsaosao1#

使用FutureBuilder等待异步请求
https://api.flutter.dev/flutter/widgets/FutureBuilder-class.html
你的网格需要时间来加载,所以如果你立即运行你的构建方法,它会给予你空检查错误,因为网格是空的。

7eumitmz

7eumitmz2#

我同意targiasld的观点,如果你正在等待数据,你应该使用FutureBuilder。
或者,如果你想等待数据并在加载后显示,你的网格分配(我相信)也需要在setState调用中,既然你这样做了,不妨使用具有数据的网格来控制可见性,而不是单独的变量。
另外,对于嵌套的for循环,我假设你想要一个网格的小部件?有一个GridView widget处理网格的构建,这可能修复了空检查。
我可以提供代码样本,如果需要的话

相关问题