繁体   English   中英

Null 检查运算符用于 null 值 - Flutter

[英]Null check operator used on a null value - Flutter

我试图制作一个列出驱动器文件的谷歌驱动器应用程序。 但我得到了 Null 检查运算符用于 null 值错误。 我知道发生了什么。 但我无法解决。



  Future<void> _listGoogleDriveFiles() async {
    final googleSignIn = signin.GoogleSignIn.standard(
      scopes: ['https://www.googleapis.com/auth/drive.appdata'],
    );

    final GoogleSignInAccount? account = await googleSignIn.signIn();

    final authHeaders = await account?.authHeaders;
    final authenticateClient = GoogleAuthClient(authHeaders!);
    final driveApi = drive.DriveApi(authenticateClient);
    print('above files list');

    list = await driveApi.files.list();

    setState(() {});

  }


 @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: () {
                          downloadGoogleDriveFile(
                              filename: list!.files![index].originalFilename,
                              id: list!.files![index].id);
                        },
                      ),
                    );
                  },
                ),
              )
          ],
        ),
      ),
      floatingActionButton: Row(
        children: [
          FloatingActionButton(
            onPressed: _listGoogleDriveFiles,
            child: Icon(Icons.photo),
          ),
          FloatingActionButton(
            onPressed: _incrementCounter,
            tooltip: 'Increment',
            child: const Icon(Icons.add),
          ),
        ],
      ),
    );
  }
}


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

该怎么办?

该错误意味着您在运行时使用了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);
        },
      ),
    );
},

为了避免使用! ,您可以明确检查 object 是否为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]
}

或者您可以仅在 null 的情况下为 object 分配一个值,如下所示:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM