Flutter使用Provider切换OTP页面Widget无效,求排查指导
问题排查与修复
1. Widget切换逻辑完全写反
你当前的判断逻辑和需求完全相反:当isPhoneNumberEntered为true时,反而显示手机号输入Widget,只有状态为false时才显示验证码Widget,这直接导致输入手机号后无法切换到目标界面。
原错误逻辑:
viewModel.isPhoneNumberEntered ? fillPhoneNumberWidget : otpVerificationWidget,
修复后:
viewModel.isPhoneNumberEntered ? otpVerificationWidget : fillPhoneNumberWidget,
2. Consumer未正确绑定ViewModel实例
你的Consumer没有指定泛型类型,也没有使用builder回调提供的ViewModel实例,而是直接引用外部的viewModel变量。这会导致Consumer无法监听ViewModel的状态变化,即使调用notifyListeners(),UI也不会触发刷新。
原错误代码:
Consumer( builder: (BuildContext context, value, Widget? child) { return ResponsiveHelperWidget( mobile: viewModel.isPhoneNumberEntered ? fillPhoneNumberWidget : otpVerificationWidget, // ... desktop布局 ); }, ),
修复后(指定泛型并使用回调内的实例):
Consumer<OTPViewModel>( builder: (BuildContext context, otpViewModel, Widget? child) { return ResponsiveHelperWidget( mobile: otpViewModel.isPhoneNumberEntered ? otpVerificationWidget : fillPhoneNumberWidget, desktop: Row( children: [ const Expanded(child: OTPWebPageFillerWidget()), Expanded(child: fillPhoneNumberWidget), ], ), ); }, ),
额外验证点
确保你的ViewModel已经通过ChangeNotifierProvider正确注入到Widget树中,比如页面父级存在类似代码:
ChangeNotifierProvider( create: (context) => OTPViewModel(), child: OTPPage(), )
内容的提问来源于stack exchange,提问作者Jaimin Modi
相关产品推荐
相关产品推荐

