Flutter MySQL登录认证后拉取用户信息出现类型错误如何解决
异常根因
Text组件仅接受String类型的入参,你从FlutterSession取出的card值实际被解析为int类型,直接传入Text组件就触发了类型不匹配异常。通常是因为纯数字格式的字符串被FlutterSession自动做了类型转换,取出时从String变成了int。
修复方案
1. 取值时强制转换为String
修改homepage.dart中FutureBuilder的返回逻辑,调用toString()方法做类型转换:
child: FutureBuilder( future: FlutterSession().get('card'), builder: (context, AsyncSnapshot snapshot) { return Text( snapshot.hasData ? snapshot.data.toString() // 新增类型转换逻辑 : 'Loading...', style: TextStyle( color: Colors.white, letterSpacing: 3.0, fontSize: 20, fontWeight: FontWeight.w200 ) ); } ),
2. 存储时显式固定为String类型
你也可以在存储card值时就显式声明为String,避免框架自动转换:
// login.dart中存储逻辑修改为 await FlutterSession().set('card', card.text.toString());
可选优化:加泛型约束提前校验类型
给FutureBuilder和AsyncSnapshot加上泛型约束,在编译阶段就能发现类型不匹配问题:
FutureBuilder<String?>( future: FlutterSession().get('card').then((val) => val?.toString()), builder: (context, AsyncSnapshot<String?> snapshot) { // 原有业务逻辑 } )
内容的提问来源于stack exchange,提问作者Dren
相关产品推荐
相关产品推荐

