升级Flutter与Android Studio后Firebase Auth认证出现类型赋值报错
Flutter升级后类型报错解决方案
报错根因
- 升级Flutter至2.0+版本后,项目默认启用Dart空安全校验规则
- 代码中
StreamBuilder未指定泛型类型,系统默认将snapshot.data推断为Object?类型,和目标User类型不匹配,触发类型赋值错误。同时authStateChanges()返回的流本身就可能返回null值,原有非空User类型变量无法承接可空返回值。
修复方案
方案1(推荐):为StreamBuilder指定泛型
直接声明流的返回值类型,让系统自动推断snapshot.data的类型,修改后代码如下:
if (snapshot.connectionState == ConnectionState.done) { // 补充泛型声明,指定流返回值为可空User类型 return StreamBuilder<User?>( stream: FirebaseAuth.instance.authStateChanges(), builder: (context, snapshot) { if (snapshot.connectionState == ConnectionState.active) { // 变量同步改为可空User?类型承接返回值 User? user = snapshot.data; if (user == null) { return LoginPageTest(); // 其余原有逻辑保持不变
方案2:手动添加类型强转
如果不想修改泛型声明,可以直接对snapshot.data做类型转换:
// 手动强转为可空User类型 User? user = snapshot.data as User?;
注意事项
禁止直接强转为非空User类型(即as User写法),否则当用户未登录、流返回null时,运行时会抛出强转异常。如果你的项目是从非空安全版本升级而来,建议全局排查所有FutureBuilder、StreamBuilder组件,补充对应泛型声明,避免出现同类类型报错。
内容的提问来源于stack exchange,提问作者Laurent Thomas
相关产品推荐
相关产品推荐

