对空值使用空检查运算符 - Flutter

Mah*_*ahi 4 dart google-drive-api flutter dart-null-safety

我试图制作一个谷歌驱动器应用程序,列出驱动器中的文件。但我在空值错误上使用了空检查运算符。我知道发生了什么事。但我无法解决它。

 @override
  Widget build(BuildContext context) {
    return Scaffold(
         body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            TextButton(
              onPressed: () {},
              child: Text('UPLOAD'),
            ),
            if (list != null)
              SizedBox(
                height: 300,
                width: double.infinity,
                child: ListView.builder(
                  shrinkWrap: true,
                  itemCount: list!.files?.length,
                  itemBuilder: (context, index) {
                    final title = list!.files![index].originalFilename;
                    return ListTile(
                      leading: Text(title!),
                      trailing: ElevatedButton(
                        child: Text('Download'),
                        onPressed: () {
                        },
                      ),
                    );
                  },
                ),
              )
          ],
        ),
      ),
      floatingActionButton: Row(
        children: [
          FloatingActionButton(
            onPressed: _listGoogleDriveFiles,
            child: Icon(Icons.photo),
          ),
          FloatingActionButton(
            onPressed: _incrementCounter,
            tooltip: 'Increment',
            child: const Icon(Icons.add),
          ),
        ],
      ),
    );
  }
}


Run Code Online (Sandbox Code Playgroud)

当我运行它时,显示上传文本,并且错误显示在文本下方。所以错误一定是由于列表为空造成的。但我只想仅在列表不为空时才显示该列表。

该怎么办?

il_*_*oga 9

该错误意味着您在运行null时使用了检查运算符(感叹号) 。null因此,查看您的代码,不仅是可能的列表null,还包括您标记的其他对象!

问题就在这里,除非我!在你的代码中遗漏了一些:

itemCount: list!.files?.length,
itemBuilder: (context, index) {
    final title = list!.files![index].originalFilename;
    return ListTile(
      leading: Text(title!),
      trailing: ElevatedButton(
        child: Text('Download'),
        onPressed: () {
          downloadGoogleDriveFile(
              filename: list!.files![index].originalFilename,
              id: list!.files![index].id);
        },
      ),
    );
},
Run Code Online (Sandbox Code Playgroud)

为了避免使用 时遇到该错误!,您可以显式检查对象是否为null,例如:

if (list == null) {
   [...some error handling or a message with a warning]
} else {
   [your original code where you can use ! without fear of errors]
}
Run Code Online (Sandbox Code Playgroud)

或者,您可以仅在对象为 null 的情况下为其赋值,如下所示:

title??= ['Default title for when some loading failed or something'];
Run Code Online (Sandbox Code Playgroud)