【问题标题】:state not yield in Flutter bloc pattern在 Flutter bloc 模式中状态不屈服
【发布时间】:2020-07-12 08:09:50
【问题描述】:

我正在使用flutter_bloc包在flutter bloc模式中构建一个测试应用程序。问题是仅呈现 Event1 的状态,但代码在 mapEventToState 中执行。我认为问题在于 yield 语句,因为在触发 Event2 时,mapEventToState 执行中的相应打印语句。

page_bloc.dart 中的 ma​​pEventTOState 函数

Stream<PageState> mapEventToState(PageEvent event) async* {
    print(event);
    if (event is Event1) {
      print(">> $event");
      yield State10();
      try {
        await someAsyncFunction();
        yield State11(message: "message");
        print("reached 100");
      } catch (e) {
        yield State12();
      }
    } else if (event is Event2) {
      yield State20();
      try {
        await someAyncFunction2();
        yield State21();
      } catch (e) {
        yield State22(message: e.toString());
      }
    }
    // TODO: implement mapEventToState
  }

page_state.dart如下:

abstract class PageState extends Equatable {
  @override
  List<Object> get props => [];
}

class State10 extends PageState {}
class State11 extends PageState {}
class State12 extends PageState {}

class State20 extends PageState {}
class State21 extends PageState {}
class State22 extends PageState {}

page_event.dart如下所示

abstract class PageEvent extends Equatable {
  @override
  // TODO: implement props
  List<Object> get props => null;
}

class Event1 extends PageEvent {}
class Event2 extends PageEvent {}

BlocBuilder如下:

child: BlocBuilder<PageBloc, PageState>(
                    builder: (context, state) {
                      print(state);
                      if (state is State10) {
                        return Text("State10");
                      } else if (state is State11) {
                        return Text("State11");
                      } else if (state is State12) {
                        return Text("State12");
                      } else if (state is State20) {
                        return Text("State20");
                      } else if (state is State21) {
                        return Text("State21");
                      } else if (state is State22) {
                        return Text("State22");
                      }                       
                    },
                  )

Scaffold中的浮动动作按钮如下:

floatingActionButton: FloatingActionButton(
        onPressed: () => pageBlocInstace2..add(Event2()),
        child: Icon(Icons.done),
      ),

脚手架中的另一个小部件如下:

GestureDetector(
        onTap: () => pageBlocInstace1..add(Event1()),
        child: Center(child: Text("Tap to here")));

【问题讨论】:

  • 我想帮助你,但我无法理解你在这句话中的意思:“问题是只有 Event1 的状态被渲染,但代码在 mapEventToState 中执行。”还有什么问题。
  • @don-prog 我检查了 if 条件中的代码是否适用于 print 语句。 mapEventToStates 中的打印语句被打印,这意味着事件被正确触发。我不确定,但我认为问题在于产量声明
  • @don-prog 我的问题和这个问题有什么关系stackoverflow.com/questions/56641270/…
  • 请给我一些时间研究...
  • 当然。谢谢

标签: flutter dart bloc flutter-bloc


【解决方案1】:

这个问题是由于这两个事件调用了单独的 bloc 实例。

floatingActionButton: FloatingActionButton(
        onPressed: () => pageBlocInstace..add(Event2()),
        child: Icon(Icons.done),
      ),

GestureDetector(
        onTap: () => pageBlocInstace..add(Event1()),
        child: Center(child: Text("Tap to here")));

【讨论】:

    猜你喜欢
    • 2021-08-28
    • 2021-03-10
    • 2019-08-04
    • 2021-03-19
    • 2020-05-06
    • 2021-02-28
    • 2020-01-14
    • 2020-07-09
    • 2021-03-04
    相关资源
    最近更新 更多