前言
dart语言的库及其相关语法是了解dart应用代码组织的基础。网上查找的相关资料往往只是涉及某几个点,很难有系统性的认识,这里笔者将结合一些文档和个人实践经验来对dart的库及其相关语法进行一个梳理。
库的引入
dart中,任意一个文件都会被认为是一个库,尽管其中可能并没有library
标签,dart库目前的引入方式大致有三种:
- 引入dart语言的内置库:
import 'dart:math';
引入内置库时,在使用的uri中以dart:
开头
- 引入pub包管理器提供库:
import 'package:flutter/material.dart';
在引用包管理器提供的库时,uri中以package
开头
- 引入本地文件:
import './tools/network.dart';
引用本地文件时,uri字符串中直接填写文件的相对路径。
指定库的别名
两个库中如果存在相同的标识符,在使用时很有可能会产生冲突;或者在引入一个库的内容的时候,由于当前文件引入的库比较多,导致使用IDE工具提供的标识符名称联想时,很有可能出现一些本不是我们想要选取,但是首字母相近的内容,影响编码效率,为此我们可以使用给库指定别名的方法,来规避以上问题。
import 'package:socket_io_client/socket_io_client.dart' as IO;
class MySocketIO {
IO.Socket mySocket;
MySocketIO(this.mySocket);
}
只引入库的部分内容
如果只想引入库的部分内容,可以使用如下语法:
// Import only foo.
import 'package:lib1/lib1.dart' show foo;
如果想屏蔽库中的某些内容,不引入这部分:
// Import all names EXCEPT foo.
import 'package:lib2/lib2.dart' hide foo;
关于part、library和part of
在具体业务中有以下痛点:我们在应用中定义了多个类或者其他方法,在引用时我们想只import一个文件就将相关内容全部导出,如果将所有的类或者方法都放在一个文件中,会导致这个文件十分庞杂,不利于后续维护。为了解决这个问题,