我正在学习颤振,并决定使用 cubit 开发一个待办事项列表应用程序。我在主屏幕中使用 bloc 提供程序创建了一个肘,在另一个屏幕中我试图直接使用相同的肘而不创建另一个。
主屏幕 cubit 部分和使用 cubit 创建数据库:
我在这里创建了cubit并创建了数据库。
class Homescreen extends StatelessWidget {
const Homescreen({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return BlocProvider(
create: (context) => appcubit()..CreateDatabase(),
child: BlocConsumer<appcubit, appStates>(
listener: (context, state) {
// ignore: todo
// TODO: implement listener
},
builder: (context, state) {
appcubit cubit = appcubit.get(context);
return Scaffold(
我有一个指向第二页的按钮:
Widget buildTaskCat(tasknum, cat, progress, context) {
return InkWell(
onTap: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => cattaskview(
cat: cat,
progress: progress,
tasknum: tasknum,
),
),
);
},
在第二页上,我试图在不使用 bloc 提供者的情况下消耗肘。当我以某种方式使用 bloc 提供程序时,我无法访问数据库中的数据,我必须再次调用 create database。
class cattaskview extends StatelessWidget {
const cattaskview(
{Key? key,
required this.cat,
required this.tasknum,
required this.progress})
: super(key: key);
final String cat;
final int tasknum;
final double progress;
@override
Widget build(BuildContext context) {
return BlocConsumer<appcubit, appStates>(
listener: (context, state) {
// TODO: implement listener
},
builder: (context, state) {
return Scaffold(
当我尝试运行时收到此错误消息
if (inheritedElement == null && null is! T) {
throw ProviderNotFoundException(T, context.widget.runtimeType);
}
return inheritedElement;
}