用于空值的空检查运算符 - 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'];
我试图制作一个 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'];