Riverpod 状态 class 默认值
Riverpod state class default value
例如我有 class ProfileModel
和一堆字段
他们中的许多人没有默认值,除非他们在我从后端获取用户信息时进行初始化
对于 riverpod,我需要写一些像
final profileProvider = StateNotifierProvider((ref) => ProfileState());
class ProfileState extends StateNotifier<ProfileModel> {
ProfileState() : super(null);
}
我知道我需要将 ProfileState.empty()
之类的东西传递给 super()
方法,而不是传递 null
但在这种情况下,我必须为每个 ProfileModel
s 字段发明默认值
这对我来说听起来很奇怪,我不想为了关心项目中每个模型的空状态或默认状态而伤脑筋
在我的示例中,用户名、年龄等没有默认值
这是纯粹的不可变 class
我做错了什么或遗漏了什么?
或者我可以将模型声明为可为空 extends StateNotifier<ProfileModel?>
但我不确定这是不是一个好方法
可以将 StateNotifier
与可空模型一起使用。如果您在语义上想要表明该值实际上可能不存在,我会说 null
没问题。
但是,我通常做的和我认为更好的是创建一个状态模型,其中包含模型,以及与应用程序可能处于的不同状态相关的属性。
例如,在从 API 获取模型数据时,您可能希望在等待获取数据时有一个加载状态以在 UI 中显示微调器. I wrote an article about the architecture that I apply using Riverpod.
状态模型的一个简单示例是:
class ProfileState {
final ProfileModel? profileData;
final bool isLoading;
ProfileState({
this.profileData,
this.isLoading = false,
});
factory ProfileState.loading() => ProfileState(isLoading: true);
ProfileState copyWith({
ProfileModel? profileData,
bool? isLoading,
}) {
return ProfileState(
profileData: profileData ?? this.profileData,
isLoading: isLoading ?? this.isLoading,
);
}
@override
bool operator ==(Object other) {
if (identical(this, other)) return true;
return other is ProfileState &&
other.profileData == profileData &&
other.isLoading == isLoading;
}
@override
int get hashCode => profileData.hashCode ^ isLoading.hashCode;
}
例如我有 class ProfileModel
和一堆字段
他们中的许多人没有默认值,除非他们在我从后端获取用户信息时进行初始化
对于 riverpod,我需要写一些像
final profileProvider = StateNotifierProvider((ref) => ProfileState());
class ProfileState extends StateNotifier<ProfileModel> {
ProfileState() : super(null);
}
我知道我需要将 ProfileState.empty()
之类的东西传递给 super()
方法,而不是传递 null
但在这种情况下,我必须为每个 ProfileModel
s 字段发明默认值
这对我来说听起来很奇怪,我不想为了关心项目中每个模型的空状态或默认状态而伤脑筋
在我的示例中,用户名、年龄等没有默认值
这是纯粹的不可变 class
我做错了什么或遗漏了什么?
或者我可以将模型声明为可为空 extends StateNotifier<ProfileModel?>
但我不确定这是不是一个好方法
可以将 StateNotifier
与可空模型一起使用。如果您在语义上想要表明该值实际上可能不存在,我会说 null
没问题。
但是,我通常做的和我认为更好的是创建一个状态模型,其中包含模型,以及与应用程序可能处于的不同状态相关的属性。
例如,在从 API 获取模型数据时,您可能希望在等待获取数据时有一个加载状态以在 UI 中显示微调器. I wrote an article about the architecture that I apply using Riverpod.
状态模型的一个简单示例是:
class ProfileState {
final ProfileModel? profileData;
final bool isLoading;
ProfileState({
this.profileData,
this.isLoading = false,
});
factory ProfileState.loading() => ProfileState(isLoading: true);
ProfileState copyWith({
ProfileModel? profileData,
bool? isLoading,
}) {
return ProfileState(
profileData: profileData ?? this.profileData,
isLoading: isLoading ?? this.isLoading,
);
}
@override
bool operator ==(Object other) {
if (identical(this, other)) return true;
return other is ProfileState &&
other.profileData == profileData &&
other.isLoading == isLoading;
}
@override
int get hashCode => profileData.hashCode ^ isLoading.hashCode;
}