用于空值的空检查运算符 - Flutter

Null check operator used on a null value - Flutter

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

 @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),
          ),
        ],
      ),
    );
  }
}


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

怎么办?

该错误意味着您在运行时恰好是 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);
        },
      ),
    );
},

为避免使用 ! 遇到该错误,您可以明确检查对象是否为 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]
}

或者你可以只在对象为空的情况下才给它赋值,像这样:

title??= ['Default title for when some loading failed or something'];