flutter 延迟初始化错误:字段"userModel"尚未初始化

h6my8fg2  于 2023-03-04  发布在  Flutter
关注(0)|答案(2)|浏览(235)

当我初始化模型时,我的腕尺出现了一个错误。

import 'package:bloc/bloc.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:users_app/cubit/states.dart';

import '../dio_helper.dart';
import '../userModel.dart';

class UsersCubit extends Cubit<UsersStates> {
  UsersCubit() : super(UsersInitialState());

  static UsersCubit get(context) => BlocProvider.of(context);

   late User userModel;

  Future getUsers() async {
    String url = '/users';
    var response = await DioHelper.getData(url: url).then((value) {
      emit(UsersLoadingState());
     userModel =  User.fromJson(value.data);
      print(userModel.name);
      emit(UsersGetDataSuccessState());
    }).catchError((err) {
      emit(UsersGetDataErrorState());
      print(err);
    });
  }
}

这是我的模特。

class User {
  String? id;
  String? name;
  String? email;
  String? imageUrl;

  User.fromJson(Map<String, dynamic> json) {
    id = json['_id'];
    name = json['name'];
    email = json['email'];
    imageUrl = json['imageUrl'];
  }
}

这就是错误。

LateInitializationError: Field 'userModel' has not been initialized.

我试图将迟到的用户userModel更改为用户?userModel,但我仍然得到同样的问题请,任何人,知道我的错误的答案。

t5zmwmid

t5zmwmid1#

如果您的方法以"catch"结束,则userModel永远不会初始化,因此您可以执行以下操作:
取代:

late User userModel;

use:

User userModel = User();
olqngx59

olqngx592#

你的Cubit实现实际上并没有遵循这个模式。BLoC(和Cubit)不应该有任何公共数据。这就是你有状态管理的全部意义。你的BLoC(或Cubit)有一个当前状态,这是你可以访问的。
你的UserModel变量属于一个状态。类似于“UsersGetDataSuccessState”。那么你的userModel可以是一个局部变量:

final userModel =  User.fromJson(value.data);
  print(userModel.name);
  emit(UsersGetDataSuccessState(userModel));

因为这只在用户成功加载时存在,所以它应该是那个状态的属性,而不是BLoC的属性。

相关问题