flutter LateInitializationError:字段“当前”尚未初始化

时间:2021-07-16 17:23:32

标签: flutter

有两个错误。

  1. 未处理的异常:“Null”类型不是“UserModel”类型的子类型 -> 运行应用程序时出现此错误。

  2. LateInitializationError:字段“当前”尚未初始化。 -> 导航到用户页面时出现此错误。

我的猜测是用户模型的当前是问题所在。

一开始很顺利。 关闭应用程序后重新启动应用程序时发生错误。 太伤心了请帮忙

  • 提供者

     Future<void> getUser() async {
      final user = FirebaseAuth.instance.currentUser;
      final userResult = await DbRepo().getUser(user!.uid);
      UserModel.current = userResult;
      notifyListeners();
      return;
    }
    
  • dbRepo

    class DbRepo {
    final CollectionReference userCol =
        FirebaseFirestore.instance.collection("users");
    Future saveUser(UserModel user) async {
      try {
        await userCol.doc(user.id).set(user.toMap());
        return true;
      } catch (e) {
        return false;
      }
      }
    
    Future getUser(String id) async {
      try {
        final dynamic data = await userCol.doc(id).get();
        final user = UserModel.fromJson(data.data());
        return user;
      } catch (e) {
        return;
      }
    }
    
    }
    
  • 用户模型

    class UserModel {
    String id;
    String email;
    String name;
    List<int>? userMovieId;
    
    UserModel(
        {required this.id,
        required this.email,
        required this.name,
        this.userMovieId});
    
    static late UserModel current;
    
    factory UserModel.fromJson(Map<String, dynamic> json) {
      return UserModel(
          id: json['id'] == null ? '' : json['id'],
          email: json['email'] == null ? '' : json['email'],
          name: json['name'] == null ? '' : json['name'],
          userMovieId: json['userMovieId'] == null ? [] : json['userMovieId']);
    }
    Map<String, dynamic> toMap() => {
          'id': id,
          'email': email,
          'name': name,
          'userMovieId': userMovieId,
        };
    }
    
  • 主屏幕启动

    void initState() {
      this._tabController = new TabController(length: 3, vsync: this);
      Provider.of<AuthProvider>(context, listen: false)
          .getUser()
          .whenComplete(() => {setState(() {})});
      super.initState();
    }
    

0 个答案:

没有答案