Flutter 入门
一、HelloWorld
演示
二、开发环境
1 | export PUB_HOSTED_URL=https://pub.flutter-io.cn |
三、基础组件
1. Widget
State 生命周期如下:
2. Text、TextSpan、WidgetSpan
- Text 显示文字
1 | Text( |
- 实际开发过程中,还会有一个 Text 不同部分安装不同样式显示,可以用 TextSpan
1 | Text.rich( |
3. Button、Image
- Button
Flutter 提供了几种样式的 Button,也支持自定义外观
1 | RaisedButton( |
- Image
Image 组件用来显示图片,数据源可以是 assets、文件、网络
Image 对加载过的图片会有缓存(内存),默认缓存数量是 1000,最大缓存空间是 100M
1 | // 加载本地文件 |
3. 表单、输入框、单选、复选
4. 布局组件
- 线性布局:Row、Column
- 弹性布局:Flex、Expanded
- 流式布局:Wrap、Flow
- 层叠布局(绝对定位):Stack、Position
- 对齐:Align
5. 容器类组件
- Container 类似 div
1 | // 其中 decoration constraints transform padding 都有对应的单独的Box类 |
6. 可滚动组件
- ListView
- GridView
- SingleChildScrollView
- CustomScrollView
四、路由
1. MaterialPageRoute
1 | Navigator.push( context, |
2. Navigator
1 | Navigator.push(BuildContext context, Route route); |
3. 命名路由
1 | MaterialApp( |
4. 命名路由 Hook
如果指定的路由名在路由表中已注册,则会调用路由表中的 builder 函数来生成路由组件;
如果路由表中没有注册,才会调用 onGenerateRoute 来生成路
1 | MaterialApp( |
五、网络请求
1. Dio 库
1 | dependencies: |
- 基础使用
1 | // get 请求 |
- BaseOptions
1 | Dio dio = Dio(BaseOptions( |
2. 处理 cookie
1 | # 依赖 |
1 | Dio dio = Dio(BaseOptions( |
3. json 转 model
1 | class User { |
六、持久化存储
1. SharedPreferences
1 | # 引入该依赖后,ios模拟器需要重新 build,可能需要进ios目录执行 pod install |
1 | // key-value 存储 |
2. 文件操作
1 | // path_provider |
七、动画
- Animation: 主要用于保存动画插值和状态
- addListener(): 帧监听器,每一帧都会被调用
- addStatusListener(): 状态改变监听器,动画开始、结束、正向或反向 时会调用状态改变监听器
- Curve: 用来描述动画过程
- AnimationController: 用于控制动画,动画的启动 forward()、停止 stop()、反向播放 reverse()
1 | final AnimationController controller = new AnimationController( |