页面
- Row水平布局
- padding内边距
- Icon图标控件
- IconButton可交互的图标控件
- PopupMenuItem菜单项的单个item
- Drawer抽屉组件
- CircleAvatar圆形头像
- RaisedButton突出按钮组件
- ListTile条目组件
- BottomNavigationBar底部导航条
- FloatingActionButton悬停按钮组件
import 'dart:io';
import 'package:douban_flutter/chat/chat_page.dart';
import 'package:douban_flutter/find/find_page.dart';
import 'package:douban_flutter/friends/friends_page.dart';
import 'package:douban_flutter/me/me_page.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
class AppPage extends StatefulWidget {
@override
_SplashWidgetState createState() {
return _SplashWidgetState();
}
}
class _SplashWidgetState extends State<AppPage> {
int _selectIndex = 0;
_popupMenuItem(String title, {String imagePath, IconData icon}) {
return PopupMenuItem(
child: Row(
children: <Widget>[
imagePath != null
? Image.asset(
imagePath,
width: 32.0,
height: 32.0,
)
: SizedBox(
width: 32.0,
height: 32.0,
child: Icon(icon, color: Colors.white),
),
Container(
padding: const EdgeInsets.only(left: 20.0),
child: Text(
title,
style: TextStyle(color: Colors.white),
),
)
],
),
);
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("首页"),
brightness: Brightness.light,
actions: <Widget>[
IconButton(icon: Icon(Icons.search), tooltip: "搜索", onPressed: () {}),
IconButton(
icon: Icon(Icons.add),
tooltip: "添加",
onPressed: () {
showMenu(
context: context,
color: Colors.lightBlue,
position: RelativeRect.fromLTRB(500.0, 70.0, 0.0, 0.0),
items: <PopupMenuEntry>[
_popupMenuItem("发起群聊", icon: Icons.group),
_popupMenuItem("添加好友", icon: Icons.person_add),
_popupMenuItem("反馈和帮助", icon: Icons.email)
]);
},
)
],
),
drawer: Drawer(
child: ListView(
padding: new EdgeInsets.all(0.0),
children: <Widget>[
UserAccountsDrawerHeader(
accountName: Text("DoctorWei"),
accountEmail: Text("13482724747@qq.com"),
currentAccountPicture: CircleAvatar(
backgroundImage: AssetImage("assets/images/home.png"),
),
onDetailsPressed: () {
},
otherAccountsPictures: <Widget>[
Container(
child: Image.asset("assets/images/code.png"),
)
],
),
ListTile(
leading: CircleAvatar(
child: Icon(Icons.color_lens),
),
title: Text("个性装扮"),
),
ListTile(
leading: CircleAvatar(
child: Icon(Icons.photo),
),
title: Text("我的相册"),
),
ListTile(
leading: CircleAvatar(
child: Icon(Icons.wifi),
),
title: Text("免流量特权"),
)
],
),
),
bottomNavigationBar: BottomNavigationBar(
items: <BottomNavigationBarItem>[
BottomNavigationBarItem(
icon: Icon(Icons.chat),
title: Text("信息"),
),
BottomNavigationBarItem(
icon: Icon(Icons.contacts), title: Text("通讯")),
BottomNavigationBarItem(
icon: Icon(Icons.favorite), title: Text("发现")),
BottomNavigationBarItem(
icon: Icon(Icons.account_circle), title: Text("我的")),
],
currentIndex: _selectIndex,
selectedItemColor:Colors.yellow ,
unselectedItemColor: Colors.grey,
onTap: _onItemTapped,
),
body: currentPage(),
floatingActionButton: Builder(builder: (BuildContext context) {
return new FloatingActionButton(
child: const Icon(Icons.add),
tooltip: "提示信息",
foregroundColor: Colors.white,
backgroundColor: Colors.yellow,
elevation: 7.0,
highlightElevation: 14.0,
onPressed: () {
Scaffold.of(context).showSnackBar(SnackBar(content: Text("提示信息")));
},
);
}),
);
}
void _onItemTapped(int index) {
setState(() {
_selectIndex = index;
});
}
currentPage() {
switch (_selectIndex) {
case 0:
return ChatPage();
case 1:
return FriendsPage();
case 2:
return FindPage();
case 3:
return MePage(context);
}
}
}