Flutter、Golang、Python、编译原理、算法、Chrome原理学习系列文章抢先看请关注【码农帮派】:
1. Dart的零散知识点
-
Dart需要一个函数入口
void main() {
print("Hello World!");
}
-
Dart中变量的类型必须是明确指定的或者系统能够解析的
String name;
var name = 'Dragon';
-
Dart中没有初始化的变量的初始值为null(注意:Dart中数字也是对象,所以数字类型的变量在没有初始化的时候初始值也是null)
-
Dart中,只有布尔类型的true才会被是为true
var myNull = null
if (myNull == null) {
print("myNull is null");
}
2. 从Dart1.2开始,提供了null-aware运算符可以用来检测null
?. 运算符在左边为null的情况下,会阻断右边的调用,?? 运算符主要作用是在左侧表达式为null的时候,为其设置默认值。
对于表达式:
outgoing[a]?.contains(b)
如果outgoing为null、或者outing[a]为null、或者contains(b)的值为null,都会导致表达式为null。
【注意】?? 运算符只有当其左侧的表达式为null,才会赋予??右边的默认值。
3. Dart中使用Future实现异步操作
在Dart中,async函数返回一个Future,函数的主体将稍后执行,await运算符用于等待一个Future完成。
4. Flutter项目
创建Flutter项目:
-> flutter create <projectName>
运行Flutter项目:
-> flutter run -d 'iPhone X'
【说明】-d后面是设备名称,要是需要运行IOS模拟器,可以使用下面两条命令:
-
查看当前电脑有哪些可用IOS模拟器: xcrun instruments -s
-
上一条命令查看设备号,然后启动设备: xcrun instruments -w '设备号'
Flutter项目的工程目录:
【说明】Flutter虽然是跨平台方案,但需要一个容器最终运行到Android和IOS平台上,所以Flutter项目实际上就是一个同时内嵌了Android和IOS原生子工程的父工程:我们在lib目录下进行Flutter代码开发,而某些特殊场景下的原生功能,则在对应的Android和IOS工程中提供相应的代码实现,供对应的Flutter代码引用。
5. 资源文件
Flutter中assets可以是任意类型的文件,不仅仅是图片,assets放置的路径也可以自定义(但需要在lib目录下),下面的资源文件:
my-assets/data.json
上面在自定义目录my-assets下放置data.json的文件,需要在pubspec.yaml中声明:
assets: - my-assets/data.json
然后在代码中访问资源:
import 'dart:async' show Future;
import 'package:flutter/services.dart' show rootBundle;
Future<String> loadAsset() async {
return await rootBundle.loadString('my-assets/data.json');
}
6. 资源图片的像素
Flutter像IOS一样,遵循了一个简单的基于像素密度的格式,图片资源可能是1.0x 2.0x 3.0x或者其他的任何倍数,这个设备像素密度(devicePixelRatio)表示了物理像素到单个逻辑像素的比例。Android不同像素密度的图片和Flutter的像素比率的对应关系:
ldpi 0.75x
mdpi 1.0x
hdpi 1.5x
xhdpi 2.0x
xxhdpi 3.0x
xxxhdpi 4.0x
我们有1.0x 2.0x 3.0x三个分辨率的图片,将它们都命名为my_icon.png,进行下面方式放置:
images/my_icon.png // Base: 1.0x image
images/2.0x/my_icon.png // 2.0x image
images/3.0x/my_icon.png // 3.0x image
接下来就可以在pubspec.yaml文件中如下声明:
assets: - images/my_icon.png
使用资源图片:
AssetImage('images/my_icon.png');
Image.asset('images/my_icon.png');
Flutter会根据当前设备的分辨率加载资源文件夹下不同分辨率的my_icon.png。
7. 组件状态修改
Flutter中组件状态的改变,一定要配合使用setState,通过调用setState方法,Flutter会在底层标记Widget的状态,随后触发重建。