我对Provider包非常熟悉,并将其与ChangeNotifier
.
假设我有 3 个具有不同功能的 getter 和方法:
- 切换加载
- 切换图像加载
- 切换 ObsecurePassword
使用 ChangeNotifer
import 'package:flutter/foundation.dart';
class GlobalChangeNotifier extends ChangeNotifier {
bool _isLoading = false;
bool _isImageLoading = false;
bool _isObsecurePassword = false;
bool get isLoading => _isLoading;
bool get isImageLoading => _isImageLoading;
bool get isObsecurePassword => _isObsecurePassword;
void setLoading(bool value) {
_isLoading = value;
notifyListeners();
}
void setImageLoading(bool value) {
_isImageLoading = value;
notifyListeners();
}
void setObsecurePassword(bool value) {
_isObsecurePassword = !value;
notifyListeners();
}
}
final globalChangeNotifier = GlobalChangeNotifier();
如果我正在使用ChangeNotifier
,我只需要创建 1 个文件并调用类似的方法globalChangeNotifier.METHOD()
或类似的值globalChangeNotifier.value
。
但是现在,我已经了解了Riverpod包,并且在文档中,它使用StateNotifier
.
我想将我以前的代码ChangeNotifier
从StateNotifier
. 但据我了解,StateNotifier 只能保存 1 种类型的数据,所以如果我想迁移上面的代码,我应该创建 3 个文件,比方说:
provider_isloading.dart
,provider_isimageloading.dart
和provider_obsecurepassword.dart
.
使用 StateNotifier
// provider_isloading.dart
class IsImageLoading extends StateNotifier<bool> {
IsImageLoading() : super(false);
void toggleImageLoading(bool value) {
state = value;
}
}
final isImageLoadingProvider = StateNotifierProvider((ref) => IsImageLoading());
// provider_isimageloading.dart
class IsLoading extends StateNotifier<bool> {
IsLoading() : super(false);
void toggleLoading(bool value) => state = value;
}
final isLoadingProvider = StateNotifierProvider((ref) => IsLoading());
// provider_obsecurepassword.dart
class IsObsecurePassword extends StateNotifier<bool> {
IsObsecurePassword() : super(false);
void toggleObsecurePassword(bool value) {
state = !value;
}
}
final isObsecurePasswordProvider = StateNotifierProvider((ref) => IsObsecurePassword());
而且我还需要创建 1 个文件来导出所有这些文件:
GlobalStateNotifer.dart
export './provider_loading.dart';
export './provider_imageloading.dart';
export './provider_obsecurepassword.dart';
我的问题是,按照我之前的解释,这是最好的做法吗?