Flutter中FutureBuilder为何无法返回指定Widget?
问题分析与解决
核心问题:语法错误(if代码块未正确闭合)
你的FutureBuilder代码里,if(snapshot.connectionState == ConnectionState.done)的代码块缺少闭合的大括号,导致后续return语句的语法逻辑混乱,编译器无法正确解析代码,这就是Widget无法正常返回的根本原因。
修正后的代码
return FutureBuilder( future: getData(), builder: (context, snapshot) { if(snapshot.connectionState == ConnectionState.done) { print("TEST"); if(snapshot.data == null) print("Null"); return Container( height: 90, width: 90, color: Colors.white, ); } // 补上缺失的闭合大括号 return Container( height: 30, width: 30, color: Colors.redAccent, ); }, );
关于getData函数的优化建议
当前写法里await和then同时使用存在冗余,可以简化为:
Future<User> getData() async { final snapshot = await FirebaseFirestore.instance.doc(reference).get(); userdata = User.fromJson(snapshot.data()!); return userdata; }
如果不需要全局保存userdata,还可以进一步简化为直接返回解析结果:
Future<User> getData() async { final snapshot = await FirebaseFirestore.instance.doc(reference).get(); return User.fromJson(snapshot.data()!); }
关于memtrack错误的说明
日志里的E/memtrack: Couldn't load memtrack module是Android系统底层的警告,和你的业务代码无关,不会影响App功能,确实可以忽略。
内容的提问来源于stack exchange,提问作者user16591216
相关产品推荐
相关产品推荐

