You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter使用sqflite遇MissingPluginException异常求助

解决Flutter中sqflite的MissingPluginException异常

报错信息

Error: MissingPluginException(No implementation found for method getDatabasesPath on channel com.tekartik.sqflite)
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/errors.dart 266:49  throw_
packages/flutter/src/services/platform_channel.dart 294:7                                                                  _invokeMethod
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/_internal/js_dev_runtime/patch/async_patch.dart 45:50            <fn>
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/async/zone.dart 1653:54                                          runUnary
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/async/future_impl.dart 147:18                                    handleValue
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/async/future_impl.dart 766:44                                    handleValueCallback
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/async/future_impl.dart 795:13                                    _propagateToListeners
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/async/future_impl.dart 566:5                                     [_completeWithValue]
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/async/future_impl.dart 639:7                                     callback
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/async/schedule_microtask.dart 40:11                              _microtaskLoop
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/async/schedule_microtask.dart 49:5                               _startMicrotaskLoop
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/_internal/js_dev_runtime/patch/async_patch.dart 166:15           <fn>
Error: MissingPluginException(No implementation found for method openDatabase on channel com.tekartik.sqflite)
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/errors.dart 266:49  throw_
packages/flutter/src/services/platform_channel.dart 294:7                                                                  _invokeMethod
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/_internal/js_dev_runtime/patch/async_patch.dart 45:50            <fn>
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/async/zone.dart 1399:47                                          _rootRunUnary
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/async/zone.dart 1300:19                                          runUnary
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/async/future_impl.dart 147:18                                    handleValue
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/async/future_impl.dart 766:44                                    handleValueCallback
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/async/future_impl.dart 795:13                                    _propagateToListeners
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/async/future_impl.dart 566:5                                     [_completeWithValue]
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/async/future_impl.dart 639:7                                     <fn>
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/async/zone.dart 1391:13                                          _rootRun
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/async/zone.dart 1293:19                                          run
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/async/zone.dart 1225:23                                          callback
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/async/schedule_microtask.dart 40:11                              _microtaskLoop
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/async/schedule_microtask.dart 49:5                               _startMicrotaskLoop
C:/b/s/w/ir/cache/builder/src/out/host_debug/dart-sdk/lib/_internal/js_dev_runtime/patch/async_patch.dart 166:15           <fn>

我的数据库类

import 'dart:async';
import 'package:flutter_app/Book.dart';
import "package:sqflite/sqflite.dart";
import "package:path/path.dart";

class db_helper {
Database? conn;

Future<Database?> get dbConn async {
if (conn == null) {
conn = await connectDB();
}else{
return conn;
}
return conn;
}

Future<Database?> connectDB() async {
String path = join(await getDatabasesPath().toString(), "library.db");
var connection = openDatabase("library.db", version: 2, onCreate: createDB);
return connection;
}

FutureOr<void> createDB(Database db, int version) async {
Database? conn = await this.dbConn;
return await conn?.execute("create table books (id text not null unique, name text not null)");
}

Future<List<Book>> getBooks() async {

    Database? conn = await this.dbConn;
    List<Book> booksList = conn?.query("books") as List<Book>;
    return List.generate(booksList.length, (i) {
      return Book(
        booksList[i].id,
        booksList[i].name
      );
    });

}

Future<void> addBook(Map<String, String> book) async {
Database? conn = await this.dbConn;
await conn?.insert("books", book);
conn?.close();
}
}

pubspec.yaml配置

name: flutter_app
description: A new Flutter application.

publish_to: 'none' # Remove this line if you wish to publish to pub.dev

version: 1.0.0+1

environment:
sdk: '>=2.18.4 <3.0.0'

dependencies:
flutter:
 sdk: flutter
path: ^1.8.2
sqflite: ^2.2.0+3

cupertino_icons: ^1.0.2

dev_dependencies:
flutter_test:
 sdk: flutter

flutter_lints: ^2.0.0

flutter:
 uses-material-design: true

解决步骤

1. 确认运行环境

sqflite仅支持Android、iOS和macOS平台,不支持Web。如果当前是在Web浏览器中运行项目,必然会触发该异常,切换到Android/iOS模拟器或真机即可。

2. 重置依赖并重启项目

  • 执行命令清理缓存:flutter clean
  • 重新拉取依赖:flutter pub get
  • 完全关闭IDE和模拟器/真机,重新打开后再运行项目

3. 修复数据库类代码中的错误

3.1 修正数据库路径获取

getDatabasesPath()是异步方法,不能直接调用toString(),应先await获取路径,再拼接数据库文件名:

Future<Database?> connectDB() async {
  String path = join(await getDatabasesPath(), "library.db");
  var connection = openDatabase(path, version: 2, onCreate: createDB);
  return connection;
}

3.2 修正建表逻辑

createDB方法不需要再调用dbConn,直接使用传入的db参数执行建表语句,避免循环调用:

FutureOr<void> createDB(Database db, int version) async {
  await db.execute("create table books (id text not null unique, name text not null)");
}

3.3 修正数据查询映射

query方法返回的是List<Map<String, dynamic>>,不能直接强制转换为List<Book>,需手动映射为实体类:

Future<List<Book>> getBooks() async {
  Database? conn = await this.dbConn;
  List<Map<String, dynamic>> maps = await conn!.query("books");
  return List.generate(maps.length, (i) {
    return Book(
      maps[i]['id'] as String,
      maps[i]['name'] as String
    );
  });
}

3.4 移除不必要的连接关闭操作

addBook方法中不要关闭数据库连接,单例连接应保持长期可用,关闭后后续操作会报错:

Future<void> addBook(Map<String, String> book) async {
  Database? conn = await this.dbConn;
  await conn?.insert("books", book);
}

4. 版本兼容性检查

当前Flutter SDK 2.18.4与sqflite 2.2.0+3版本兼容,若上述操作后仍有问题,可尝试升级sqflite至最新兼容版本(执行flutter pub upgrade sqflite)。


内容的提问来源于stack exchange,提问作者user20503448

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 15:35:26