我想在flutter中使用本地数据库“isar”以及cubit状态管理。在以下代码中:
我收到一条错误消息“实例成员‘_isarIn’无法在初始化程序中访问。尝试用不同的表达式替换对实例成员的引用”当然我检查了提供的解决方案,但它们不适合。
有人可以帮忙吗?
void main() async {
final dir = await getApplicationDocumentsDirectory();
final isarOut = await Isar.open(
[CostSchema],
directory: dir.path,
);
runApp(MainApp(isarIn: isarOut));
}
class MainApp extends StatelessWidget {
MainApp({super.key, required this.isarIn});
final Isar isarIn;
final localIsarRepository = LocalIsarRepository(isarIn);
@override
Widget build(BuildContext context) {
return BlocProvider(
这是因为您试图用
localIsarRepository
和声明字段直接初始化 isarIn
,这是不行的。
但是你必须通过 localIsarRepository
的构造函数来初始化 MainApp
。顺便说一下,如果 MainApp 也是 stateFullWidget,你也可以使用 initState 来完成。
void main() async {
WidgetsFlutterBinding.ensureInitialized();
final dir = await getApplicationDocumentsDirectory();
final isarOut = await Isar.open(
[CostSchema],
directory: dir.path,
);
runApp(MainApp(isarIn: isarOut));
}
class MainApp extends StatelessWidget {
final Isar isarIn;
final LocalIsarRepository localIsarRepository;
MainApp({Key? key, required this.isarIn})
: localIsarRepository = LocalIsarRepository(isarIn), // this is where I explained in above
super(key: key);
@override
Widget build(BuildContext context) {
return BlocProvider(
create: (context) => YourCubit(localIsarRepository),
child: MaterialApp(
home: YourHomePage(),
),
);
}
}
class LocalIsarRepository {
final Isar isar;
LocalIsarRepository(this.isar);
}
class YourCubit extends Cubit<YourState> {
final LocalIsarRepository repository;
YourCubit(this.repository) : super(YourInitialState());
// Put your logics of your cubit
}
class YourHomePage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: Text('Test!!!!'),
),
);
}
}
关于代码:
main 首先初始化
Isar
,然后传递给 MainApp
,然后构造函数初始化 localIsarRepository
。这意味着它正确地获得了isarIn
。并且您的 BlocProvider 使用该存储库设置 Cubit。通过这些代码,您不会直接在字段初始值设定项中访问实例成员。
如果您有任何疑问,请随时询问。
快乐编码...