Флаттер, небольшая проблема с блокостроителем локтя

#flutter #dart #bloc #mobile-development #flutter-bloc

Вопрос:

Я пытаюсь показать свое внутреннее состояние Cubit с помощью BlockBuilder, это мой код:

 class CounterCubit extends Cubit<int> {

  CounterCubit() : super(0);
  void increment() => emit(state   1);
  void decrement() => emit(state - 1);
}
 
 class CounterContainer extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return BlocProvider(create: (_) => CounterCubit(), child: CounterView());
  }
}
 
 void main() {
  runApp(MaterialApp(
    theme: myTheme,
    home: CounterView(),
  ));
}
 
 class CounterView extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    final textTheme = Theme.of(context).textTheme;
    return Scaffold(
      appBar: AppBar(
        title: const Text("Example"),
      ),
      body: Center( //I guess the problem is here
          child: BlocBuilder<CounterCubit, int>(builder: (context, state) {
          return Text("$state", style: textTheme.headline2);
      })),

      //Increment and decrement button
      floatingActionButton: Column(
        mainAxisAlignment: MainAxisAlignment.end,
        crossAxisAlignment: CrossAxisAlignment.end,
        children: [
          FloatingActionButton(
            child: const Icon(Icons.add),
            onPressed: () => context.read<CounterCubit>().increment(),
          ),
          const SizedBox(
            height: 8,
          ),
          FloatingActionButton(
            child: const Icon(Icons.remove),
            onPressed: () => context.read<CounterCubit>().decrement(),
          )
        ],
      ),
    );
  }
}
 

Ошибка консоли заключается в

Ошибка: Не удалось найти правильного поставщика над этим виджетом BlocBuilder<CounterCubit, int>

Я уже пробовал использовать провайдера, но это не решило проблему

Комментарии:

1. Этот пример работает на меня. Не могли бы вы указать версию flutter и пакеты, которые вы используете, пожалуйста 😀

2. Привет, @ЛуизА. Chaglla я использую Flutter 2.0.5, Dart 2.12.3 и flutter_bloc: ^7.0.0. Я обновил свой пост своим основным кодом

Ответ №1:

Вы не используете CounterContainer , поэтому у вас нет контркубита. Это должно быть:

 void main() {
  runApp(MaterialApp(
    theme: myTheme,
    home: CounterContainer(),
  ));
}
 

Комментарии:

1. О, Действительно!! здесь это тоже сработало, большое вам спасибо!!