Я использую пол, и я написал генератор кода, используемый для создания классов DatabaseView. Например, был сгенерирован этот класс:
@DatabaseView(
"SELECT name FROM audio",
viewName: AppDatabase.TABLE_AUDIO_WITH_RECORDS_COUNT,
)
class TestDatabaseView {
String name;
AudioWithRecordsCount({this.name});
}
Затем я использую этот класс в аннотации @Database следующим образом:
@Database(version: 1, entities: [
AudioEntity,
ListeningRecordEntity,
], views: [
TestDatabaseView,
])
Но когда я пытаюсь запустить пол, все сгенерирован, но код для DatabaseView. После некоторого расследования я обнаружил, что (в database_processor.dart floor_generator) следующий код возвращает null, когда я использую сгенерированные классы в списке представлений:
_classElement.getAnnotation(annotations.Database).getField(AnnotationField.databaseViews)
(Это означает, что я не могу прочитать список представлений, когда использую сгенерированные классы в нем). Вот результат, когда я распечатываю весь объект аннотации базы данных, загруженный методом getAnnotation:
Database (entities = List<Type> ([Type (AudioEntity), Type (ListeningRecordEntity)]); version = int (1); views = Null (null))
Я не нашел ничего, что говорит об этой проблеме, кроме этого Как запустить генератор кода на верх другого генератора кода? , сейчас я использую грязный обходной путь (скопируйте и вставьте сгенерированный код в исходный файл).
Я использовал ключ run_before в файле build.yaml моего генератора чтобы убедиться, что он запускается до этажа, выполните следующие действия: https://github.com/dart-lang/build/blob/master/build_config/README.md#defining -builders-to-apply-to-dependents
Есть ли способ использовать сгенерированные классы в аннотациях?