Dart1

参考

https://dart.cn/guides/language/language-tour

下载

从 Flutter 1.21 版本开始,Flutter SDK 会同时包含完整的 Dart SDK 因此如果你已经安装了 Flutter,可能就无需再特别下载 Dart SDK 了。

可以通过命令行dart --version查看版本,目前dart是 2.10.3。

Dart语言特性

  • 所有变量引用的都是 对象,每个对象都是一个 类 的实例。数字、函数以及 nul都是对象。所有的类都继承于 Object 类。
  • 尽管 Dart 是强类型语言,但是在声明变量时指定类型是可选的,可以使用var来声明,因为 Dart 可以进行类型推断。
  • 如果想显式地声明一个不确定的类型,可以使用特殊类型 dynamic/Object。
  • Dart 支持泛型,比如 List<int>(表示一组由 int 对象组成的列表)或 List<dynamic>(表示一组由任何类型对象组成的列表)。
  • Dart 支持顶级函数(例如 main 方法),同时还支持定义属于类或对象的函数(即 静态 和 实例方法)。你还可以在函数中定义函数(嵌套 或 局部函数)。
  • Dart 支持顶级 变量,以及定义属于类 或 对象的变量(静态和实例变量)。实例变量有时称之为 字段 或 属性(fields or properties)。
  • Dart 没有类似于 Java 那样的 public、protected 和 private 成员访问限定符。如果一个标识符以下划线 (_) 开头则表示该标识符在库内是私有的。
  • 创建对象时,new关键字是可选的。
  • assert() 的调用将会在生产环境的代码中被忽略掉。在开发过程中,assert(condition) 将会在 条件判断 为 false 时抛出一个异常。详情请查阅 Assert。

dart编码规范

https://dart.cn/guides/language/effective-dart

关键字

https://dart.cn/guides/language/language-tour#keywords

注释

Dart 支持单行注释、多行注释和文档注释。

其中dart的文档注释除了可以使用java的文档注释,还可以使用的是///,

在文档注释中用[xxx]可以引用类、方法、字段、顶级变量、函数和参数。

library和package

https://dart.cn/guides/language/language-tour#libraries-and-visibility

一个dart文件就是一个library。

package就是一个项目,一个依赖库。

library关键字

library指令可以创建一个库,每个Dart文件都是一个库,即使没有使用library指令来指定。

在生成的文档中要包含任何 Library-Leve的文档,必须要指定 library 命令。

添加依赖

https://dart.cn/tools/pub/dependencies

要导入外部库(比如dart package中央仓储中的):

  • 就需要先在项目的pubspec.yam的dependencies中加入那个package,
  • 然后点击pub get去下载,
  • 在项目根目录会生成一个.packages,该文件将应用程序所依赖的每个包名 相应的映射到 系统缓存中的包。
  • 最后在dart文件最上边import。

import library

使用 import 来访问外部library/dart文件。

import 的唯一参数是用于指定代码库的 URI,一个具体的dart文件位置。

  • 对于 Dart 内置的库,使用 dart:xxxxxx 的形式。
  • 对于本地的dart文件,
    • 可以使用绝对路径或相对路径:
    • 也可以使用package:xxxxxx,
import 'package:flutter_app/test.dart';
  • 对于网络上的库,

可以使用package:xxxxxx,

使用 package: 前缀,导入包中的库,Dart 运行时会抓取 package: 之后的内容,并在应用程序的 .packages 文件中查找它。

而在.packages中,还包含本项目的代码路径,如:

flutter_app:lib/

所以package: xxx的形式也可以用来导入本地library。

指定库前缀

如果你导入的两个代码库有冲突的标识符,你可以为其中一个指定前缀。

比如如果 library1 和 library2 都有 Element 类,那么可以这么处理:

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 only foo).
import 'package:lib1/lib1.dart' show foo;

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

延迟加载库

延迟加载(也常称为 懒加载)允许应用在需要时再去加载代码库,下面是可能使用到延迟加载的场景:

  • 为了减少应用的初始化时间。
  • 处理 A/B 测试,比如测试各种算法的不同实现。
  • 加载很少会使用到的功能,比如可选的屏幕和对话框。

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

分割library

不建议使用。

使用part,part of可以把一个 Library 分割成多个 Dart 文件。

  • part指令 是在主文件中引用那个part文件,
  • part of指令 是在part文件中指明属于那个主文件的part。

也就是说part,part of需要相互对应才行。

  • part文件只能有part of指令,不能有其他的指令(如import)
  • 主文件的part指令需要在import下边。
  • part文件和主文件可以互相访问对方的成员,包括有下划线”_”前缀的成员。
  • part文件和主文件中的成员是不能冲突的。

test.dart

import 'dart:isolate';

part 'test2.dart';

int age = 18;
String _name = "123";

void main() {
  print(haha);
}

test2.dart

part of 'test.dart';

String haha = "haha";

void test() {
  print(_name);
}

实现library package

https://dart.cn/guides/libraries/create-library-packages

https://dart.cn/tools/pub/package-layout

最简单的一个library package目录结构:

wps2

  • pubspec file

Library 的 pubspec.yam文件 与 应用程序的 pubspec.yam文件相同— pubspec.yam文件中并没有特别的指出这个 Package 是一个 Library 。

查看Pubspec 文件详解

  • lib directory

如你所料, Library 的代码位于 lib 目录下,且对于其他 Package 是公开的。你可以根据需要在 lib 下任意创建组织文件结构。

按照惯例,实现代码会放在 lib/src 目录下。 lib/src 目录下的代码被认为是私有的。通过在lib下的的dart中用export指定 lib/src 目录的文件,实现对 lib/src 目录中 API 的公开

比如english_words的依赖目录结构如下,

wps3

english_words.dart是在src外的,其他的都在src中,在english_words.dart中用export来表示下边的dart是公开的:

library english_words;
export 'src/syllables.dart';
export 'src/word_pair.dart';
export 'src/words/adjectives.dart';
export 'src/words/all.dart';
export 'src/words/nouns.dart';

常用第三方 package 介绍

https://dart.cn/guides/libraries/useful-libraries

Dart内置库

https://dart.cn/guides/libraries

全平台库列表

下面提供的一些库可以应用于所有 Dart 可运行的平台

库名称

备忘

dart:async
支持通过使用 Future 和 Stream 这样的类实现异步编程。

 

dart:collection
提供 dart:core 库中不支持的额外的集合操作工具类。

 

dart:convert
用于提供转换不同数据的编码器和解码器,包括 JSON 和 UTF-8。

 

dart:core
每一个 Dart 程序都可能会使用到的内置类型、集合以及其它的一些核心功能。

默认导入的,不用手动导入。

dart:developer
类似调试器和分析器这样的与开发者交互配合的工具。

只支持 JIT 和 dartdevc

dart:math
包含算术相关函数和常量,还有随机数生成器。

 

dart:typed_data
高效处理固定大小数据(例如无符号的 8 位整型)和 SIMD 数字类型的列表。

 

原生平台库

下面列出的核心库适用于 Dart 原生平台(AOT 和 JIT 编译运行)。

库名称

备忘

dart:io
用于支持非 Web 应用的文件、Socket、HTTP 和其它 I/O 操作。

 

dart:isolate
使用 Isolate 实现并发编程:独立的 Worker,类似于线程。

 

dart:mirrors
支持检查和动态调用的基本反射功能。

实验性
只在 JIT 中有效 (Flutter 中无效)

访问性

在dart中是没有类似java的访问修饰符private,public等,

默认情况下类,顶层函数、变量,类中成员都时public的,

dart中,名字用_作为前缀的 方法、变量、类只能在本文件中访问,如果有part,那么那个part也能访问。

如果要使用文件外的dart文件定义的东西,需要import导入那个dart文件。

原文地址:https://www.cnblogs.com/muouren/p/14009874.html