当我初始化模型时,我的腕尺出现了一个错误。
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,但我仍然得到同样的问题请,任何人,知道我的错误的答案。
2条答案
按热度按时间t5zmwmid1#
如果您的方法以"catch"结束,则userModel永远不会初始化,因此您可以执行以下操作:
取代:
use:
olqngx592#
你的Cubit实现实际上并没有遵循这个模式。BLoC(和Cubit)不应该有任何公共数据。这就是你有状态管理的全部意义。你的BLoC(或Cubit)有一个当前状态,这是你可以访问的。
你的UserModel变量属于一个状态。类似于“UsersGetDataSuccessState”。那么你的userModel可以是一个局部变量:
因为这只在用户成功加载时存在,所以它应该是那个状态的属性,而不是BLoC的属性。