Dig*_*iro 5 package dart flutter
我正在为 Flutter Apps 开发一个包
有些方法和类只对包本身有用,对导入我的包的程序员没有用,是否可以隐藏这些方法和类以供进一步实现?
例子:
数据服务.dart
export class DataService{
//Must be visible only for my library
static notifyDataChanged(InternalEvent internalEvent){ ... }
//Must be visible for anyone
static addCallbackOnDataChange(onDataChangeCallback) { ... }
}
Run Code Online (Sandbox Code Playgroud)
内部事件.dart
//Must be visible only for my library as well
export class InternalEvent {
...
}
Run Code Online (Sandbox Code Playgroud)
具有仅包声明的通常方法是将它们放在lib/src/目录中的库中,而不是导出该库。包中的其他库可以导入仅包的库,但不鼓励包外的用户lib/src/直接导入库。(这不是不可能的,只是不鼓励的事情,因为包可以在没有警告的情况下自由更改这些库)。
如果仅包功能需要访问公共类的库私有部分,则它们需要在同一个库中。传统的方法是在库中声明lib/src/并仅导出该库中需要公开的部分:
library myPackage;
export "src/allDeclarations" hide Private, Declarations;
// or
export "src/allDeclarations" show Public, Things;
Run Code Online (Sandbox Code Playgroud)
通常,如果绝对必要,您应该只将导出和非导出的声明放在同一个库中。否则hide/show列表会变得太麻烦,并且很容易忘记hide列表中的声明。
对于包私有成员,存在注释@internal.
使用@internal分析仪会在以下情况下发出警告:
lib)不管怎样,在我看来,Dart 让事情变得非常复杂。需要有既不完全公开又不能从文件外部访问的成员,这是基本的要求,但没有任何解决方案可以提供确定性。注意:
lib/src,但包的使用者仍然能够导入它们,甚至分析器不会产生警告;这只是对流;@internal注释,分析器(即依赖于分析器的IDE)会产生警告,但无论如何都不会阻止您编译代码。如果在不遵守注释时提高分析器生成的警告的严重级别,情况会稍有改善。为此,您需要创建一个 Analysis_options.dart 文件,如下所示:
analyzer:
errors:
invalid_use_of_internal_member: error #possible values: ignore, info, warning, error
Run Code Online (Sandbox Code Playgroud)
请注意,@internal与其他类似的注释 ( @visibleForTesting、@protected) 一样,注释是元包的一部分,它包含在 Flutter Sdk 中,但必须作为依赖项包含在 pure-dart 包中。
你有几种可能:
将方法/变量设为私有,通过添加前缀_:
class _InternalEvent {}
Run Code Online (Sandbox Code Playgroud)
使用hide/show指令:
// lib/src/event.dart
class InternalEvent {}
class VisibleEvent {}
// lib/my_package.dart
export 'src/event.dart' hide InternalEvent;
OR
export 'src/event.dart' show VisibleEvent;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1758 次 |
| 最近记录: |