间接导出的类不可见

时间:2019-06-29 07:09:53

标签: flutter dart visibility importerror backendless

我在使用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'。此类是在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间接导入它,但显然不是。当我显式导入它时(使用相同的import语句,但是现在在我自己的代码中,而不仅仅是在backendless_sdk.dart中间接),我收到警告Don't import implementation files from another package。但这不是一个实现文件。它作为公共API的一部分导出(至少我理解export语句的意思)。

Dart tutorial for creating packages建议将导出语句直接放置在lib下,而不是lib/src中,因此我想知道这是否是插件结构中的错误,或者是否我做错了。

我将不胜感激,希望能找到一个解决这个特定问题的方法,也希望我能更好地理解dart的软件包,库,导入和导出的指针。不幸的是,我认为the language specification在这方面没有特别的帮助。

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

该问题已在插件的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);