Flutter(플러터) 개발 중에 sqflite를 적용하고, 타겟 디바이스를 윈도우로 선택하여 실행하니
“Unhandled Exception: Bad state: databaseFactory not initialized” 메시지와 함께 오류가 발생했다.
이 경우, 원인과 함께 해결 방안을 공유해 본다.

원인
sqflite는 Flutter에서 가장 널리 사용되는 SQLite 플러그인으로, 주로 모바일 환경(Android, iOS)에서 SQLite 데이터베이스와 쉽게 연동할 수 있도록 도와준다.
sqflite는 모바일 환경에서 내장된 SQLite 라이브러리를 활용한다.
그러나 데스크톱에서는 모바일 OS처럼 SQLite가 기본 내장되어 있지 않거나, Flutter 앱이 접근할 수 없어 다음과 같은 메세지와 함께 오류가 발생한다.
Debug service listening on ws://127.0.0.1:4808/k4trF4atSfE=/ws
Syncing files to device Windows...
[ERROR:flutter/runtime/dart_vm_initializer.cc(40)] Unhandled Exception: Bad state: databaseFactory not initialized
databaseFactory is only initialized when using sqflite. When using `sqflite_common_ffi`
You must call `databaseFactory = databaseFactoryFfi;` before using global openDatabase API
#0 databaseFactory.<anonymous closure> (package:sqflite_common/src/sqflite_database_factory.dart:32:7)
#1 databaseFactory (package:sqflite_common/src/sqflite_database_factory.dart:36:6)
#2 getDatabasesPath (package:sqflite_common/sqflite.dart:109:38)
해결
플러터 앱이 실행될 때, 플랫폼이 윈도우일 경우 sqflite_ffi를 초기화해 주면 해결된다.
먼저 아래 명령어로 sqflite_common_ffi 패키지를 추가한다.
pubspec.yaml의 dependencies 항목에도 sqflite_common_ffi: ^2.3.6 (또는 그 이후 버전)이 추가된다.
dart pub add sqflite_common_ffi
main.dart에서 sqflite_ffi와 Platform을 임포트하고, sqflite_ffi 초기화 코드를 삽입한다.
데이터베이스 액세스는 초기화 코드 이후에 사용하도록 한다.
import 'package:sqflite_common_ffi/sqflite_ffi.dart';
import 'dart:io' show Platform;
void main() {
// sqflite_ffi 초기화
if (Platform.isWindows) { // 플랫폼이 Windows일 경우
sqfliteFfiInit(); // SQLite C 라이브러리 초기화
databaseFactory = databaseFactoryFfi; // FFI 기반 팩토리 사용 설정
}
}