471Flutter学习笔记
2021-08-01 09:36:24 3 举报
AI智能生成
Flutter学习笔记
作者其他创作
大纲/内容
在dart语言中:变量是一个引用,未初始化的变量值是null;
例如int:abstract class int extends num
int是一个类所有的基本类型都是一个class类,是与java中不同的;
例如:var j = \"yulinmufeng\";j=100;(报错)var l;j = \"yulinmufeng\";j=100;
var 在声明的变量赋值那一刻,就决定了它是什么类型
常量修饰符的区别:dynamic与var的使用方法是相反的(动态的)。例如以下:dynamic z = \"yulinmufeng\";z= 100;但在实际开发的情况下,动态的声明变量和静态的声明变量,dynamic和var变量定义的在执行效率上,不如var定义的变量;dynamic一般在不确定是什么类型的时候,才会使用dynamic来声明变量;dynamic一般使用频率不是很高;var的缺点是,不能很好一眼就看出来是什么类型;object与java中的表现是一样的;
Dart所有的变量皆对象
Object、var与dynamic
final:用法与java中是一样的;
final
const:在赋值之后,是不能再次进行赋值的,与final是一样的;final是运行期常量;const是编译期常量;const比final的运行效率要高;
特性:final i = 1;const j = 1;//因为i是运行时确定,所以不能给编译时候就要确定的变量赋值//const z= i;(不可以)//可以使用另一个编译时确定的变量给它赋值const z=j+1;(这样是可以的)
使用场景:均可以声明一个不可变量的声明
const
final与const的区别
变量
说明:1、通过源码中的注释,可以看出int类型,占用的字节,要看编译运行的平台,分为4字节或者8字节,但可以认为和java一样,为4个字节;2、dart当中的int,在编码的时候,可以将int当成java的int long来使用,如果我们写的dart代码超过了4个字节,那么dart会将其编译成类似的java当中的long否则编译成java当中的short或者int;3、i.bitlength=占用的字节;4、在使用上和java的方式是一样的;备注:原则上java和Dart语言中的int不能拿到一块进行对比,因为Dart中为class类,而java是基本数据类型;
int
说明:1、如果要表示float类型时,只能使用double来表示;2、Dart中的double和在java中的double在使用方式上市一样的;
double
说明:1、num内置数据类型只有两个int和double;
数据类型:num
说明:1、在声明上与java一样;String str = \"走,一起去搓澡!\";(dart)2、方法String.format(\"&s%d\
字符串类型:String
说明:1、bool来定义布尔类型;2、定义方式:bool b= false;
布尔类型:bool
数据类型:List
映射集合:Map
Unicode:Runes
说明:1、(很少用到,作为了解)Symbols标识符,类似C、C++中的宏(但不完全相似)2、定义一个symbolsvar a = #asdfg;a输出的时候就是为:symbols使用点一般在switch中使用,其他的使用点就不多;switch(a){ case #A: break; case #sadsad: break;}
标识符:Symbols
说明:java中有8大基本数据类型;Dart中有7大内置类型;
内置类型
说明:1、Dart语言中不支持java中强制类型转换的方法2、Dart例如:num j = 1;//类型转换,不支持java的转化:(int)强转写法int i = j as int;
类型转换:as
说明:1、dart语言中没有java中的instantof,而是需要is来实现;if(index is int){}2、不属于int类型则命中ifif(index is! int){}
类型判断:is、!is
类型判定操作符
说明:1、java保证k后续使用时一定不为nullString k;if(null == k){ k = \"123\";}2、dart语言中,??= 安全赋值,如果k有值,这句话就当它不存在,如果k没有值就赋值456k ??= \"456\";
赋值操作符:??=
说明:1、跟java中的三目运算符是一样的
三目表达式:condition?expr1:expr2
说明:1、如果expr1不为null,那么就返回expr1,否则就返回expr2例如:String k = \"123\";var v = k ?? \"789\";那么v= 123;如果:k = null;var v = k ?? \"789\";那么v = 789;
expr1 ?? expr2
条件表达式
说明:1、java中的话,就像是建造者是一样的,在每次返回的时候,都是他本身,这样的话就可以一直链式调用;2、dart中级联操作符new Builder()..a()..b();class Builder { void a(){ } void b(){ }}
级联操作符:..
说明:1、在正常开发的时候,经常遇到的异常就是空指针异常;但是在dart语言中,可以使用?.来解决这个功能。2、grovy和kotlin语言中都有这个?.此功能。
安全操作符:?.
操作符
可选命题参数
可选位置参数
默认参数值
一等方法对象
说明:1、匿名方法,lambda表达式
匿名方法
方法
说明:(1)介绍catch的参数;1、dart中和java中的异常抛出不一样;如下:void test(){ throw new Exception(\"你好\
异常
类说明:1、私有的类和属性,在dart语言中,表示方式;//包括类的定义 如果使用 _ 开头,意味着这个类就是privateclass Point{ int _x;//使用_开始命名的变量,就是java的private,在外面不可以调用 int y;}
命名构造函数
参数初始化列表
重定向构造函数
常量构造函数
说明:在命名构造函数前面其实加一个factory就是工厂构造函数;在工厂的构造方法中,不可以使用this
工厂构造函数
构造函数
说明:每一个实例属性,变量都会有一个隐式的get,非final 还有set方法;
Getter与Setter
说明:操作符重载:把已经定义的、有一定功能的操作符进行重新定义;例如:<、+、|、[]、>、/、^、[]=、<=、~/、&、~、>=、*、<<、==、-、%、>>
操作符重载
说明:1、abstract使用abstract修饰符定义一个抽象类,抽象类中允许出现无方法的方法与java没有什么区别,不可以多继承;abstract class Parent{ String name; void printName();//抽象方法,不需要在方法前声明abstract}2、接口与java不同,Dart中没有interface关键字,Dart中每个类都隐式的定义了一个包含所有势力成员的接口,并且这个类实现了这个接口。如果你想创建类M来支持类N的方法,而不想继承N的实现,则类M应该实现N的接口;每一类都可以看作为一个接口,Dart语言中没有分的太清楚。
抽象类与接口
混合mixins
说明:class Test{ void call()}{}}调用(只有call方法的时候才能这样调用)test();就相当于调用了call()方法;也可以直接调用test.call();
可调用的类
类
Dart语言
(0)网址:https://flutterchina.club/setup-windows/
说明:以下是mac本配置的方式:(与window方式不一样,但是Flutter中文网上给的镜像的方式是错误的,给的mac上配置的方式,特此说明)export PUB_HOSTED_URL=https://pub.flutter-io.cnexport FLUTTER_STORAGE_BASE_URL=https://storage.flutter-io.cn
mac
说明:window配置镜像的方式如下。PUB_HOSTED_URL=https://pub.flutter-io.cnFLUTTER_STORAGE_BASE_URL=https://storage.flutter-io.cn
window
同时可以在用户中心和系统中心进行配置环境变量
(1)使用镜像配置环境变量
网址:https://flutter.dev/docs/development/tools/sdk/releases#windows
下载完成之后,进行解压,然后在进行环境变量的配置配置到path路径下。
打开cmd命令,执行以下命令:flutter doctor执行结果可以查看,flutter需要的条件有哪些,哪些还没有安装,都会给你列出来。(如上图)
命令测试
环境变量配置:D:\\install_files\\flutter\\flutter_sdk\\flutter\\bin配置完成之后,现在就可以使用flutter命令了
(2)下载Flutter的SDK
以上所有工作已经完成后打开android studio进行安装Flutter插件,安装成功后,对android studio进行重启然后在创建新项目的时候,就可以创建flutter项目了
(3)安装插件
(4)所有的准备工作已经完成
错误日志如下:Could not determine the dependencies of task ‘:app:compileDebugJavaWithJavac‘.
buildscript { ext.kotlin_version = '1.3.50' repositories {// google()// jcenter() maven { url 'https://maven.aliyun.com/repository/google' } maven { url 'https://maven.aliyun.com/repository/jcenter' } maven { url 'http://maven.aliyun.com/nexus/content/groups/public' } maven { url 'http://download.flutter.io'} } dependencies { classpath 'com.android.tools.build:gradle:4.1.0' classpath \"org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version\" }}allprojects { repositories {// google()// jcenter() maven { url 'https://maven.aliyun.com/repository/google' } maven { url 'https://maven.aliyun.com/repository/jcenter' } maven { url 'http://maven.aliyun.com/nexus/content/groups/public' } maven { url 'http://download.flutter.io'} }}rootProject.buildDir = '../build'subprojects { project.buildDir = \"${rootProject.buildDir}/${project.name}\" project.evaluationDependsOn(':app')}task clean(type: Delete) { delete rootProject.buildDir}
解决方法:1、修改android目录下的build.gradle文件中的所有的google()和jcenter()换成阿里云的镜像
buildscript { repositories { maven { url 'https://maven.aliyun.com/repository/google' } maven { url 'https://maven.aliyun.com/repository/jcenter' } maven { url 'http://maven.aliyun.com/nexus/content/groups/public' } } dependencies { classpath 'com.android.tools.build:gradle:3.5.0' }}
解决方法:2、修改flutter sdk下的flutter.gradle文件,具体目录是flutter\\packages\\flutter_tools\\gradle
(5)遇到的第一个问题
Flutter配置开发环境
环境搭建
像进程一样的线程
事件驱动
微任务队列的优先级是最高的跟普通的任务并列好几个的时候,就算是微任务后提交,也会先把微任务执行完,之后再执行普通的任务!
会不会插队执行呢?
微任务队列
事件队列与微任务队列
isolate(Dart中的异步机制)
在异步编程中随处可见,代表了事件结果
对异步编程的异常捕获
等待多个异步结果进行后续操作:wait方法
Futura
Stream(流) 在 Dart API 中也经常出现,表示发出的一系列的异步数据。 Stream 是一个异步数据源,它是 Dart 中处理异步事件流的统一 API。
异步事件流
操作订阅者:取消、异常、暂停继续
广播模式:允许多个订阅者Stream有两种订阅模式:单订阅和多订阅。单订阅就是只能有一个订阅者,上面的使用我们都是单订阅模式,而广播是可以有多个订阅者。通过 Stream.asBroadcastStream() 可以将一个单订阅模式的 Stream 转换成一个多订阅模式的 Stream,isBroadcast 属性可以判断当前 Stream 所处的模式。
Stream
async声明为异步方法,返回Future
示例
await等待执行结果,异步变同步(多个异步串行执行)
async/await
异步编程
Flutter学习笔记
0 条评论
回复 删除
下一页