Косвенно экспортированный класс не виден - PullRequest
1 голос
/ 29 июня 2019

У меня проблемы с использованием плагина Backendless для Flutter .

Я включаю

import 'package:backendless_sdk/backendless_sdk.dart';

(согласно инструкциям) и может использовать, например, Backendless.UserService. Но если я попытаюсь сгенерировать пользователя для регистрации, например ::10000

    var user = new BackendlessUser();
    user.setEmail("info@example.org");
    user.setPassword("password");
    Backendless.UserService.register(user);

Я получаю ошибку Undefined class 'BackendlessUser' в первой строке. Этот класс определен в src/modules/user_service.dat, который экспортируется src/modules/modules.dart следующим образом:

library modules;

export 'cache.dart';
...
export 'user_service.dart';

который в свою очередь импортируется backendless_sdk.dart следующим образом:

import 'package:backendless_sdk/src/modules/modules.dart';

Я бы подумал, что он импортируется косвенно при импорте backendless_sdk.dart, но, видимо, нет. Когда я импортирую его явно (с тем же оператором импорта, но теперь в моем собственном коде, а не только косвенно в backendless_sdk.dart), я получаю предупреждение Don't import implementation files from another package. Но это не файл реализации; он экспортируется как часть общедоступного API (по крайней мере, я так понимаю выражение export).

В руководстве Dart по созданию пакетов предлагается размещать операторы экспорта непосредственно под lib, а не в lib/src, поэтому мне интересно, является ли это ошибкой в ​​структуре плагина, или я что-то не так делаю.

Буду благодарен как за решение этой конкретной проблемы, так и за указатели на то, как я могу лучше понять пакеты, библиотеки, импорт и экспорт в dart; к сожалению, спецификация языка не особенно полезна в этом отношении.

(Ошибка и предупреждение одинаковы, использую ли я flutter analyze или IntelliJ IDEA.)

Ответы [ 2 ]

1 голос
/ 01 июля 2019

Проблема была исправлена ​​в версии плагина 0.0.3.Пожалуйста, обновите версию backendless_sdk в вашем pubspec.yaml.

Теперь вы можете включить только один импорт:

import 'package:backendless_sdk/backendless_sdk.dart';

Также обратите внимание, что в синтаксисе есть некоторые изменения.Так что для вашего примера вы должны использовать:

var user = new BackendlessUser()
  ..email = "info@example.org"
  ..password = "password";
Backendless.userService.register(user);
1 голос
/ 29 июня 2019

Спасибо за использование Flutter SDK и за указание на эту проблему. Это действительно проблема в структуре плагина. Команда Backendless знает об этом, и эта проблема будет исправлена ​​в следующей версии плагина. На данный момент вы можете импортировать явно и подавить предупреждение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...