Flutter - Dart 基础(关于库的使用)

120 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第21天,点击查看活动详情

在 Dart 中,通过使用各种库来提高代码的重用性,便捷性,Dart 中的每一个 dart 文件都是一个库,即使没有使用关键字 library 修饰


库的使用

在 Dart 中,使用 import 来导入需要的库

import '库所在的uri';

常见的库有三种不同的形式

  • 导入 Dart 内置的库

    Dart 标准库都是以 dart 为前缀, 比如 dart:iodart:htmldart:math...

    import 'dart:html';
    
  • 导入相对路径的库

    通常指自己项目中自定义的 dart 文件

    import 'lib/test/test.dart';
    
  • 导入 pubspec.yaml 包管理工具管理的一些库

    在 Dart 中,通过pub.dev 获取三方库的资源,导入三方库通常以 package 为前缀

    import 'package:flutter/material.dart';
        ```
    

导入库引起的冲突

如果导入的两个库彼此有冲突,可以使用 as 关键字

比如导入的俩个库中都含有 Student 类

import 'package:lib1/Student1.dart';
import 'package:lib2/Student2.dart' as stu2


// 使用 Student1 中的 Student 类
Student stu1 = Student();

// 使用 Student2 中的 Student 类
stu2.Student stu2 = lib2.Student();

导入库文件的显示和隐藏

如果只想使用库中的一部分内容,可以使用关键字 show 和关键字 hide 对内容进行显示和隐藏处理

// 可以显示 Student,屏蔽其他内容
import 'package:lib1/Student1.dart' show Student

// 可以隐藏 Student,显示其他内容
import 'package:lib2/Student2.dart' hide Student

库的懒加载

在 Dart 中,可以根据业务需要对库进行延时加载,也称库的懒加载

使用关键字 deferred as 修饰延时加载库

import 'package:greetings/hello.dart' deferred as hello;

当实际使用库中的 API 时,先调用 loadLibrary 函数加载库

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

使用 await 关键字暂停代码执行直到库加载完。loadLibrary 函数可以调用多次,代码库只会被加载一次

注意:

  • 延迟加载的代码库中的常量需要在代码库被加载的时候才会导入,未加载时是不会导入的

  • 导入文件的时候无法使用延迟加载库中的类型。如果你需要使用类型,则考虑吧接口类型转移到另一个库中然后让两个库都分别导入这个接口库

  • Dart 会隐式地将 loadLibrary 方法导入到使用了 deferred as 命名空间 的类中。loadLibrary 函数返回的是一个 Future