сгенерированный файл базы данных приложения с ошибками во флаттере
Я использую пакет moor в flutter для своего приложения. Я следую инструкциям в Интернете https://moor.simonbinder.eu/docs/getting-started/starting_with_sql/
но когда я запускаю команду сборки: flutter pub run build_runner создает созданный файл appdatabase.g.dart, он содержит ошибки. вот снимок ошибок:
вот мои зависимости
cupertino_icons: ^0.1.2
month_picker_dialog: ^0.3.1
flutter_cupertino_localizations: ^1.0.1
moor: ^2.3.0
provider: ^4.0.3
moor_ffi: ^0.4.0
path_provider: ^1.6.0
dev_dependencies:
flutter_test:
sdk: flutter
intl_translation: ^0.17.1
moor_generator: ^2.3.1
build_runner:
проблема, похоже, связана с классом "Таблица". есть конфликт между дротиком и болотом. сообщение указывает, что существует две версии. как я могу решить эту проблему, чтобы моя ошибка исчезла
3 ответа
Ответ - использовать import 'package:flutter/widgets.dart' hide Table;
dependencies:
flutter:
sdk: flutter
#moor database
moor_flutter: ^3.1.0
# For the UI
provider: ^4.3.1
# For OS-specific directory paths
path_provider: ^1.6.11
cupertino_icons: ^0.1.3
dev_dependencies:
flutter_test:
sdk: flutter
#new Dependencies add
moor_generator: ^3.2.0
build_runner:
Шаг 1: удалите файл appdatabase.g.dart
шаг 2: Flutter Clen
Шаг 3: Получите Flutter
Шаг 4: flutter pub запустите build_runner build watch
Эта ошибка возникает, когда у вас нет «импорта» вашей таблицы или dao в вашем классе AppDb, в моем случае у меня более 90 таблиц и dao, затем я разделил их в классе со статическим списком, но мне нужно сделать импорт моих файлов в app_database.dart тоже из-за ошибки.
У меня есть этот класс для таблиц:
import '../tables/table_one.dart';
import '../tables/table_two.dart';
class TableList {
static const List<Type> tables = [
TableOne,
TableTwo,
]
}
И еще один для файлов Dao:
import '../dao/table_one_dao.dart';
import '../dao/table_two_dao.dart';
class DaoList{
static const List<Type> daos= [
TableOne,
TableTwo,
]
}
И это мой класс AppDb:
import '../tables/table_one.dart';
import '../tables/table_two.dart';
import '../dao/table_one_dao.dart';
import '../dao/table_two_dao.dart';
part 'app_db.g.dart';
@DriftDatabase(
tables: TableList.tables,
daos: DaoList.daos,
)
class AppDb extends _$AppDb {
AppDb() : super(_openConnection());
@override
int get schemaVersion => 1;
}
LazyDatabase _openConnection() {
return LazyDatabase(() async {
final dbFolder = await getApplicationDocumentsDirectory();
final file = File(p.join(dbFolder.path, 'app_database.db'));
return NativeDatabase(file);
});
}
Как видите, мне нужно снова объявить импорт в моем файле AppDb для разрешения. Если вы объявляете свои таблицы непосредственно в AppDb, я думаю, у вас нет проблем.