第一个知识点: 如何隐藏AppBar?
包一层宽高等于0的父容器就可以了。
return new Scaffold(
appBar: PreferredSize(
child: AppBar(
),
preferredSize: Size(0, 0)),
使用tabbarview时需要AppBar,该怎么办?
return DefaultTabController(length: myTabs.length,
child: Scaffold(
appBar:PreferredSize(
child: AppBar(bottom: TabBar(
indicatorColor: Colors.red,
tabs: myTabs,
),toolbarOpacity: 0.0,), //设置透明,隐藏导航栏
preferredSize: Size.fromHeight(50)), //设置标题栏的高度
body: TabBarView(children: myTabs.map((Tab tab){
return Center(child: Text(tab.text),);
}).toList(),),
));
第二个知识点: Column/Row容器里直接添加ListView会崩溃, 原因是Column测量高度时出了问题。
解决方法:在ListView外边包一层Expand,这样测量时就没问题了。
return new Column(mainAxisAlignment: MainAxisAlignment.start,
children: <Widget>[
...,
new Expanded(child: ListView.builder(itemCount: 100,
itemBuilder: (context, index) {
return ListTile(leading: new Icon(Icons.message),
title: Text("第$index条"));
},),)
],
);
},
第三个知识点: Flutter里的弹窗Dialog实际上是打开了一个新路由,是个特殊的Navigator.push, 所以在Flutter里dialog的弹窗/关闭最终都是指向Navigator.push和Navigator.pop方法。 showDialog在dialog.dart中定义,可以直接调用。
showDialog(context: context,
builder: (_) => AlertDialog(title: Text("提示"),
content: Text("点击了$index"),
actions: <Widget>[
FlatButton(child: Text('确定'),
onPressed: () {
print("点击了确定");
Navigator.of(context).pop(); //关闭dialog
_pageChange(index);
},)
],));
第4个知识点: Flutter实现安卓的ViewPager效果,可以用PageView。 Column包含多个控件, 其中一个是PageView。
第5个知识点: Column、PageView、ListView一起用; 实现标题栏不动, 内容区域可以横向滑动的效果。