Передача blo c виджету в качестве параметра - PullRequest
0 голосов
/ 20 июня 2020

Как я могу передать объект blo c виджету в качестве параметра вроде этого:

Я хочу иметь возможность передавать либо один blo c (TimerBlo c), либо другой blo c (AnotherBlo c) в этот класс и используйте его, чтобы вернуть BlocBuilder с этим blo c.

Как это: TimerField (blo c: TimerBlo c ) или это: TimerField (blo c: AnotherBlo c)

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]>(
      .......

1 Ответ

0 голосов
/ 20 июня 2020
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: ....
    );
  }
...