在 firestore 中获取 uid 的 null 安全 "required" 的其他解决方案是什么?

what is other solution for "required" in null safety to get uid in firestore?

我正在使用新版本从旧版本学习 flutter。所以,我多次遇到空安全问题。

我在 database.dart 文件中有这样的代码:

import 'package:cloud_firestore/cloud_firestore.dart';

class DatabaseService {
  final String uid;
  DatabaseService({required this.uid});
}

它有效,当我添加“必需”时没有出现错误,但我不能在 home.dart 文件中使用 DatabaseService() 参数:

class Home extends StatelessWidget {
  Home({Key? key}) : super(key: key);

  final AuthService _auth = AuthService();

  @override
  Widget build(BuildContext context) {
    return StreamProvider<QuerySnapshot?>.value(
      initialData: null,
      value: DatabaseService().brews,
      child: Scaffold(),
  }
}

home.dart中的错误是

The named parameter 'uid' is required, but there's no corresponding argument.
Try adding the required argument.

而且,如果我不在 DatabaseService({this.uid}) 中添加 required 那么错误将出现在 database.dart

The parameter 'uid' can't have a value of 'null' because of its type, but the implicit default value is 'null'.
Try adding either an explicit non-'null' default value or the 'required' modifier.

那我如何在其他文件中使用 DatabaseService()

如果不需要 uid,则使用 null 安全运算符

import 'package:cloud_firestore/cloud_firestore.dart';

class DatabaseService {
  final String? uid;
  DatabaseService({this.uid});
}

在 nullsafety 中有 2 种类型,称为 non-null 和 nullable

  • 非空是指你的变量不能为空,所以你必须给它赋值
  • Nullable 是你的变量可以为空的地方,它可以 运行 没有任何值(基本上它不需要任何值)

在你的情况下,你可以尝试使用这个 '?'使其可为空的符号

就像这样:

class DatabaseService {
  final String? uid;
  DatabaseService({this.uid});
}

并且你不需要在它前面放required,因为它允许为空

希望对您有所帮助!抱歉我的解释不当