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)
当我运行它时,显示上传文本,并且错误显示在文本下方。所以错误一定是由于列表为空造成的。但我只想仅在列表不为空时才显示该列表。
该怎么办?
该错误意味着您在运行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)