• 主页
  • 归档
  • 分类
  • 照片墙
所有文章 友情链接 关于我

  • 主页
  • 归档
  • 分类
  • 照片墙
  1. 1. 数据绑定
  2. 2. 获取屏幕的尺寸
  3. 3. 下拉刷新与滚动更新
  4. 4. 区分开发环境与生产环境
  5. 5. 弹性布局

Flutter踩坑记录

2019-11-30 22:31:53
总字数 520
预计阅读时间 2 分钟

数据绑定

使用setState方法对底层数据进行修改并且动态渲染视图
比如需要从接口获取数据显示到页面当中

1
2
3
4
5
Response response = await http.get('common/items');
setState((){
this.loading = false;
this.items = response.data;
});

采用这种方式进行赋值才可以执行动态绑定
否则不会进行视图的重新渲染
该方法继承自抽象类State

获取屏幕的尺寸

1
final Size screenSize = MediaQuery.of(context).size;

Size对象当中包含width和height属性,可以用于根据屏幕的高度控制控件的大小

下拉刷新与滚动更新

下拉刷新直接使用RefreshIndicator控件包装
当滚动到顶部并且进行下滑动作时就可以执行指定方法

1
2
3
4
5
6
7
8
9
10
11
RefreshIndicator(
onRefresh: (){
return http.get('common/photos').then((response) {
setState((){
this.loading = false;
this.items = response.data
});
});
},
child: Container(/*省略内部子组件代码*/),
),

需要注意的是onRefresh函数的返回值必须是Future<void>类型,用于执行异步回调

滚动更新需要给组件绑定ScrollController
并且在组件初始化时绑定滚动监听

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// 滚动控制器
ScrollController _scrollController = ScrollController();

ListView(
controller: this._scrollController,
),
// 省略其他代码...

@override
void initState() {
super.initState();
_scrollController.addListener(() { // 绑定滚动监听事件
if (_scrollController.position.pixels == _scrollController.position.maxScrollExtent) {
// TODO 滚动到底部需要执行的操作
}
});
}

区分开发环境与生产环境

1
bool.fromEnvironment('dart.vm.product');

true代表是生产环境,false代表开发环境

弹性布局

Flutter也实现了类似于CSS当中的flex弹性容器布局
可以按照比例分配子元素的宽度或高度

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Flex(children: <Widget>[
Expanded(
flex: 1,
child:Text('内容', style: TextStyle(fontSize: 18), textAlign: TextAlign.center)
),
Expanded(
flex: 4,
child: TextFormField(
validator: (v) {
return v.trim().isNotEmpty ? null : '必须输入内容';
},
onChanged: (value) {
this.fromData['content'] = value;
},
),
)
],
direction: Axis.horizontal
)

这是一个常规的表单项的结构,分为一个标题和一个输入框
并且指定子元素排列方向为横向
两者的宽度之比为1:4

  • flutter
  • dart
  • flutter

扫一扫,分享到微信

重新认识JSON.stringify
Flutter路由 
© 2024 夏夜梦星辰
鲁ICP备19028444号
Power By Hexo
  • 所有文章
  • 友情链接
  • 关于我
{{searchItem.query}}
标签: 分类:
  • maven
  • 持续集成
  • JMS
  • 线程
  • JavaScript
  • ECMAScript6
  • 单元测试
  • Promise
  • Web Worker
  • 函数
  • prototype
  • 模块化
  • 正则表达式
  • 数据库
  • MongoDB
  • 索引
  • 集群
  • 全文检索
  • flutter
  • dart
  • git
  • 版本控制
  • linux
  • shell
  • docker
  • nginx
  • jenkins
  • opencv
  • vim
  • react
  • react native
  • 前端
  • css
  • HTML5
  • Hexo
  • sass
  • Three.js
  • TypeScript
  • Vue
  • 组件化
  • base64
  • webpack
  • nodejs
  • gulp
  • TensorFlow
  • 机器学习
  • 算法
  • 动态规划
  • 数据结构
  • Java
  • JavaScript
  • MongoDB
  • flutter
  • Git
  • linux
  • react
  • 前端杂烩
  • 男生女生
  • 算法
  • 十年饮冰,难凉热血
  • †少女癌†
  • 猫与向日葵
  • coderfun
  • JENKINS
  • API管理后台
愿你最终能接纳每一面每一种的自己
独自活着便是团圆