那些你不知道的Dart细节之泛型和库(六)

简介: Dart中的泛型和库

前言

前几篇文章分别讲解了Dart中的变量、内置类型、函数(方法)、异常、类,对Dart的基本语法已经有了很多的了解,那么今天来说一下Dart中的泛型和库。前几篇文章没有看的,建议先看一下前几篇文章。

那些你不知道的Dart细节之变量

那些你不知道的Dart细节之内置类型

那些你不知道的Dart细节之函数(方法)

那些你不知道的Dart细节之操作符、流程控制语句、异常

那些你不知道的Dart细节之类的点点滴滴

那些你不知道的Dart细节之泛型和库

泛型

Java中的泛型信息是编译时的,泛型信息在运行时是不存在的

Dart的泛型类型是固化的,在运行时也有可以判断的具体类型

var names = List<String>();
print(names is List<String>);//true
print(names.runtimeType); // List<String> 

在Java中,可以测试对象是否为List,但无法测试它是否是List。但是在Dart中是预编译的。

其他的泛型使用方法和Java中的类似,这里就不赘述了。

库-使用核心库

使用import关键字来载入库:

import "dart:math";
void main() {
  print(sqrt(4));//开平方 2.0
}

对于内置的库,URI 使用特殊的 dart: scheme。对于其他的库,你可以使用文件系统路径或者 package: scheme。

库-载入第三方库

在Flutter中想使用第三方库的话需要在pubspec.yaml中的dependencies中添加依赖:

dependencies:
  flutter:
    sdk: flutter
  cupertino_icons: ^0.1.0
  dio: ^2.1.0

添加完成之后点击右上角的packages get进行导入依赖。下面是三方哭调用方法:

import "package:dio/dio.dart";
void main() {
  getHttp();
}
void getHttp() async {
  try {
    Response response = await Dio().get("https://www.baidu.com");
    print(response);
  } catch (e) {
    print(e);
  }
}

这里给大家一个网站,需要寻找第三方库的时候直接在里面搜索即可:https://pub.dev/

库-指定库前缀

在Java编码过程经常会出现一个类中调用两个类中相同名字的方法,这时就需要全限定名称来调用了,但是在Dart中是不需要的:


import 'MyLib1.dart' as lib1; 
import 'MyLib2.dart' as lib2; 
void main() {
  var myLib = lib1.MyLib();
  var myLib2 = lib2.MyLib();
}

上面代码中MyLib1.dart 和 MyLib2.dart 都有一个名字为 MyLib 的类。

库-选择性载入

show-只载入库的某些部分

hide-筛选掉库的某些部分

import 'Mylib1.dart' as lib1 show Test;
import 'Mylib2.dart' as lib2 hide Test;
var test = lib1.Test();
var lib = lib2.MyLib();

如果只使用库的一部分功能,则可以选择需要导入的 内容。

库-延迟载入

使用deferred as导入

使用标识符调用loadLibrary()加载库

import 'MyLib1.dart' deferred as lazyLib;
void main() {
  lazyLoad();
}
lazyLoad() async {
  await lazyLib.loadLibrary();
  var t = lazyLib.Test();
  t.test();
}

使用 await 关键字暂停代码执行一直到库加载完成。可提高程序启动速度。用在不常使用的功能和载入时间过长的包。

库-自定义库

首先将一个文件作为library:

library mylib;
part 'util.dart';
part 'tool.dart';
void printMyLib() => print('mylib');

然后使用part 把一个库分开到多个 Dart 文件中。

part of mylib;
void printTool() => print('tool');
part of mylib;
void printUtil() => print('util');

import不会完全共享作用域,而part之间是完全共享的。如果说在A库中import了B库,B库import了C库,A库是没有办法直接使用C库的对象的。而B,C若是A的part,那么三者共享所有对象。并且包含所有导入。

import 'mylib/mylib.dart';
void main() {
  printMyLib();
  printUtil();
  printTool();
}

总结

到这里为止Dart的第六篇文章完成。本篇文章主要讲解了一下Dart语言的泛型和库。下一篇文章讲解一下Dart中的异步操作,希望大家能够喜欢

目录
相关文章
|
PHP 开发工具
PHP对接苹果支付全流程
PHP对接苹果支付全流程
1773 0
PHP对接苹果支付全流程
|
12月前
|
网络架构
一文来带你了解 Flutter MaterialApp
一文来带你了解 Flutter MaterialApp
339 1
一文来带你了解 Flutter MaterialApp
|
小程序
Flutter CustomScrollView 效果-顶栏透明与标签栏吸顶
Flutter CustomScrollView 效果-顶栏透明与标签栏吸顶
|
JSON Dart API
Flutter dio http 封装指南说明
本文介绍了如何实现一个通用、可重构的 Dio 基础类,包括单例访问、日志记录、常见操作封装以及请求、输出、报错拦截等功能。
448 2
Flutter dio http 封装指南说明
|
JSON Dart 测试技术
Flutter中高级JSON处理:使用json_serializable进行深入定制
Flutter中高级JSON处理:使用json_serializable进行深入定制
2442 3
|
Dart 前端开发 开发者
【Flutter前端技术开发专栏】Flutter中的性能分析工具Profiler
【4月更文挑战第30天】Flutter Profiler是用于性能优化的关键工具,提供CPU、GPU、内存和网络分析。它帮助开发者识别性能瓶颈,如CPU过度使用、渲染延迟、内存泄漏和网络效率低。通过实时监控和分析,开发者能优化代码、减少内存占用、改善渲染速度和网络请求,从而提升应用性能和用户体验。定期使用并结合实际场景与其它工具进行综合分析,是实现最佳实践的关键。
840 0
【Flutter前端技术开发专栏】Flutter中的性能分析工具Profiler
|
存储 程序员 数据库
数据库系统结构、数据库系统的组成
数据库系统结构、数据库系统的组成
602 0
|
iOS开发 容器
重识Flutter 在不同的滑动列表场景,请选择合适的Slivers - part2
在Flutter中,碰到复杂的、不同的滑动业务场景,若是选择了一个合适的Slivers组件,那么我认为问题会变得简单!
重识Flutter 在不同的滑动列表场景,请选择合适的Slivers - part2
|
存储 SQL OLAP
57.【clickhouse】ClickHouse从入门到放弃-update和delete的使用
【clickhouse】ClickHouse从入门到放弃-update和delete的使用
57.【clickhouse】ClickHouse从入门到放弃-update和delete的使用
|
Web App开发 编解码 JavaScript
优酷播放体验优化实战(六)--Electron跨平台进阶:Native播放器融合
随着桌面应用开发技术的发展,程序的跨平台性和代码的维护成本显得尤为重要,目前优酷Windows平台采用QT作为UI的主要开发方案,DuiLib辅助一些扩展插件开发,Mac平台采用原生的Native UI开发,由于历史原因并没有将Windows端的QT框架迁移到Mac端,两端分别维护耗费不同人力。
2580 0
优酷播放体验优化实战(六)--Electron跨平台进阶:Native播放器融合