泛型
void main(List<String> args) {
int num = getInfo(123);
}
int getInfo(int value) {
return value;
}
- getInfo函数的 返回值与参数 的类型都是固定 int类型,若传其他类型参数,就会报错,现使用
泛型
,进行改造如下:
void main(List<String> args) {
String value1 = getValue("ssss");
int value2 = getValue(123);
double value3 = getValue(123.4);
}
getValue(value) {
return value;
}
- 在Dart中返回值类型可省略;
- 参数
value
就相当于泛型了,调用时可传入任意类型的参数,不会报错;
集合类中泛型
void main(List<String> args) {
List<String> strs = new List();
strs.add("sss");
strs.add("aaa");
strs.add("bbb");
}
-
abstract class List<E> implements EfficientLengthIterable<E>
:List在定义时,存储的元素是泛型<E>,在实际使用时,指定参数的具体类型;
泛型方法
void main(List<String> args) {
}
//泛型方法
T getInfo<T>(T value) {
return value;
}
泛型类
void main(List<String> args) {
Person person = Person<double>();
person.walk(123.5);
}
class Person<T> {
String name;
void walk(T params) {
print("walk");
}
}
- 定义时使用泛型T,实际使用指定泛型类型为double,那么函数传参时,只能是double类型;
泛型实现 类型约束
void main(List<String> args) {
Person person = Person<String>();
person.walk("123");
}
class Person<T extends String> {
String name;
void walk(T params) {
print("walk");
}
}
- 定义时,泛型为
<T extends String>
,参数必须是继承自String的,可限制参数的类型;
扩展Extension
extension 扩展名 on 类名 {
//实例方法 将字符串 转 int
//类方法
}
- Extension是在Dart语言
2.6.0版本
才支持的;
void main(List<String> args) {
int num1 = "12345".parseInt();
print(num1);
int num2 = SFString.c_parseInt("55555");
print(num2);
}
extension SFString on String {
//实例方法 将字符串 转 int
int parseInt() {
return int.parse(this);
}
//类方法
static int c_parseInt(String str) {
return int.parse(str);
}
}
库的使用
- 在Dart中,你可以导入一个库来使用它所提供的功能;
- 库的使用可以使代码的重用性得到提高,并且可以更好的组合代码;
- Dart中任何一个Dart文件都是一个库,即使你没有使用关键字
library
声明;
- 库的导入:
- 系统库的导入;
- 自定义库的导入;
- 第三方库的导入;
系统库的导入:
import 'dart:async';
import 'dart:math';
main(List<String> args) {
final num1 = 10;
final num2 = 30;
//min函数 属于 dart:math系统库
print(min(num1, num2));
}
自定义库的导入:
image.png
import 'Utils/math_utils.dart' as SFUtils;
main(List<String> args) {
//通过库的别名来调用函数方法
print(SFUtils.sum1(10, 20));
}
int sum1(int num1, num2) {
print("...");
return num1 + num2;
}
import 'Utils/math_utils.dart' show sum1;
main(List<String> args) {
//通过库的别名来调用函数方法
print(SFUtils.sum1(10, 20));
}
- 可使用
as
关键字给自定义库取个别名
,主要是解决冲突的问题;
- 在默认情况下,导入一个库时,是导入这个库中的所有内容;
-
show
:可指定要导入的内容;
-
hide
:隐藏某个要导入的内容,导入其他内容;
- 若库文件太多,这样导入的代码写的太多,可以单独创建一个文件A.dart,使用
export
关键字将库文件导入A.dart中,这样只要导入A.dart文件即可,如下所示:
image.png
import 'Utils/utils.dart';
main(List<String> args) {
print(dateFormat());
print(sum1(10, 20));
}
第三库的导入
image.png
import 'package:http/http.dart' as http;
main(List<String> args) async {
var url = Uri.https('www.googleapis.com', '/books/v1/volumes', {'q': '{http}'});
var response = await http.get(url);
if (response.statusCode == 200) {
var jsonResponse = convert.jsonDecode(response.body) as Map<String, dynamic>;
var itemCount = jsonResponse['totalItems'];
print('Number of books about http: $itemCount.');
} else {
print('Request failed with status: ${response.statusCode}.');
}
}
网友评论