无法访问MongoDb示例使用mongo_dart包使用riverpod

ewm0tg9j  于 2023-05-04  发布在  Go
关注(0)|答案(1)|浏览(134)

我很难理解如何使用riverpod在flutter内部使用mongodb。有两种方法可以获得连接,一种是使用var db = Db("mongodb://localhost:27017/mongo_dart-blog"); await db.open();
其他使用var db = await Db.create("mongodb+srv://<user>:<password>@<host>:<port>/<database-name>?<parameters>"); await db.open();
我尝试使用后一种方法,因为我的示例在atlas cloud上,但这里问题开始了,因为后一种方法的类型是Future,我无法使用这里使用futureprovider创建的db示例,因为类型是asyncvalue。
我试图在不使用未来提供程序的情况下解决这个问题,通过使用基本提供程序来创建示例并使用如下重写:

final dataProvider = Provider<Db>((ref) => throw 'Database Not Initialized');

Future<void> main() async {
  WidgetsFlutterBinding.ensureInitialized();
  var db = Db.create('mongo-srv-string');
  db.open();

  runApp(
    const ProviderScope(
      overrides: [ dataProvider.overrideWithValue(db);]
      child: Application(),
    ),
  );
}

但它抛出了一个错误:MongoDart Error: Db is in the wrong state: State.OPENING
我认为自己是一个初学者在问候与mongo和riverpod工作
所以,如果有人遇到过类似的问题或者在这些概念上比我更有知识的人帮助我解决这个问题,我将非常感激。

nfeuvbwi

nfeuvbwi1#

您需要等待数据库打开:

final dataProvider = Provider<Db>((ref) => throw 'Database Not Initialized');

Future<void> main() async {
  WidgetsFlutterBinding.ensureInitialized();
  final db = Db.create('mongo-srv-string');
  await db.open(); // here

  runApp(
    const ProviderScope(
      overrides: [ dataProvider.overrideWithValue(db) ],
      child: Application(),
    ),
  );
}

相关问题