FlutterAndroid技术进阶

Dart | 彻底理解Dart中的库与访问可见性

2020-01-28  本文已影响0人  彭旭锐

前言


1、没有访问修饰符


2、Dart中的词法作用域

String name = "顶级";

class Car{
  String name = "属性";
}

void main() {
  String name = "函数";
  
  void inner(){
    String name = "局部函数";
    print(name);
  }
  
  {
    String name = "代码块";
    print(name);
  }
  
  print(name);
  inner();
}

输出如下:

代码块
函数
局部函数

3、闭包函数


4、扩展函数


5、静态成员与实例成员

class Car{

  static String nameStatic = "类成员";
  String nameInstance = "实例成员"; 

  static void runStatic(){
    print(nameStatic);
    print(nameInstance); // 此行编译出错 
  }
  
  void runInstance(){
    print(nameStatic);
    print(nameInstance);
  }
}

编译出错:Instance members can't be accessed from a static method.

class Car{

  class NestedEngineInstance{ // 此行编译出错
    void run(){
    }
  }

  static class NestedEngineStatic{ // 此行编译出错
    void run(){
    }
  }
}

编译出错:Classes can't be declared inside other class


6、库(packages)

Dart使用库(另译:包)来管理共享软件,并通过 Pub 工具管理,在 pub.dev.site 站点上可以找到公开的代码库。

6.1 导入代码库

导入一个代码库可以分为三个步骤:

todo 讲解

6.2 定制化导入

import 'package:lib1/lib1.dart';
import 'package:lib2/lib2.dart' as lib2;
// 使用 lib1 的 Element 类。
Element element1 = Element();
// 使用 lib2 的 Element 类。
lib2.Element element2 = lib2.Element();
// 只导入 lib1 中的 foo。
import 'package:lib1/lib1.dart' show foo;

// 导入 lib2 中除了 foo 外的所有。
import 'package:lib2/lib2.dart' hide foo;
import 'package:greetings/hello.dart' deferred as hello;

当实际需要使用到库中 API 时先调用loadLibrary()加载库,loadLibrary()可以调用多次,代码库只会被加载一次:

Future greet() async {
  await hello.loadLibrary();
  hello.printGreeting();
}

延迟加载的常用场景是:

提示

Flutter、Dart VM以及 DartDevc 目前都不支持延迟加载。

6.3 使用part拆分代码库

当一个代码库的功能过于庞大时,基于职责分离的原则,有时需要将一个dart文件拆分为多个dart文件,就需要使用partpart of关键字。

以上文提到的provider-4.0.2为例:

// provider.dart:
// 以上省略...
part 'inherited_provider.dart';
part 'deferred_inherited_provider.dart';
// 以下省略...
// inherited_provider.dart':
// 文件开头
part of 'provider.dart'; 
// 以下省略...

可以看到,provider.dart将一部分功能拆分到inherited_provider.dart文件中,后者其实是前者的一部分(part of)。

importpart很相似,但是有很大的区别的:

异同 import part
描述 导入一个代码库 一个dart文件拆分为多个dart文件
共同点 放在文件开头 _
不同点 A import B,A与B是独立的命名空间 A part B,A与B属于同一个命名空间
限制 _ part of所在文件不能包括importlibrary等关键字

参考文献

参考资源


推荐阅读

感谢喜欢!你的点赞是对我最大的鼓励!欢迎关注彭旭锐的简书!

上一篇 下一篇

猜你喜欢

热点阅读