• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

【Flutter从0到1开发APP】番茄计时APP:Dart 语言速览进阶篇

武飞扬头像
正经程序员
帮助67

前言

上一篇介绍了Dart语言基础语法及一些简单概念,这一篇继续学习一些关于Dart语言的进阶概念,以便后续写代码时遇到问题,知道查什么。

注意:这里假设你已经有使用其它语言进行编程的经验,如果什么经验都没有,那读起来可能像是在读天书。

常用核心库

Dart 拥有非常丰富的核心库用以为诸如处理对象集合(dart:collection)、进行数学运算(dart:math)以及编/解码数据(dart:convert)等常用编程操作提供支持。

下面几个库建议着重看下:

  1. dart:async:支持通过使用 Future 和 Stream 这样的类实现异步编程。
  2. dart:convert:用于提供转换不同数据的编码器和解码器,包括 JSON 和 UTF-8。
  3. dart:core:每一个 Dart 程序都可能会使用到的内置类型、集合以及其它的一些核心功能。
  4. dart:math:包含算术相关函数和常量,还有随机数生成器。

packages

packages就是用来共享的软件包,类似于Java中引入jar包。

pubspec.yaml

要使用packages,只需要在pubspec.yaml引入对应的依赖即可,示例如下:

name: time_hunters
description: A new Flutter project.
version: 1.0.0 1

environment:
  sdk: ">=2.17.1 <3.0.0"

dependencies:
  flutter:
    sdk: flutter
  cupertino_icons: ^1.0.2

get packages

// 获取依赖命令
dart pub get

使用packages

import 'package:js/js.dart' as js;
import 'package:intl/intl.dart';

Mixins

Mixin 是一种在多个类层次结构中重用代码的方法。示例如下:

mixin Piloted {
  int astronauts = 1;

  void describeCrew() {
    print('Number of astronauts: $astronauts');
  }
}

// 现在只需使用 Mixin 的方式继承这个类就可将该类中的功能添加给其它类。

class PilotedCraft extends Spacecraft with Piloted {
  // ···
}

空安全

Dart 语言已支持健全的空安全机制!

当你选择使用空安全时,代码中的类型将默认是非空的,意味着 除非你声明它们可空,它们的值都不能为空。有了空安全,原本处于你的 运行时 的空值引用错误将变为 编辑时 的分析错误。

有了空安全,下面代码中所有的变量都是非空的:

// In null-safe Dart, none of these can ever be null.
var i = 42; // Inferred to be an int.
String name = getFileName();
final b = Foo();

若你想让变量可以为 null,只需要在类型声明后加上 ?。

int? aNullableInt = null;

空安全核心原则:默认不可空、渐进迁移、完全可靠。

异步&并发

Dart 通过 async-await、isolate 以及一些异步类型概念(例如 Future 和 Stream)支持了并发代码编程。

在应用中,所有的 Dart 代码都在 isolate 中运行。每一个 Dart 的 isolate 都有独立的运行线程,它们无法与其他 isolate 共享可变对象。在需要进行通信的场景里,isolate 会使用消息机制。

大部分 Dart 应用只会使用一个 isolate(即主isolate),同时你也可以创建更多的 isolate,从而在多个处理器内核上达成并行执行代码的目的。

async和await

使用 async 和 await 关键字可以让你避免回调地狱(Callback Hell)并使你的代码更具可读性。

const oneSecond = Duration(seconds: 1);
// ···
Future<void> printWithDelay(String message) async {
  await Future.delayed(oneSecond);
  print(message);
}

// 上面的方法相当于:
Future<void> printWithDelay(String message) {
  return Future.delayed(oneSecond).then((_) {
    print(message);
  });
}

关于Isolate 的工作原理,建议认真看下官方文档,比各种解析写的好多了:dart.cn/guides/lang…

使用Json

许多移动或网页应用都使用 JSON 来处理类似与服务器交换数据的任务。

推荐使用以下几个库:

  1. dart:convert:包含 JSON 数据和 UTF-8(JSON 数据需要的字符编码)的转换器。
  2. package:json_serializable:一个易于使用的代码生成包。当你添加一些元注解以及使用该包提供的构建器时, Dart 编译器可以为你生成序列化和反序列化的代码。
  3. package:built_value:一个强大的,可以作为 json_serializable 替代的 package。

测试&调优

推荐以下几个库:

  1. package:test:提供在 Dart 中编写测试的标准方法。
  2. package:mockito:提供一种创建模拟对象的方法,可轻松配置为在固定场景中使用,并验证被测系统是否以预期方式与模拟对象交互。
  3. Testing Flutter Apps:如何在 Flutter 应用程序上执行单元、小部件或集成测试。
  4. flutter_test:建立在 package:test 之上的 Flutter 测试库。
  5. flutter_driver:一个测试库,用于在真实设备和模拟器上测试 Flutter 应用程序(在一个单独的进程中)。
  6. flutter_gallery:Flutter 库示例的源代码和测试。
  7. flutter/dev/manual_tests:Flutter SDK 中的许多测试示例。

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanfbeei
系列文章
更多 icon
同类精品
更多 icon
继续加载