内容简介:在上一篇中,我们了解了常用的先看效果图这里有2个方法
在上一篇中,我们了解了常用的 Widget ,这一篇,我们从实际出发,来深入学习下 Widget 。
案例1 模拟登陆
先看效果图
- 1.我们需要2个输入框,1个按钮 这里用到的都是之前说过的
Widget,就直接贴代码了,建议先看这篇 【Flutter】开发之基础Widget(二)
class LoginDemo extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('LoginDemo'),
),
body: Container(
margin: EdgeInsets.all(15),
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
children: <Widget>[
Padding(
padding: EdgeInsets.only(top: 100),
),
TextField(
decoration: InputDecoration(
hintText: '请输入账户',
hintStyle: TextStyle(color: Colors.black45),
contentPadding: EdgeInsets.all(10),
border: OutlineInputBorder(
borderRadius: BorderRadius.circular(4),
)),
),
Padding(
padding: EdgeInsets.only(top: 15),
),
TextField(
//显示*号
obscureText: true,
decoration: InputDecoration(
hintText: '请输入密码',
hintStyle: TextStyle(color: Colors.black45),
contentPadding: EdgeInsets.all(10),
border: OutlineInputBorder(
borderRadius: BorderRadius.circular(4),
)),
),
Padding(
padding: EdgeInsets.only(top: 50),
),
FlatButton(
child: ClipRRect(
borderRadius: BorderRadius.all(Radius.circular(10)),
child: Container(
height: 50,
width: 300,
decoration: BoxDecoration(color: Colors.deepOrangeAccent),
alignment: AlignmentDirectional.center,
child: Text(
'登录',
style: TextStyle(
fontSize: 18,
color: Colors.white,
backgroundColor: Colors.deepOrangeAccent,
),
),
),
),
)
],
),
),
);
}
}
复制代码
- 2.需要获取输入的内容
这里有2个方法
1). 处理 onChanged 回调
TextField(
//文字改变时调用
onChanged: (String content) {
print("content=" + content);
}
复制代码
2). 提供一个 TextEditingController
TextEditingController user = new TextEditingController();
TextField(
...省略...
controller: user ,
...省略...
)
复制代码
然后通过 user.text 方法即可取得输入内容。
- 3.点击事件
1).可以通过 onPressed 实现
FlatButton(
onPressed: () {
//显示弹窗
_showDialog(context);
})
复制代码
注: Flutter 的语法是 Dart , Dart 不像 Java ,没有关键词 public 、 private 等修饰符, _ 下横线代表 private ,但是有 @protected 注解。 然后,我们需要判断密码是否大于6位,如不是,弹窗提示
void _showDialog(BuildContext context) {
if (pwd.text.length < 6) {
showDialog(
context: context,
builder: (BuildContext content) {
return AlertDialog(
title: Text("提示"),
content: Text('输入的密码不能小于6位'),
);
},
);
}
}
复制代码
正常的逻辑来说,弹出窗中应该有按钮,点击重新输入,但是却发现,有的 Widget 没有点击事件,这时,我们可以通过在外面嵌套 GestureDetector 来处理, GestureDetector 还有更多的功能,这个我们后面再说 2).嵌套 GestureDetector
void _showDialog(BuildContext context) {
if (pwd.text.length < 6) {
showDialog(
context: context,
builder: (BuildContext content) {
return AlertDialog(
title: Text("提示"),
content: Text('输入的密码不能小于6位'),
actions: <Widget>[
GestureDetector(
child: Container(
child: Text('重新输入'),
),
onTap: () {
pwd.clear();
//关闭弹窗
Navigator.of(context).pop();
},
),
],
);
},
);
}
}
复制代码
案例2 Table 页
先看效果图
- 1.
TabBar上半部分使用的是AppBar+TabBar,详细代码如下:
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('TableDemo'),
bottom: TabBar(
//可以滑动
isScrollable: true,
//边距
labelPadding: EdgeInsets.only(right: 0),
//颜色
labelColor: Colors.orangeAccent,
//样式 选中的
labelStyle: TextStyle(fontSize: 18),
//点击事件
onTap: (index) {
},
//未选中的颜色
unselectedLabelColor: Colors.pink,
//未选中样式
unselectedLabelStyle: TextStyle(fontSize: 14),
//指示器的宽度
indicatorSize: TabBarIndicatorSize.tab,
//指示器颜色
indicatorColor: Colors.amber,
//指示器高度
indicatorWeight: 2,
tabs: <Widget>[
Container(
width: 100,
height: 40,
child: Center(
child: Text('MODEL 1'),
),
),
Container(
width: 100,
height: 40,
child: Center(
child: Text('MODEL 2'),
),
),
Container(
width: 100,
height: 40,
child: Center(
child: Text('MODEL 3'),
),
),
],
),
),
}
复制代码
- 2.
PageView
用法类似于 ListView
PageView.builder
PageView.custom
PageView.builder(
itemBuilder: (BuildContext context, int index) {
return Container(
child: Center(
child: Text('PAGE ${index}'),
),
);
},
itemCount: 5,
onPageChanged: (indext) {},
),
复制代码
方便起见,我们这里使用的是 children
Widget _pageView() {
return PageView(
children: <Widget>[
Container(
color: Colors.blue,
alignment: AlignmentDirectional.center,
child: Text('PAGE 1'),
),
Container(
color: Colors.deepPurpleAccent,
alignment: AlignmentDirectional.center,
child: Text('PAGE 2'),
),
Container(
color: Colors.lightGreen,
alignment: AlignmentDirectional.center,
child: Text('PAGE 3'),
),
],
onPageChanged: (index) {
},
);
}
复制代码
- 3.
TabBar和PageView联动
PageView 的控制使用的是 PageController
1).初始化
PageController pageController = new PageController();
2).在 PageView 中声明
PageView(
...省略...
controller: pageController,
...省略...
)
复制代码
3).在 TabBar 中使用
TabBar(
...省略...
//点击事件
onTap: (index) {
pageController.jumpToPage(index);
},
...省略...
)
复制代码
TabBar 的控制使用的是 TabController
需要注意
我们的父级 Widget 必须是继承 StatefulWidget ;需要实现 SingleTickerProviderStateMixin
1).初始化
class TableDemo extends StatefulWidget {
@override
_TableDemoState createState() => _TableDemoState();
}
class _TableDemoState extends State<TableDemo>
with SingleTickerProviderStateMixin {
TabController _tabController;
@override
void initState() {
super.initState();
///初始化时创建控制器
///通过 with SingleTickerProviderStateMixin 实现动画效果。
_tabController = new TabController(vsync: this, length: 3);
}
@override
void dispose() {
///页面销毁时,销毁控制器
_tabController.dispose();
super.dispose();
}
}
复制代码
2).在 TabBar 中声明
TabBar(
...省略...
controller: _tabController,
...省略...
)
复制代码
3).在 PageView 中使用
PageView(
...省略...
onPageChanged: (index) {
_tabController.animateTo(index);
},
...省略...
)
复制代码
- 4.扩展 底部Table 可以使用
Scaffold的bottomNavigationBar属性
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('TableDemo'),
),
body: _pageView(),
bottomNavigationBar: Container(
height: 40,
child: Center(
child: _tabView(),
),
),
);
}
复制代码
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- ABP开发框架前后端开发系列---(14)基于Winform的ABP快速开发框架
- Java开发人员的Flex开发
- Java开发人员的Flex开发
- 行为驱动开发让开发做正确事
- 让开发者专注于应用开发,OpenCenter 3.0 开发者预览版发布
- 让开发者专注于应用开发,OpenCenter 3.0 开发者预览版发布
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
精益思想
(美)詹姆斯 P.沃麦克(James P.Womack)、(英)丹尼尔 T.琼斯(Daniel T.Jones) / 沈希瑾、张文杰、李京生 / 机械工业出版社 / 2011-4 / 48.00元
打算尝试精益的人,该怎么做? 已经实行精益的人,下一步怎么办? 本书包含了最新的精益理论、方法和工具,一一解答上述问题。 这是目前关于流程再造最好的书,也是最好读的。——《高业周刊》 本书中文简体字版由FreePress通过AiWA授权机械工业出版社在中国大陆独家出版发行。未经出版者书面许可,不得以任何方式抄袭、复制或节录本书中的任何部分。 《精益思想》于1996年秋......一起来看看 《精益思想》 这本书的介绍吧!