Flutter对接REST API时登录功能无响应问题排查求助
问题定位&修复方案
你遇到的点击登录无响应是以下几个代码错误导致的:
1. 核心问题:缺失Form组件包裹输入框,表单逻辑完全不生效
你定义了globalFormKey用于表单校验,但两个TextFormField外层没有套Form组件关联这个key,导致validateAndSave()方法中globalFormKey.currentState永远为null,方法直接返回false,按钮点击后的登录逻辑完全不会执行。
2. 登录请求模型未初始化,会触发空指针
你声明了两个LoginRequestModel类型变量:requestModel和loginRequestModel,initState里只初始化了requestModel,但表单保存、登录请求用的都是未初始化的loginRequestModel,就算表单校验通过也会直接崩溃。
3. Scaffold未绑定key,提示框无法弹出
你定义了scaffoldKey但没有绑定到Scaffold组件的key属性上,就算登录请求完成想要弹出SnackBar提示也会报错。
修复步骤
- 添加Form组件包裹输入区域
将两个TextFormField所在的Column外层套上Form组件,关联你定义的表单key:
Padding( padding: EdgeInsets.all(30), // 新增Form组件 child: Form( key: globalFormKey, child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ // 原有子组件不变,包括图片、文字、两个TextFormField、按钮等 ], ), ), )
- 修正请求模型初始化逻辑
删掉重复的无用变量,统一初始化登录请求模型,修改initState代码:
@override void initState(){ super.initState(); // 直接初始化你业务中用到的loginRequestModel loginRequestModel = LoginRequestModel(); } // 删掉没用的LoginRequestModel requestModel; 变量声明
- 给Scaffold绑定key
修改Scaffold的定义,绑定scaffoldKey保证提示框正常弹出:
return Scaffold( key: scaffoldKey, appBar: AppBar( title: Text("Login", style: TextStyle(color: Colors.white)), centerTitle: true, ), // 其余代码不变 )
修复后点击登录就可以正常触发请求逻辑了,另外你代码中用到的RaisedButton、FlatButton都是Flutter已废弃的组件,后续可以替换为ElevatedButton和TextButton避免版本兼容问题。
内容的提问来源于stack exchange,提问作者Jyothi Sri
相关产品推荐
相关产品推荐

