问题描述
所以我刚开始使用riverpod,我遇到了这个奇怪的错误。我正在监听一个提供者,该提供者公开一个控制器,该控制器具有在单击按钮时更改状态的方法。因此,我们的想法是让用户输入他的电子邮件,如果它存在于我们后端服务器的数据库中,您会收到一个错误,显示“电子邮件存在”,但如果没有,它会将您导航到另一个页面。该代码工作正常,但唯一的问题是它将我导航到另一个页面,然后抛出电子邮件存在错误。我的代码在下面
class IntroScreen extends HookWidget {
final TextEditingController emailEditingController = TextEditingController();
final _scaffoldKey = GlobalKey<ScaffoldState>();
...
@override
Widget build(BuildContext context) {
return ProviderListener<AuthenticatingUser>(
provider: registerauthControllerProvider,onChange: (BuildContext context,value) {
if (value.authenticating) {}
if (value.email == null) {
final snackBar = SnackBar(
duration: Duration(seconds: 2),backgroundColor: Colors.black,content: Text('Email Already Exists,Kindly login to continue'),);
ScaffoldMessenger.of(context).showSnackBar(snackBar);
} else {
Navigator.of(context).pushReplacementNamed('/signuppersonal');
}
},child: Scaffold()
}
供应商
final registerauthControllerProvider = StateNotifierProvider.autodispose<
RegisterauthController,AuthenticatingUser>((ref) => RegisterauthController(ref.read));
状态类
import 'package:equatable/equatable.dart';
class AuthenticatingUser extends Equatable {
final String? email;
final bool authenticating;
AuthenticatingUser({
this.email,required this.authenticating,});
factory AuthenticatingUser.initial() {
return AuthenticatingUser(
email: null,authenticating: false,);
}
AuthenticatingUser copyWith(
{
String? email,required bool authenticating,}) {
return AuthenticatingUser(
authenticating: authenticating,email: email,);
}
@override
List<Object?> get props =>
[email,authenticating];
}
最后是我的控制器类
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);
}
state = state.copyWith(authenticating: false,email: email);
}
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)