![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Dart
想散在风中
努力学习,努力敲代码
展开
-
Dart required
required关键词:最开始 @required 是注解现在它已经作为内置修饰符。主要用于允许根据需要标记任何命名参数(函数或类),使得它们不为空。因为可选参数中必须有个 required 参数或者该参数有个默认值。String printUserInfo(String username, {int age = 10, String sex = '男'}) { // 形参 return "姓名: $username --- 性别: $sex --- 年龄: $age";}Str原创 2022-05-06 10:21:17 · 1246 阅读 · 0 评论 -
Dart late 关键词
late 关键字主要用于延迟初始化类里没有调用构造函数 值会报错class Person { late String name; late int age; void setName(String name, int age) { this.name = name; this.age = age; } String getName() { return "${this.name}------${this.age}"; }}...原创 2022-05-06 10:16:34 · 446 阅读 · 0 评论 -
Dart Null safety 以及可空类型 非空断言
Null safety翻译成中文的意思是空安全。null safety 可以帮助开发者避免一些日常开发中很难被发现的错误,并且额外的好处是可以改善性能。Flutter2.2.0(2021年5月19日发布) 之后的版本都要求使用null safety。? 可空类型! 类型断言定义一个可空方法String? getData(apiUrl) { if (apiUrl != null) { return "this is server data"; } ...原创 2022-05-06 10:14:55 · 936 阅读 · 0 评论 -
Dart 延迟加载
延迟加载也称为懒加载,可以在需要的时候再进行加载。懒加载的最大好处是可以减少APP的启动时间。懒加载使用deferred as关键字来指定,如下例子所示:import 'package:deferred/hello.dart' deferred as hello;当需要使用的时候,需要使用loadLibrary()方法来加载:greet() async { await hello.loadLibrary(); hello.printGreeting();原创 2022-05-06 10:04:29 · 648 阅读 · 0 评论 -
Dart 库部分导入
部分导入如果只需要导入库的一部分,有两种模式:模式一:只导入需要的部分,使用show关键字,如下例子所示:import 'package:lib1/lib1.dart' show foo;模式二:隐藏不需要的部分,使用hide关键字,如下例子所示:import 'package:lib2/lib2.dart' hide foo;新建lib文件夹 —— 新建MyMath.dart文件void getName() { print('张三');}void getAg原创 2022-05-06 10:02:09 · 276 阅读 · 0 评论 -
Dart 库的重命名 冲突解决
冲突解决当引入两个库中有相同名称标识符的时候,如果是java通常我们通过写上完整的包名路径来指定使用的具体标识符,甚至不用import都可以,但是Dart里面是必须import的。当冲突的时候,可以使用as关键字来指定库的前缀。如下例子所示:import 'package:lib1/lib1.dart';import 'package:lib2/lib2.dart' as lib2;Element element1 = new Element(); // Uses Element from原创 2022-05-06 09:58:55 · 715 阅读 · 1 评论 -
Dart Async Await
async 和 await只有async方法才能使用await关键字调用方法 如果调用别的async方法必须使用await关键字async让方法变成异步 await等待异步方法执行完成异步方法textAsync() async{ return 'Hello Async';}void main() async { var result = await textAsync(); print(result); // Hello Async}原创 2022-05-06 09:54:01 · 205 阅读 · 0 评论 -
Dart 库
在Dart中,库的使用时通过import关键字引入library指令可以创建一个库,每个Dart文件都是一个库,即使没有使用library指令来指定。Dart中的库主要有三种:自定义的库 import 'lib/xxx.dart'; 系统内置库 import 'dart:math'; import 'dart:io'; import 'dart:convert'; Pub包管理系统中的库 下面网址找到要用的库 https://pub.dev/packages...原创 2022-05-06 09:49:49 · 505 阅读 · 0 评论 -
Dart 泛型 泛型接口
Dart中的泛型接口:实现数据缓存的功能: 有文件缓存和内存缓存。文件缓存和内存缓存按照接口约束实现。定义一个泛型接口 约束实现它的子类必须有getByKey(key)和setByKey(key, value) 要求setByKey的时候的value的类型和实例化子类的时候指定类型一致 abstract class ObjectCache { getByKey(String key); void setByKey(String key, Object value); }...原创 2021-12-12 13:24:03 · 304 阅读 · 0 评论 -
Dart 泛型 泛型类
集合List 泛型类的用法案例:把下面类转换成泛型类,要求MyList里面可以增加int类型的数据,也可以增加String类型的数据。但是每次调用增加的类型要统一只能传入指定类型的数据 并且可以检测类型 class MyList { List list = <int>[]; void add(int value) { this.list.add(value); } List getList() { return list;...原创 2021-12-12 13:20:06 · 863 阅读 · 0 评论 -
Dart 泛型 泛型方法
泛型: 解决 类 接口 方法的复用性、以及对不特定数据类型的支持(类型校验)只能返回string类型的数据 String getData(String value) { return value; }同时支持返回string类型和int类型 String getData1(String value) { return value; } int getData2(int value) { return value; }同时支持返回string...原创 2021-12-12 13:17:09 · 373 阅读 · 0 评论 -
Dart mixins 继承 类型
mixins的中文意思是混入,就是在类中混入其他功能。在Dart中可以使用mixins实现类似多继承的功能因为mixins使用的条件,随着Dart版本一直在变,这里讲的是Dart2.x中使用mixins的条件:作为mixins的类只能继承自Object,不能继承其他类 作为mixins的类不能有构造函数 一个类可以mixins多个mixins类 mixins绝不是继承,也不是接口,而是一种全新的特性mixinsclass A { String info = 'this is .原创 2021-12-12 12:59:46 · 285 阅读 · 0 评论 -
Dart implements实现多个接口
Dart中一个类实现多个接口abstract class A { late String name; printA();}abstract class B { printB();}class C implements A,B { @override late String name;@override printA() { // TODO: implement printA print('printA'); } @...原创 2021-12-12 12:52:47 · 1330 阅读 · 0 评论 -
Dart 接口 文件分离
和Java一样,dart也有接口,但是和Java还是有区别的首先,dart的接口没有interface关键字定义接口,而是普通类或抽象类都可以作为接口被实现同样使用implements关键字进行实现但是dart的接口有点奇怪,如果实现的类是普通类,会将普通类和抽象中的属性的方法全部需要覆写一遍而因为抽象类可以定义抽象方法,普通类不可以,所以一般如果要实现像Java接口那样的方式,一般会使用抽象类建议使用抽象类定义接口定义一个DB库 支持 mysql mssql mongodb..原创 2021-12-12 11:21:24 · 143 阅读 · 0 评论 -
Dart 多态
Dart中的多态:允许将子类类型的指针赋值给父类类型的指针,同一个函数调用会有不同的执行效果。 子类的实例赋值给父类的引用 多态就是父类定义一个方法不去实现,让继承他的子类去实现,每个子类有不同的表现。abstract class Animal { eat(); // 抽象方法}class Dog extends Animal { @override eat() { // TODO: implement eat print('小狗在吃骨头');...原创 2021-12-12 11:15:59 · 571 阅读 · 0 评论 -
Dart 抽象类
Dart中抽象类: Dart抽象类主要用于定义标准,子类可以继承抽象类,也可以实现抽象类接口。抽象类通过 abstract 关键字来定义 Dart中的抽象方法不能用abstract声明,Dart中没有方法体的方法我们称为抽象方法。 如果子类继承抽象类必须得实现里面的抽象方法 如果把抽象类当做接口实现的话必须得实现抽象类里面定义的所有属性和方法。 抽象类不能被实例化,只有继承它的子类可以extends抽象类 和 implements 的区别:如果要复用抽象类里面的方法,并且要用抽象方法约束自原创 2021-12-12 11:13:26 · 1358 阅读 · 0 评论 -
Dart 类的继承 子类覆写父类的方法
面向对象的三大特性: 封装、继承、多态Dart中的类的继承子类使用extends关键字来继承父类 子类会继承父类里面可见的属性和方法 但是不会继承构造函数 子类能复写父类的方法 getter和setterclass Person { String name; int age; Person(this.name, this.age); void printInfo() { print('${this.name} ------ ${this.age}');...原创 2021-12-12 11:10:21 · 2071 阅读 · 0 评论 -
Dart 类的继承 实例化子类给命名构造函数传参
面向对象的三大特性: 封装、继承、多态Dart中的类的继承子类使用extends关键字来继承父类 子类会继承父类里面可见的属性和方法 但是不会继承构造函数 子类能复写父类的方法 getter和setter注意: 最新版本的dart中需要初始化不可为null的实例字段,如果不初始化的话需要在属性前面加上lateclass Person { String name; int age; Person.xxxx(this.name, this.age); void ...原创 2021-12-12 11:06:46 · 1218 阅读 · 0 评论 -
Dart 类的继承 super关键词的使用 实例化子类给父类构造函数传参
面向对象的三大特性: 封装、继承、多态Dart中的类的继承子类使用extends关键字来继承父类 子类会继承父类里面可见的属性和方法 但是不会继承构造函数 子类能复写父类的方法 getter和setterclass Person { String name; int age; Person(this.name, this.age); void printInfo() { print('${this.name} ------ ${this.age}');...原创 2021-12-11 17:17:05 · 1718 阅读 · 0 评论 -
Dart 类的继承-简单继承
面向对象的三大特性: 封装、继承、多态Dart中的类的继承 子类使用extends关键字来继承父类 子类会继承父类里面可见的属性和方法 但是不会继承构造函数 子类能复写父类的方法 getter和setterclass Person { String name = '张三'; int age = 26; void printInfo() { print("${this.name} ------ ${this.age}"); }}class...原创 2021-12-11 17:13:42 · 655 阅读 · 0 评论 -
Dart 对象操作符
Dart中的操作符对象? 条件运算符 as 类型转换 is 类型判断 .. 级联操作class Person { String name; int age; Person(this.name, this.age); void printInfo() { print("${this.name}------${this.age}"); }}main() { /** ? */ Person p1; p1?.printIn...原创 2021-12-11 17:11:27 · 164 阅读 · 0 评论 -
Dart 类中的静态成员 静态方法
Dart中的静态成员:使用static 关键字来实现类级别的变量和函数 静态方法不能访问非静态成员,非静态方法可以访问静态成员 class Person { static String name = "张三"; static void show() { print(name); } } main() { print(Person.name); // 访问静态属性 Person.show(); // 访问静态方法 }class P...原创 2021-12-11 17:04:55 · 780 阅读 · 0 评论 -
Dart 类的初始化列表
Dart 中我们也可以在构造函数体运行之前初始化实例变量class Rect { num height; num width; // 实例初始化之前 赋初始值 Rect(): height = 2, width = 3 { print("${this.height}------${this.width}"); } getArea() { return this.height * this.width; }}void main() {...原创 2021-12-11 16:12:09 · 1271 阅读 · 0 评论 -
Dart getter和setter修饰符
class Rect { num height; num width; Rect(this.height, this.width); area() { return this.height * this.width; } } void main() { Rect r = new Rect(10, 4); print("面积: ${r.area()}"); // 面积: 40 }getter class Rect {...原创 2021-12-11 16:10:06 · 153 阅读 · 0 评论 -
Dart 私有方法和私有属性
Dart 和其他面向对象语言不一样, Dart中没有 public private protected这些访问修饰符合但是我们可以使用 _ 把一个属性或者方法定义成私有 私有属性必须有一个单独的文件import 'lib/Animal.dart';void main() { Animal a = new Animal('小狗', 3); // print(a._name); // 无法访问私有属性 print(a.age); // 3 print(a.getName()...原创 2021-12-11 15:44:02 · 1408 阅读 · 0 评论 -
Dart 把类单独抽离成一个模块
在当前目录 新建lib文件夹 文件夹里新建Person.dart文件// 引入类模块import 'lib/Person.dart';void main() { Person p1 = new Person('张三', 25); p1.printInfo();}Person.dart文件内容class Person { String name = "张三"; int age = 20; // 构造函数 Person(this.name, thi...原创 2021-12-11 15:11:08 · 398 阅读 · 0 评论 -
Dart 自定义类的命名构造函数
构造函数可以写多个class Person { late String name; late int age; // 默认构造函数简写 只能定义一个 Person(this.name, this.age); // 命名构造函数 可以定义多个 Person.now() { print('我是命名构造函数'); } Person.setInfo(String name, int age) { this.name = name; ...原创 2021-12-11 15:07:15 · 856 阅读 · 0 评论 -
Dart 自定义类的默认构造函数
指定参数 class Person { String name = "张三"; int age = 20; // 构造函数 Person() { print("这是构造函数里的内容 这个方法在实例化的时候触发"); } void printInfo() { print("${this.name}------${this.age}"); } } void main() { Person p1 = new Pe...原创 2021-12-11 15:03:20 · 577 阅读 · 0 评论 -
去除Flutter项目dart文件在vscode里出现波浪号
问题示例:去掉Flutter项目在vscode里打开显示的蓝色波浪线解决办法:原创 2021-12-02 14:40:32 · 2380 阅读 · 4 评论 -
Dart 创建自定义类使用类
Dart是一门使用类和单继承的面向对象语言,所有的对象都是类的实例,并且所有的类都是Object的子类// 定义一个类class Person { String name = "张三"; int age = 23; void getInfo() { // 写法一 print("$name ------ $age"); // 写法二 print("${this.name} --- ${this.age}"); } void set...原创 2021-11-30 12:33:33 · 691 阅读 · 0 评论 -
Dart 面向对象的介绍 以及Dart内置对象
面向对象编程(OOP)的三个基本特征是:封装、继承、多态 封装:封装是对象和类概念的主要特性。封装,把客观事物封装成抽象的类,并且把自己的部分属性和方法提供给其他对象调用, 而一部分属性和方法则隐藏。 继承:面向对象编程 (OOP) 语言的一个主要功能就是“继承”。继承是指这样一种能力:它可以使用现有类的功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。 多态:允许将子类类型的指针赋值给父类类型的指针, 同一个函数调用会有不同的执行效Dart所有的东西都是对象,所有的对象都继承自...原创 2021-11-30 12:28:41 · 401 阅读 · 0 评论 -
Dart 闭包
闭包:全局变量特点: 全局变量常驻内存 局部变量的特点: 不常驻内存会被垃圾机制回收、不会污染全局想实现的功能:常驻内存 不污染全局闭包: 函数嵌套函数,内部函数会调用外部函数的变量或参数,变量或参数不会被系统回收(不会释放内存)闭包的写法: 函数嵌套函数,并return里面的函数,这样就形成了闭包// 全局变量var a = 123;void main() { print(a); // 123 fn() { a++; print(a...原创 2021-11-30 12:21:54 · 346 阅读 · 0 评论 -
Dart 匿名方法 自执行方法 方法的递归
匿名方法void main() { var printNum = () { print(123); }; printNum(); // 123}匿名方法-传参void main() { var printNum = (int n) { print(n + 123); }; printNum(1); // 124}自执行方法void main() { (() { print('我是自执...原创 2021-11-30 12:17:33 · 162 阅读 · 0 评论 -
Dart 箭头函数 函数的相互调用
需求: 使用forEach打印下面List里面的数据普通函数void main() { List list = ['苹果', '香蕉', '西瓜']; list.forEach((item) { print(item); // 苹果 香蕉 西瓜 });}箭头函数void main() { list.forEach((value) => print(value)); // 苹果 香蕉 西瓜 list.forEach((value...原创 2021-11-30 12:10:51 · 132 阅读 · 0 评论 -
Dart 方法传参 默认参数 可选参数 命名参数 方法作为参数
调用方法传参定义一个方法 求1到这个数的所有的和main() { int sumNum(int n) { var sum = 0; for (var i = 0; i <= n; i++) { sum += i; } return sum; } var n1 = sumNum(60); print(n1); var n2 = sumNum(100); print(n2);}...原创 2021-11-29 09:30:51 · 591 阅读 · 0 评论 -
Dart 方法的定义 变量 方法的作用域
内置方法/函数:print()自定义方法:自定义方法的基本格式:返回类型 方法名称 (参数1, 参数2, ...) {方法体return 返回值;}void printInfo() { print('我是一个自定义方法');}// 可以写到main()入口函数的外边// int getNum() {// var myNum = 123;// return myNum;// }Strin...原创 2021-11-29 09:30:40 · 256 阅读 · 0 评论 -
Dart forEach map where any every
forEach map where any every方法一void main() { List myList = ['香蕉', '苹果', '西瓜']; for(var i = 0; i < myList.length; i++) { print(myList[i]); // 香蕉 苹果 西瓜 }}方法二void main() { List myList = ['香蕉', '苹果', '西瓜']; for(va...原创 2021-11-29 09:30:25 · 284 阅读 · 0 评论 -
Dart Map方法
映射(Maps)是无序的键值对常用属性:keys 获取所有的key值 values 获取所有的value值 isEmpty 是否为空 isNotEmpty 是否不为空常用方法:remove(key) 删除指定key的数据 addAll({...}) 合并映射 给映射内增加属性 containsValue 查看映射内的值 返回true/false forEach map where any every方法一...原创 2021-11-28 13:09:02 · 1029 阅读 · 0 评论 -
Dart Set方法
set 去除数组重复内容 Set 是没有顺序且不能重复的集合,所以不能通过索引去获取值void main() { var s = new Set(); s.add('香蕉'); s.add('苹果'); s.add('苹果'); print(s); // {香蕉, 苹果} print(s.toList()); // 转换List类型 [香蕉, 苹果]}void main() { var myList = ['香蕉', '苹果',...原创 2021-11-28 12:57:22 · 893 阅读 · 0 评论 -
Dart List集合类型
List里面常用的属性和方法:常用属性:length 长度 reversed 翻转 isEmpty 是否为空 isNotEmpty 是否不为空常用方法add 增加 增加一条数据 addAll 拼接数组 indexOf 查找 传入具体值 remove 删除 传入具体值 removeAt 删除 传入索引值 fillRange 修改 insert(inde...原创 2021-11-28 12:52:35 · 286 阅读 · 0 评论