Firebase用户UID存入变量及控制台打印报错求助(Flutter)
错误原因与修复方案
错误根源
你把变量赋值语句usuario=authUser.uid;直接写在了Column的children列表中,而children要求的是Widget类型元素,赋值语句的返回值是字符串类型,因此触发了类型不匹配错误。
修复步骤
- 在获取到
authUser后,在Widget构建代码之外完成变量赋值和控制台打印操作,不要把这类逻辑混入Widget列表。 - 如果
usuario是类的成员变量,直接赋值即可;如果是局部变量,就在builder函数内部声明。
修正后的完整代码
Widget build(BuildContext context) { return Scaffold( appBar: AppBar(title: const Text('Bienvenido')), body: Container( child: Column( children: <Widget>[ BlocBuilder<AuthCubit, AuthState>( buildWhen: (previous, current) => current is AuthSignedIn, builder: (_, state) { final authUser = (state as AuthSignedIn).user; // 在这里完成变量赋值和打印,不要放到children列表里 String usuario = authUser.uid; // 局部变量,若为成员变量则直接赋值:this.usuario = authUser.uid; print('当前用户UID:$usuario'); // 控制台打印 return Center( child: Column( children: [ Text('Usuario: ${authUser.uid}'), const SizedBox(height: 16), ElevatedButton( onPressed: () => context.read<AuthCubit>().signOut(), child: const Text('Salir') ) ], ), ); } ), ], ), ), ); }
额外说明
- 如果
usuario需要在其他方法中使用,建议将其声明为当前State类的成员变量,在赋值时用this.usuario = authUser.uid;。 - 生产环境中推荐使用
debugPrint替代print,避免日志混乱。
内容的提问来源于stack exchange,提问作者Gregorio Cruz
相关产品推荐
相关产品推荐

