【问题标题】:Indirectly exported class not visible间接导出的类不可见
【发布时间】:2019-06-29 07:09:53
【问题描述】:

我在使用 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 的导入间接导入,但显然不是。当我显式导入它时(使用相同的导入语句,但现在在我自己的代码中,而不仅仅是在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,错误和警告都是一样的。)

【问题讨论】:

    标签: flutter dart visibility importerror backendless


    【解决方案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);
    

    【讨论】:

    • 太好了,谢谢,这行得通!而且语法更方便。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2018-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-22
      • 2019-04-18
      相关资源
      最近更新 更多