Метод дротика не вызван - PullRequest
0 голосов
/ 29 мая 2020

У меня есть следующий код в проекте dart / flutter с BLo C

abstract class BasePage extends StatelessWidget {
  Widget get body;

  const BasePage({@required Key key}) : super(key: key);

  Bloc create(BuildContext context) {
    final dao = Provider.of<LessonsDao>(context, listen: false);
    return LessonListBloc(dao)..add(LoadListEvent());
  }

  @override
  Widget build(BuildContext context) {
    final blocs = createBlocs(context);
    return BlocProvider(
      lazy: false,
      create: (context) {
        return create(context);
      },
      child: Material(child: body),
    );
  }

}

Теперь, когда я хочу изменить тип возвращаемого значения функции создания на Bloc, виджет подписчика, то есть прослушивает LessonsListLoaded, который находится yield в LessonListBlo c, не доставляется в body виджет:

Bloc create(BuildContext context) {
    final dao = Provider.of<LessonsDao>(context, listen: false);
    return LessonListBloc(dao)..add(LoadListEvent());
}

1 Ответ

1 голос
/ 29 мая 2020

Вы зависите от LessonListBlo c

Но BlocBuilder не может этого понять

Дело в том, что вы сужаете тип в функции create LessonListBlo c -> Blo c

это будет работать

create(...)
LessonListBloc create(...)

это не будет

Bloc create(...)

Перепишите код с типами, и анализатор выдаст ошибку несоответствия типов

BlocProvider<LessonListBloc>(...
...