zoukankan      html  css  js  c++  java
  • 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文件。

  • 相关阅读:
    ubuntu12.04 安装eclipse
    loj 1429(可相交的最小路径覆盖)
    loj 1406(状态压缩)
    mysql数据库表插入单条数据/批量插入数据
    window7安装MongoDB详细步骤
    django中的setting全局变量的导入
    django.core.exceptions.ImproperlyConfigured: Requested setting DEFAULT_INDEX_TABLESPACE的解决办法(转)
    DjangoDRF序列化组件使用
    python并发编程知识点总结
    协程+IO切换实现并发
  • 原文地址:https://www.cnblogs.com/muouren/p/14009874.html
Copyright © 2011-2022 走看看