【问题标题】:How can I resolve "LateInitializationError: Field 'userMap' has not been initialized."如何解决“LateInitializationError:字段'userMap'尚未初始化。”
【发布时间】:2021-08-31 01:44:17
【问题描述】:
late Map<String,dynamic> userMap;

bool isLoading = false;
final TextEditingController _search = TextEditingController();


void onSearch() async{
FirebaseFirestore _firestore = FirebaseFirestore.instance;
setState(() {
  isLoading = true;
});
await _firestore.collection('users').where('email', isEqualTo: _search.text)
    .get().then((value) {
      setState(() {
        userMap = value.docs[0].data();
        isLoading = false;
      });
      print(userMap);
});

}

代码的第一部分工作正常,但是当我想创建我的 ListTile 时,会弹出错误。

userMap != null ?
        ListTile(
          title: Text(userMap['name']),
          subtitle: Text(userMap['email']),
        ):Container(),

如果 somoene 可以帮助我,那就太好了,谢谢!

【问题讨论】:

  • 就这么晚了 Map userMap ={};或从关键字中删除延迟并检查 usermap.isEmpty()
  • 如果你不能保证一个变量在被访问之前会被初始化,不要使用late!创建变量late 来检查它是否为null 是没有意义的。如果您需要检查它是否为null,则使其可为空。或者使其不可为空,并在开始时将其初始化为非空值。
  • 我尝试删除 Late 但我无法再次弹出错误
  • 试试Map&lt;String,dynamic&gt;? userMap; 而不是late Map&lt;String,dynamic&gt; userMap;
  • 请澄清您的具体问题或提供其他详细信息以准确突出您的需求。正如目前所写的那样,很难准确地说出你在问什么。

标签: java flutter dart widget


【解决方案1】:

late 关键字可以在您有一个不可为空的变量时使用,但您只是想稍后对其进行初始化。变量永远不会为空,只有两种状态,未初始化或使用非空值初始化。

如果您想使用可空变量,您只能将 ? 关键字添加到变量中,例如 Map&lt;String,dynamic&gt;? userMap;

【讨论】:

  • 谢谢它现在可以工作了,我只是在 scnd 部分添加一个空检查,非常感谢你
猜你喜欢
  • 1970-01-01
  • 2022-07-27
  • 2021-10-27
  • 2021-12-29
  • 2022-01-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多