【问题标题】:Passing a bloc to a widget as a paramater将块作为参数传递给小部件
【发布时间】:2020-06-20 08:32:27
【问题描述】:

如何将块对象作为参数传递给小部件,如下所示:

我希望能够将一个块 (TimerBloc) 或另一个块 (AnotherBloc) 传递到此类,并使用它返回带有该块的 BlocBuilder。

像这样:TimerField(bloc:TimerBloc) 或者这样: TimerField(bloc:AnotherBloc)

class TimerField extends StatelessWidget {
  final [Not sure of the class] bloc;

  const TimerField({
    Key key,
    @required this.bloc,
  }) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return BlocBuilder<[THE BLOC THAT WAS PASSED IN], [AND THE STATE]>(
      .......

【问题讨论】:

    标签: flutter bloc flutter-bloc


    【解决方案1】:
    abstract class BaseBloc extends Bloc<EventType, StateType> {}
    
    class TimerBloc extends BaseBloc {
      @override
      StateType get initialState => // ...
    
      @override
      Stream<StateType> mapEventToState(EventType event) async* {
        // ...
      }
    }
    
    class AnotherBloc extends BaseBloc {
      @override
      StateType get initialState => // ...
    
      @override
      Stream<StateType> mapEventToState(EventType event) async* {
        // ...
      }
    }
    
    class TimerField extends StatelessWidget {
      final BaseBloc bloc;
    
      const TimerField({
        Key key,
        @required this.bloc,
      }) : super(key: key);
    
      @override
      Widget build(BuildContext context) {
        return BlocBuilder<BaseBloc, StateType>(
          bloc: bloc,
          builder: ....
        );
      }
    

    【讨论】:

    • 谢谢,我只是补充说,当我试图让它工作时,看到问题是我希望能够将一个 bloc (TImerBloc) 或另一个 bloc (AnotherBloc) 传递到这个类中,并且使用它来返回带有该块的 BlocBuilder。您的答案仅适用于 TimerBloc,因此为什么我要尝试代码中的 Bloc bloc 部分,以表明这是我需要的,我也会更新我的问题。
    猜你喜欢
    • 1970-01-01
    • 2013-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-24
    • 2019-04-18
    • 2017-11-20
    相关资源
    最近更新 更多