首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在flutter_bloc中调用异步事件

在flutter_bloc中调用异步事件
EN

Stack Overflow用户
提问于 2022-02-10 11:58:36
回答 2查看 2.2K关注 0票数 0

我正试图在颤振应用程序加载后立即从API中获取数据,但我无法做到这一点。

代码语言:javascript
复制
class MarketBloc extends Bloc<MarketListEvent, MarketListState> {
  MarketBloc() : super(MarketLoading()) {
    on<MarketSelectEvent>((event, emit) async {
      emit(MarketLoading());
      final data = await ApiCall().getData(event.value!);
      globalData = data;
      emit(MarketDataFetched(marDat: globalData.data, dealType: event.value));
    });

    
  }
}

我将MarketLoading状态称为初始状态,然后调用MarketSelectEvent,但在当前代码中,操作是必需的,并且我希望在不采取任何操作的情况下实现它。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-02-10 15:04:22

你有两个选择:

一旦实例化MarketBloc,就从UI中添加一个事件

代码语言:javascript
复制
  MarketBloc()..add(MarketSelectEvent())

在初始化代码中添加事件

代码语言:javascript
复制
  MarketBloc() : super(MarketLoading()) {  
    add(MarketSelectEvent());
  }
票数 3
EN

Stack Overflow用户

发布于 2022-02-10 15:01:03

您可以在应用程序加载的第一页的initState中执行此操作。

代码语言:javascript
复制
class TestPage extends StatefulWidget {
  @override
  State<TestPage> createState() => _TestPageState();
}

class _TestPageState extends State<TestPage> {
  late MarketBloc marketBloc;

  @override
  void initState() {
    super.initState();
    marketBloc = BlocProvider.of<MarketBloc>(context);
    marketBloc.add(MarketSelectEvent());
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: BlocBuilder<MarketBloc, MarketListState>(
          builder: (context, state) {
            if (state is MarketLoading) {
              return Text('loading...');
            }
            if (state is MarketDataFetched) {
              return ...your UI that contains data from API call
            }
          },
        ),
      ),
    );
  }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71064724

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档