间接导出 class 不可见

Indirectly exported class not visible

我在使用 the Backendless plugin for Flutter 时遇到问题。

我包括

import 'package:backendless_sdk/backendless_sdk.dart';

(按照说明)然后可以使用例如Backendless.UserService。但是如果我尝试生成一个用户进行注册,例如:

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

第一行出现错误 Undefined class 'BackendlessUser'。此 class 在 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。但它不是一个实现文件;它作为 public API 的一部分导出(至少我理解 export 语句的意思)。

Dart tutorial for creating packages建议将export语句直接放在lib下,而不是lib/src下,所以我想知道这是否是插件结构的错误,还是我做错了什么。

我将非常感谢这个特定问题的解决方案,以及如何更好地理解 dart 中的包、库、导入和导出的指示;不幸的是,我发现 the language specification 在这方面没有特别的帮助。

(无论我使用flutter analyze还是IntelliJ IDEA,错误和警告都是一样的。)

感谢您使用 Flutter SDK 并指出此问题。 这确实是插件结构的问题。 Backendless 团队已经意识到这一点,这个问题将在插件的下一个版本中得到修复。 现在您可以显式导入并取消警告。

该问题已在0.0.3版本的插件中修复。请更新 pubspec.yaml 中的 backendless_sdk 版本。

您现在可以包含唯一的导入:

import 'package:backendless_sdk/backendless_sdk.dart';

另请注意,语法有一些变化。因此,对于您的示例,您应该使用:

var user = new BackendlessUser()
  ..email = "info@example.org"
  ..password = "password";
Backendless.userService.register(user);