#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. О, Действительно!! здесь это тоже сработало, большое вам спасибо!!