首页 > 解决方案 > 状态不会在页面导航颤动上持续存在

问题描述

我有一个应用程序,我正在使用 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 状态值返回为空。就像每次页面导航后都会重置状态一样。我希望状态在页面导航后持续存在。我怎样才能做到这一点?

标签: flutterflutter-providerriverpod

解决方案


推荐阅读