From 3156802df6b47c60b30e4ec75a758086f2e27a80 Mon Sep 17 00:00:00 2001 From: "Sanders (aider)" Date: Sun, 4 May 2025 13:12:53 +0300 Subject: [PATCH] fix: initialize Drift WASM module for web --- finance_app/lib/main.dart | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/finance_app/lib/main.dart b/finance_app/lib/main.dart index 6cbce2a..e6eef20 100644 --- a/finance_app/lib/main.dart +++ b/finance_app/lib/main.dart @@ -1,4 +1,6 @@ import 'package:flutter/material.dart'; +import 'package:flutter/foundation.dart'; // Для kIsWeb +import 'package:drift/wasm.dart'; // Для инициализации WASM import 'app.dart'; // Import the new app root widget import 'database/database.dart'; // Import the database @@ -6,11 +8,35 @@ Future main() async { // Необходимо для асинхронных операций перед runApp, например, инициализации БД WidgetsFlutterBinding.ensureInitialized(); + // Инициализация WASM-модуля SQLite для веб-платформы + if (kIsWeb) { + print("Running on Web, attempting to initialize sqlite3.wasm..."); + // Указываем Drift, где найти файл sqlite3.wasm. + // WasmDatabase.resolveFile попытается найти его автоматически (обычно в корне /sqlite3.wasm). + final result = await WasmDatabase.resolveFile('sqlite3.wasm'); + + if (result.isSuccessful) { + print("sqlite3.wasm loaded successfully."); + } else { + // Если файл не найден или произошла ошибка загрузки + print("Error loading sqlite3.wasm: ${result.errorMessage}"); + // Здесь можно предпринять действия, если загрузка не удалась, + // например, показать сообщение об ошибке пользователю или использовать + // альтернативное хранилище. Пока просто выводим ошибку в консоль. + // Приложение может не работать корректно без базы данных. + } + } else { + print("Running on Native platform, skipping WASM initialization."); + } + + // Создаем единственный экземпляр базы данных для всего приложения + // Это должно происходить ПОСЛЕ инициализации WASM на вебе final database = AppDatabase(); // Опционально: Вставляем начальные данные, если база данных пуста // Это полезно для первого запуска или демонстрации + // Делаем это после создания экземпляра БД await database.insertInitialDataIfNeeded(); // Запускаем приложение, передавая экземпляр базы данных