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

Flutter中使用freezed与bloc获取API数据后无法渲染UI的问题

问题解决:Flutter Bloc+Freezed数据已获取但UI不渲染

核心问题出在UsersBloc未正确发送状态更新——你只是创建了状态对象,但没有通过emit()函数将状态传递给Bloc的状态流,导致UI的BlocBuilder无法感知到状态变化,始终停留在初始的loading状态。

修正后的UsersBloc代码

class UsersBloc extends Bloc<UsersEvent, UsersState> {
  final Repository repository;

  UsersBloc(this.repository) : super(const UsersState.loading()) {
    on<UsersEvent>(
      (event, emit) async {
        if (event is UsersAllEventUser) {
          // 发送loading状态
          emit(const UsersState.loading());
          try {
            final List<Users>? users = await repository.getUsers();
            // 发送数据状态,将获取到的用户列表传递出去
            emit(UsersState.data(users ?? []));
            print(UsersState.data(users ?? []));
          } catch (e) {
            // 发送错误状态
            emit(const UsersState.error());
          }
        }
      },
    );
  }
}

额外检查点

  • 确认UI页面已通过BlocProvider正确注入UsersBloc,示例:
    BlocProvider(
      create: (context) => UsersBloc(Repository()),
      child: YourUsersPage(),
    )
    
  • 确保已触发获取用户的事件,比如在页面的initState中:
    @override
    void initState() {
      super.initState();
      BlocProvider.of<UsersBloc>(context).add(UsersEvent.getUsers());
    }
    
  • 验证Repository的getUsers()方法确实返回了非空且有效的用户列表(可通过打印users长度确认)

内容的提问来源于stack exchange,提问作者user16357470

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 04:25:32