Dart 泛型
泛型方法 泛型类 泛型接口
泛型的理解:泛型就是解决 类 接口 方法的复用性、以及对不特定数据类型的支持(类型校验)
场景,如果我们不指定类型传入参数,返回值的类型就得是这个类型:
// 1. 对传入参数和返回值 进行校验
T getData<T>(T value){
return value;
}
// 2. 对传入参数进行校验 和 返回值不校验
getData<T>(T value){
return value;
}
void main(){
getData<String>('hello'); // hello
getData<int>(123); // 123
}
场景,列表数组类型
List list = new List<int>();
list.add(123); // ok
list.add('hello'); // error
场景,自定义一个泛型类
class PrintClass<T>{
List list = new List<T>();
void add(T value){
this.list.add(value);
}
void printInfo(){
for(var i=0;i<this.list.length;i++){
print(this.list[i]);
}
}
}
void main(){
// normal
PrintClass p = new PrintClass();
p.add(123);
p.add('xxx'); // ok
print(p.list);
// T int class
PrintClass p1 = new PrintClass<int>();
p1.add(123);
p1.add('xxx'); // error
print(p1.list);
}
Dart泛型接口
实现数据缓存功能,有文件缓存,和内存缓存;文件缓存和内存缓存按照接口的约束来实现
- 定义一个泛型接口 约束实现它的子类必须有 getByKey(key) 和 setByKey(key, value)
- 要求setByKey的时候value的类型和实例化子类的时候啊指定类型一致
abstract class Cache<T>{
getByKey(String key);
void setByKey(String key, T value);
}
// 文件缓存
class FileCache<T> implements Cache<T> {
@override
getByKey(String key){
return null;
}
@override
void setByKey(String key, T value){
print("文件缓存: key=${key} value=${value} 写入文件中");
}
}
// 内存缓存
class MemoryCache<T> implements Cache<T> {
@override
getByKey(String key){
return null;
}
@override
void setByKey(String key, T value){
print("内存缓存: key=${key} value=${value} 写入内存中");
}
}
void main(){
MemoryCache m = new MemoryCache<String>();
m.setByKey('index', '首页数据'); // ok String
FileCache f = new FileCache<Map>();
// f.setByKey('index', 123); // error int not Map
// f.setByKey('index', 'hello'); // error string not Map
f.setByKey('index', {"name":"cat","age":25}); // ok Map
}
Dart 库
自定义库 系统库 第三方库
1. 我们自定义的库
import "lib/xxx.dart"
2.系统内置的库
import 'dart:math';
import 'dart:io';
import 'dart:convert';
3. Pub包管理系统中的库
https://pub.dev/packages
https://pub.flutter-io.cn/packages
https://pub.dartlang.org/flutter
(1) 需要在自己项目根目录新建一个 pubspec.yaml
(2) 在pubspec.yaml文件 然后配置名称、描述、依赖等信息
(3) 然后运行 pub get 获取包下载到本地
(4) 项目中引入库 import 'package:http/http.dart' as http; 可以参看文档