You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 00:24:16