如何使用getApplicationDocumentsDirectory()和flutter进行Web访问

jdg4fx2g  于 2023-01-14  发布在  Flutter
关注(0)|答案(1)|浏览(917)

我是一个初学者在flutter,我想使用SQlite数据库使用sqflite包在我的Flutter应用程序,我运行我的flutter应用程序在 chrome ,因为我有模拟器不工作,我使用getApplicationDocumentsDirectory在代码中,我有一个错误说:
Error: MissingPluginException(No implementation found for method getApplicationDocumentsDirectory on channel plugins.flutter.io/path_provider)
我在一篇文章中读到:我在开始为一个应用程序添加Web支持后遇到了这个问题。getApplicationDocumentsDirectory函数只支持iOS和Android(docs)。我添加了一个Web检查,并更改了设置目录的方式,为我修复了"找不到方法的实现"。
使用Flutter的kIsWeb来判断平台是否为Web:

Then handle setting the directory accordingly:

if (kIsWeb) {
    // Set web-specific directory
} else {
    appDocumentDirectory = await path_provider.getApplicationDocumentsDirectory();
}

但是我不知道如何设置网络专用目录。
我的密码是

if (_database != null) {
      return _database;
    }
    _database = await _initializeDatabase();
    return _database;
  }

  Future<Database> _initializeDatabase() async {
    Directory directory = await getApplicationDocumentsDirectory();
    String path = join(directory.path, 'annonce_database.db');
    return await openDatabase(path, version: _dbVersion, onCreate: _onCreate);
  }```
tp5buhyn

tp5buhyn1#

getApplicationDocumentsDirectory()在Web上不起作用,因此使用您的代码时,您必须修改th _initializeDatabase()函数,并替换为字符串路径路由,以便在Web(即项目内的assets文件夹)中使用它。不要忘记导入KIsWeb

import 'package:flutter/foundation.dart' show kIsWeb;
...
Future<Database> _initializeDatabase() async {
//here
    if (kIsWeb) {
        String path = "/assets/db";
    } else {
        Directory directory = await getApplicationDocumentsDirectory();
        String path = join(directory.path, 'annonce_database.db');
    }
    return await openDatabase(path, version: _dbVersion, onCreate: _onCreate);
}

相关问题