StatelessWidget 只有 createElement 和 build 两个生命周期
所以重点了解下 StatefulWidget
StatefulWidget 的生命周期方法按照时期不同可分为三组:
初始化时期createState
当构建一个新的 StatefulWidget 会立刻调用
并且这个方法必须被覆盖
123456e.g.class WidgetLifecycle extends StatefulWidget { @override _WidgetLifecycleState createState() => _WidgetLifecyc...
Flutter 需要打开第三方应用 就需要使用插件
在 Dart Packages 里 搜索 url_launcher 插件
https://pub.dev/
具体使用可参看官方实例:
https://pub.dev/packages/url_launcher
以下是两个例子:
点击打开浏览器123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354e.g.import 'package:flutter/material.dart';impo...
布局练习的差不多 接下来就要学习路由啦
那么如何创建和使用路由和导航呢?
首先在 MaterialApp 注册 routes'ful' => 路由的名称
(BuildContext context) => StatefulGroup() => 路由指向的页面
12345678910111213141516171819202122232425e.g.// main.dartclass MyApp extends StatelessWidget { @override Widget build(BuildContext context) ...
flutter 相关常用的布局组件有以下三大类:
ContainerRenderObjectWidgetRenderObjectWidget 分为两类:
SingleChildRenderObjectWidget 单节点 和 MultiChildRenderObjectWidget 多节点
SingleChildRenderObjectWidget 单节点Opacity:设置透明度123456789101112131415161718e.g.Padding( padding: EdgeInsets.all(10),//设置内边距 //剪裁为带圆角的方形 child: C...
枚举
枚举是一种有穷序列集的数据类型
使用关键字 enum 定义一个枚举
常用于代替常量,控制语句等
枚举能组装有固定数量的
以下为春夏秋冬为例的枚举:
12345678910111213141516171819202122e.g.void main() { var currentSeason = Season.winter; switch (currentSeason) { case Season.spring: print('1月 - 3月 '); break; case Season.summer: prin...
继承
使用关键字 extends 继承一个类
子类会继承父类可见的属性和方法 不会继承构造方法
子类能够复写父类的方法、 getter 和 setter
单继承 多态性
@override 表示覆写了父类里的方法
12345678910111213141516171819202122232425262728293031323334353637383940e.g.//person.dartclass Person { String name; int age; bool get isAdult => age > 18; String run() ...
类与对象
使用 class 声明一个类
使用关键字 new 创建一个对象 new可省略
所有对象都继承于 Object 类
属性与方法
属性会默认生成 getter 和 setter 方法
使用 final 声明的属性只有getter(只读)
属性和方法通过 . 访问
方法不能被重载
1234567891011121314151617181920212223e.g.void main() { var person = Person(); //属性和方法通过 `.` 访问 person.age = 20; person.name = 'Tom';}...
方法的定义12345678910111213e.g.//void 表示无返回类型void main(List args) { print(args); print(getPerson('张三', 13));}//String 表示 getPerson 返回值是字符串String getPerson(String name, int age) { return 'name= $name, age = $age';}
方法特性
方法也是对象 并且有具体类型 Function
返回值类型、参数类型都可省略
箭头语法:=> expr 是{...
float 单精度浮点数
double 双精度浮点数
float 和 double 的区别有如下几点:
在内存中占有的字节数不同
单精度浮点数 在机内存占4个字节
双精度浮点数 在机内存占8个字节
有效数字位数不同
单精度浮点数 有效数字8位
双精度浮点数 有效数字16位
数值取值范围
单精度的范围:-3.40E+38 ~ 3.40E+38
双精度的范围:-1.79E+308 ~ 1.79E+308
在程序中处理速度不同
一般来说 CPU 处理单精度浮点数的速度比处理双精度浮点数快
大部分的运算符操作都与 js 差不多
极个别的运算符 是 js 没有的
有针对性的学习 很快就能掌握
有语言基础的 学起来就更容易上手
dart 运算符分以下几类:
算术运算符
加减乘除:+、-、*、/、 ~/、%
递增递减:++var 、 var++、 --var 、 var--
a++ 先执行表达式后再自增,执行表达时使用的是 a 的原值
++a 先自增再执行表达式,执行表达示时使用的是自增后的 a
123456e.g.int a = 10;print(a++); //输出10 执行完后 a = 11print(++a); //输出11 执行完后 a = 11
关系...