flutter - 何时在 BlocBuilder() 中提供一个块?
问题描述
我正在尝试将cubit用于颤振计数器应用程序。我想知道何时为 BlocBuilder() 中的 bloc 参数提供 Bloc/Cubit。我试图为以下代码提供一个,但它不起作用并出现错误:
Error: Could not find the correct Provider<CounterCubit> above this CounterPage Widget
.
class CounterPage extends StatelessWidget {
const CounterPage({Key? key, required this.title}) : super(key: key);
final String title;
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(title),
centerTitle: true,
),
body: BlocBuilder<CounterCubit, int>(
bloc: CounterCubit(),
builder: (_, count) => Center(
child: Text('$count'),
)),
floatingActionButton: Row(
mainAxisAlignment: MainAxisAlignment.end,
children: [
Padding(
padding: const EdgeInsets.all(8.0),
child: FloatingActionButton(
onPressed: () => context.read<CounterCubit>().increment(),
tooltip: 'Increment',
child: Icon(Icons.add),
),
),
Padding(
padding: const EdgeInsets.all(8.0),
child: FloatingActionButton(
onPressed: () => context.read<CounterCubit>().decrement(),
tooltip: 'Decrement',
child: Icon(Icons.remove),
),
),
],
),
);
}
}
这是肘的代码。
import 'package:flutter_bloc/flutter_bloc.dart';
class CounterCubit extends Cubit<int> {
CounterCubit() : super(0);
void increment() => emit(state + 1);
void decrement() => emit(state - 1);
}
解决方案
来自官方文档:
如果您希望提供一个范围为单个小部件且无法通过父 BlocProvider 和当前 BuildContext 访问的块,请仅指定该块。
BlocBuilder<BlocA, BlocAState>(
bloc: blocA, // provide the local bloc instance
builder: (context, state) {
// return widget here based on BlocA's state
}
)
在您的情况下,我建议您将 BLoC 提供给上面某处的小部件树,CounterPage
如下所示:
BlocProvider<CounterCubit>(
create: (BuildContext context) => CounterCubit(),
child: CounterPage(),
);
然后,在 中BlocBuilder
,您不需要指定bloc
属性:
...
body: BlocBuilder<CounterCubit, int>(
builder: (_, count) => Center(
child: Text('$count'),
)),
...
推荐阅读
- python-3.x - 在 Gmail 正文 python 3 中查找超链接
- php - 如何将具有相同名称的行合并为一个使用两个 foreach 获取数据的行
- java - javafx 运行时失败
- highcharts - HighCharts:使用不同颜色的标记突出显示特定值
- python - 从网页在服务器上启动 python 脚本
- c++ - 模板结构中的枚举
- java - Virtuoso 数据集在一项服务上工作,而不是在另一项服务上工作
- dependency-injection - 我是否被迫在 Kephas 中使用属性服务注册?
- r - 根据半小时时间序列聚合多个列
- xpath - 如何在其他xpath中使用xpath查找表中的colum索引?