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

Flutter初始化SQLite数据库失败:databaseFactory未初始化

解决Flutter中SQLite初始化报错:Bad state: databaseFactory not initialized

问题重现

尝试在Flutter中初始化SQLite数据库时遇到以下错误:

Error: Bad state: databaseFactory not initialized

所用代码及依赖如下:

数据库初始化代码

static Future<void> initdb() async {
  final databasePath = await getDatabasesPath();
  final path = join(databasePath, 'models.db');
  _database = await openDatabase(path, version: 1, onCreate: (db, version) {
    return db.execute(
      'CREATE TABLE models(id INTEGER PRIMARY KEY, barcode TEXT, type TEXT, brand TEXT, color TEXT, gender TEXT, price REAL, total INTEGER)',
    );
  });
}

pubspec.yaml依赖配置

dependencies:
  flutter_svg: 2.0.4
  sqflite: 2.2.8
  path_provider: 2.0.14
  flutter:
    sdk: flutter

main.dart调用代码

void main() async{
  await ModelDatabase.initdb();
  runApp(MyApp());
}

已尝试flutter clean、重新验证缓存,使用官方SQLite示例代码也出现相同错误,当前环境为Android Studio 2022.1.1。

解决方案

这个错误的核心是在runApp前执行异步插件操作时,Flutter核心绑定未初始化,只需在数据库初始化前手动初始化WidgetsFlutterBinding即可:

修改main.dart代码:

import 'package:flutter/material.dart'; // 确保导入此包

void main() async{
  WidgetsFlutterBinding.ensureInitialized(); // 手动初始化绑定
  await ModelDatabase.initdb();
  runApp(MyApp());
}

原理说明

runApp方法会自动初始化WidgetsFlutterBinding,但如果在它之前调用依赖原生通道的插件(如sqflite、path_provider),插件无法与原生端建立通信,就会触发databaseFactory not initialized错误。提前调用WidgetsFlutterBinding.ensureInitialized()可以解决这个顺序问题。

额外排查步骤

如果问题仍存在,可尝试:

  • 执行flutter pub get确保依赖完全安装
  • 重启IDE和运行设备
  • 检查代码中是否有提前访问数据库实例的逻辑,打乱初始化顺序

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 19:22:51