Внутренняя ошибка:... неоднозначная ссылка: DataGrid определен в библиотеке web/DataGrid.dart, а также в web/out/DataGrid.dart.
Я создал чистую сетку данных, используя веб-интерфейс для тестирования, и он работал нормально. Тогда я решил попытаться объявить это как компонент. Я изменил ссылки на библиотеки, и теперь при попытке запустить приложение выдает ошибку, описанную выше. Вы можете увидеть мою структуру файлов ниже. Причина, по которой я получаю сообщение "неоднозначная ссылка" при попытке его запуска, заключается в том, что когда я вошел в автоматически сгенерированный файл DataGrid.dart в каталоге out, он имел следующее объявление
import 'DataGrid.dart';
...
import '../DataGrid.dart';
Я не понимаю, почему сгенерированный код импортирует их оба. Одна вещь, которую я рассмотрел, заключается в том, что это может быть связано с тем, что файл DataGridPage.html создает экземпляр моего компонента DataGrid, а мой файл DataGridPage.dart импортирует DataGrid.dart, так что он может иметь ссылки на DataGridColumn (для этого необходимо установить столбцы для DataGrid). В DataGridPage.dart я также присоединяю к определенным событиям DataGrid, таким как SortColumnChanged и SelectionChanged, поэтому мне нужно запросить копию моего экземпляра DataGrid в DataGridPage.dart (я не думаю, что есть способ присоединиться к событиям из веб-компонента создание экземпляров в DataGridPage.html).
Есть идеи о том, что я делаю не так?
Вот моя файловая структура:
DataGrid.dart
--------------------------------------------
library datagrid;
...
part 'DataGridColumn.dart';
part 'DataGridRow.dart';
class DataGrid extends WebComponent{...}
DataGridRow.dart
--------------------------------------------
part of datagrid;
class DataGridRow {...}
DataGridColumn.dart
--------------------------------------------
part of datagrid;
class DataGridColumn {...}
DataGrid.html
--------------------------------------------
[contains the component declaration UI]
DataGridPage.html
-----------------------------------------
...
<div is="s-datagrid" id="myDataGrid" ItemsSource="{{app.Assets}}" Columns="{{app.Columns}}"></div>
...
DataGridPage.dart
--------------------------------------------
import 'DataGrid.dart';
import 'Asset.dart';
void main() {
}
DataGridApp _app;
DataGridApp get app {
if (_app == null) {
_app = new DataGridApp();
}
return _app;
}
class DataGridApp{
//provides ItemsSource and DataGridColumn data
}
1 ответ
jmesserly ответил на это на сайте github. Он сказал, что вам нужно удалить компонент импорта в вашем основном файле дротика. Поэтому в моем примере я бы удалил оператор импорта DataGrid.dart из DataGridPage.dart. Среда IDE выдаст вам предупреждение, но вы можете проигнорировать его, потому что он будет фактически запущен из папки out.