flutter - 状态不会在页面导航颤动上持续存在
问题描述
我有一个应用程序,我正在使用 Riverpod 管理状态。好吧,我注意到在页面导航上我失去了状态,它重置为初始状态。这是我的代码;
提供者
final registerAuthControllerProvider = StateNotifierProvider.autoDispose<
RegisterAuthController,
AuthenticatingUser>((ref) => RegisterAuthController(ref.read));
状态通知程序代码
class RegisterAuthController extends StateNotifier<AuthenticatingUser> {
RegisterAuthController(this._read) : super(AuthenticatingUser.initial());
final Reader _read;
void updateEmail(String email) async {
state = state.copyWith(authenticating: true);
final getEmail = await _read(authRepositoryProvider).checkEmail(email);
if (getEmail == 'Email Already Exists') {
state = state.copyWith(authenticating: false, emailError: true);
}
state = state.copyWith(authenticating: false, email: email);
print(state);
}
void updatePersonalDetails(
String firstName, String lastName, String phoneNumber) {
state = state.copyWith(
authenticating: false,
firstName: firstName,
lastName: lastName,
phoneNumber: phoneNumber);
print(state);
} }
状态类 导入 'package:equatable/equatable.dart';
class AuthenticatingUser extends Equatable {
final String? firstName;
final String? lastName;
final String? email;
final String? phoneNumber;
final String? password;
final int? passcode;
final String? img;
final bool authenticating;
final bool emailError;
AuthenticatingUser(
{this.firstName,
this.lastName,
this.email,
this.phoneNumber,
this.password,
this.passcode,
required this.authenticating,
required this.emailError,
this.img});
factory AuthenticatingUser.initial() {
return AuthenticatingUser(
firstName: null,
lastName: null,
email: null,
phoneNumber: null,
passcode: null,
password: null,
authenticating: false,
emailError: false,
img: null);
}
AuthenticatingUser copyWith(
{String? firstName,
String? lastName,
String? email,
String? phoneNumber,
int? passcode,
required bool authenticating,
bool emailError = false,
String? password,
String? img}) {
return AuthenticatingUser(
authenticating: authenticating,
firstName: firstName,
lastName: lastName,
email: email,
password: password,
passcode: passcode,
phoneNumber: phoneNumber,
emailError: emailError,
img: img);
}
@override
List<Object?> get props =>
[firstName, lastName, email, phoneNumber, password, img, authenticating];
}
第 1 页 On Tap 方法
onTap: () => {
print('object'),
if (EmailValidator.validate(emailEditingController.text))
{
context
.read(registerAuthControllerProvider.notifier)
.updateEmail(emailEditingController.text),
},
// notValid = true,
},
更新电子邮件功能的打印状态返回带有更新电子邮件的状态,但是当通过提供者侦听器导航到第二页时,我使用 updatePersonalDetails 函数更新状态,我看到 authenticateduser.email 状态值返回为空。就像每次页面导航后都会重置状态一样。我希望状态在页面导航后持续存在。我怎样才能做到这一点?
解决方案
推荐阅读
- php - 如何将查询结果保存在变量中?
- numpy - 用 numpy 分组计数
- ionic-framework - Ionic 3:使用 F5/浏览器刷新按钮在浏览器中重新加载页面
- javascript - 具有相同名称的多个文件未在环回中上传
- javascript - npm run serve 永远挂起 vue
- asp.net - 当我在自定义 GridView 中更新时,TextBox 返回 null
- dns - DNS - 基于地理位置的固定 IP 顺序
- gradle - IntelliJ 2018.3.6 无法识别 gradle 任务和属性
- python - 如何将字符串列表转换为列表列表?
- java - 我应该如何处理 Safari 上的 Selenium .click() 方法?