间接导出 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);
我在使用 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);