сгенерированный файл базы данных приложения с ошибками во флаттере

Я использую пакет 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, я думаю, у вас нет проблем.

Другие вопросы по тегам