IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> Dart之基础知识巩固 -> 正文阅读

[移动开发]Dart之基础知识巩固

一、Dart中的变量与常量
1.变量

1.var类型是任意数据类型,一旦赋值类型就会确定不可以在更改,确定类型的时间是在编译结束以后
2.强制变量的类型比如String value = "今天是清明节";

dynamic和Object

2、常量

不可变的变量例如一些配置项,对于不可变的变量可以使用final和const关键字,final修饰的关键字声明的变量为最终变量,const修饰的关键字为最终常量

final和const区别:

  1. final 与 const 修饰的变量取值时机不同。 const编译时常量,final是运行时常量(在第一次使用时被初始化),可以理解为’懒加载’
  2. final可修饰实例变量、const不可以修饰实例变量,类级别的常量,通常用 static const
  3. 应用范畴不同,final 只可用来修饰变量const 关键字即可修饰变量也可用来修饰 常量构造函数
  4. 相同内容对象创建不同。内存中重复创建值,相同时final在内存中重复创建,const会引用相同值
//2.
class A{
 static const B = 0;
}
print(A.B)
//5.
class A{}
final A a = new A();

final和const相同点:

  1. 都必须初始化final height = 10;
  2. 类型声明可以省略final String a = 'abc';,final a = 'abc';
  3. 初始化后就不能进行赋值final a = 'aaa';a = 'abc'; 错误
  4. 不能和var同时使用 final var a = 'abc';’错误
3、 dynamic和Object

Object是dart所有对象的根基类,也就是说所有类型都是Object的子类(包括Function和Null),所以任何类型的数据都可以赋值给Object声明的对象

dynamic与var一样都是关键词,声明的变量可以赋值任意对象.而dynamic与Object相同之处在于,他们声明的变量可以在后期改变赋值类型.

不同点:
dynamic与Object不同的是,dynamic声明的对象编译器会提供所有可能的组合,而Object声明的对象只能使用Object的属性与方法, 否则编译器会报错. 如:

 dynamic a;
 Object b;
 main() {
     a = "";
     b = "";
     printLengths();
 }   

 printLengths() {
     // no warning
     print(a.length);
     // warning:
     // The getter 'length' is not defined for the class 'Object'
     print(b.length);
 }

二、基本数据类型
  • Dart 中 number 类型分为 int 和 double
  • 以bool代表布尔值,只有两个对象是布尔类型的,那就是true和false所创建的对象,这两个对象都是编译时常量。
  • String字符串
  • List数组
  • Map集合
三、Dart函数和运算符

dart中的函数和JavaScript中有点类似。你需要定义就是函数的名字、返回值(有返回值或者void)、参数。

  void test(){
    var name = fullName('可可', '吃货');
    print(name);
  }

  String fullName(String firstName, String lastName) {
    return "$firstName $lastName";
  }

命名参数
dart有个叫命名参数的东西。当你调用函数的时候,你必须指定参数的名字。要使用命名参数,可以将函数的参数包括在花括号{}内

  1. 算术运算符
  2. 比较运算符
  3. 复合运算符
  4. 逻辑运算符
  5. 位运算符
  6. 条件运算符
  7. 级联运算符
  8. 点运算符
var a = 9;
print(a??"10");//如果a的值为空那么变赋值给问号后面的值
print(a??="10")//与上面的语义一样
//级联运算符
/*
让开发者对某个连续的对象进行一系列的操作,减少中间变量的产生
*/
//点运算符
class A{
String name;
}
var p = A();
p.name="";
p?.a//null,如果调用的值为空那么就返回null否则就是正常访问
四、分支语句
  1. if和else
  2. for循环
  3. while循环
  4. break和continue
  5. switch和case
  6. 异常处理
switch(20){
case:10
print("");
}

异常处理

五、Dart面向对象
1.使用函数
  1. 自定义函数
  2. 定义可选参数class A{String name;A({this.name}); }
  3. 函数可选默认值class A{String name;A({this.name=李白“”}); }
  4. 匿名函数((){})
  5. 词法作用域(作用域可以防止变量被污染)
  6. 闭包(闭包也是函数,离开变量作用域会失效)
2.Dart中的类

构造函数:
构造方法通常与类名相同,this指向当前实例化对象

  1. 普通构造函数
var cat = new Cat("逗比", 12);

class Cat {
  String name;
  int age;

  Cat(String name, int age) {
    this.name = name;
    this.age = age;
  }
}
  1. 命名构造函数
Map map = new Map();
map['name']= "哈巴狗";
map['age'] = 5;
Dog d = new Dog.newBorn(map);


class Dog {
  String name;
  int age;

  Dog(this.name, this.age);

  Dog.newBorn(Map json) {
    name = json['name'];
    age = json['age'];
  }
}

继承类:可以使用extends关键字继承其他的类
调用父类中的普通构造方法

class People{
String name;
void getName(){
	print("name:${name}");
	}
}
class Teacher extends People{
	void getName(){
	super.getName();
	print("name:${name}");
	}
}

调用父类中构造方法

class People{
String name;
void getName(){
	print("name:${name}");
	}
}
class Teacher extends People{
Teacher(String name):super(name);
}

重载和重写:@override
重写父类方法

class People{
String name;
void getName(){
	print("name:${name}");
	}
}
class Teacher extends People{
@override
	void getName(){
	print("");
	}
}

多类继承Mixin(拓展类)
dart中只支持单继承,但是想要继承多个类怎么办呢,Dart中的Mixins通过创建一个新类来实现,该类将mixin的实现层叠在一个超类之上以创建一个新类

class A{}
class B{}
class C extends A with B{}
//遇到相同功能的函数,最后载入的会覆盖之前的函数定义

Mixin不能实现构造方法,否则不能够被其他类所混合。作为Mixin的类虽然不能够定义构造方法,但是可以使用默认的构造方法进行实例化,如果不想使用Mixin类进行实例化那么可以用mixin关键字来定义Mixin类

抽象类:
实际上就是一个接口,只需要在类声明前添加abstract关键字,方法不需要。方法只需要签名,不需要实现。

abstract class TeacherInterface{
void teaching();
}
class Teacher implement TeacherInterface{
void teaching(

print(""));
}
//也可以实现多个接口

泛型

dart全面支持泛型。假设你想在你定义的类中,想持有任意类型的数据。如下是怎样使用泛型定义这样的类。

DataHolder<String> dataHolder = new DataHolder('Some data');
print(dataHolder.getData());
dataHolder.setData('New Data');
print(dataHolder.getData());
//下面这个会报错,因为dataHolder对象在创建的时候就已经限制为String类型
dataHolder.setData(123);
print(dataHolder.getData());

class DataHolder<T> {
  T data;

  DataHolder(this.data);

  getData() {
    return data;
  }

  setData(data) {
    this.data = data;
  }
}

3.异步编程

异步编程(上)
异步编程(下)

知识点

1、Dart是什么? 和Flutter是什么关系?

Dart是Google开发的一种面向对象的计算机编程语言,和Java类似
Flutter 是 Google 开源的 UI 工具包,帮助开发者通过一套代码库高效构建多平台精美应用,支持移动、Web、桌面和嵌入式平台
Dart是flutter的程序开发语言
  1. main()和runApp()函数在flutter的作用分别是什么?有什么关系吗?
main函数是类似于java语言的程序运行入口函数
runApp函数是渲染根widget树的函数
一般情况下runApp函数会在main函数里执行
  1. 什么是widget? 在flutter里有几种类型的widget?分别有什么区别?能分别说一下生命周期吗?
Widget在flutter里基本是一些UI组件,和
在 Flutter 中,有两类常用的 Widget:

    无状态的 StatelessWidget
    有状态的 StatefulWidget
    
    初始化 (插入渲染树🌲)
    状态改变 (在渲染树中存在)
    销毁 (从渲染树中移除)
initState
didChangeDependencies
didUpdateWidget
deactivate
dispose
  1. 在flutter里streams是什么?有几种streams?有什么场景用到它?
异步数据队列
两种,单订阅流和广播流
网络状态监控
  1. future 和steam有什么不一样?
在 Flutter 中有两种处理异步操作的方式 Future 和 Stream,Future 用于处理单个异步操作,Stream 用来处理连续的异步操作.
  1. 什么是flutter里的key? 有什么用?
key是Widgets,Elements和SemanticsNodes的标识符。

key有LocalKey 和 GlobalKey两种。

LocalKey 如果要修改集合中的控件的顺序或数量。GlobalKey允许 Widget 在应用中的任何位置更改父级而不会丢失 State。
  1. 怎么理解Isolate?
isolate是Dart对actor并发模式的实现。 isolate是有自己的内存和单线程控制的运行实体。isolate本身的意思是“隔离”,因为isolate之间的内存在逻辑上是隔离的。isolate中的代码是按顺序执行的,任何Dart程序的并发都是运行多个isolate的结果。因为Dart没有共享内存的并发,没有竞争的可能性所以不需要锁,也就不用担心死锁的问题
  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-04-07 22:51:12  更:2022-04-07 22:53:14 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 20:48:15-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码