增加好友列表页

master
zhangmeng1334717033 2020-06-08 18:23:58 +08:00
parent 5b17f8f691
commit 468bead526
5 changed files with 315 additions and 0 deletions

View File

@ -0,0 +1,26 @@
import 'package:flutter/material.dart';
//
class ContactDataPage {
//
String seationKey;
//
String name;
//
String avatarUrl;
ContactDataPage({@required this.seationKey, this.name, this.avatarUrl});
}
List<ContactDataPage> contactData = [
new ContactDataPage(seationKey: 'A',name: 'A张三',avatarUrl: 'http://blogimages.jspang.com/blogtouxiang1.jpg'),
new ContactDataPage(seationKey: 'B',name: 'B张三',avatarUrl: 'http://blogimages.jspang.com/blogtouxiang1.jpg'),
new ContactDataPage(seationKey: 'C',name: 'C张三',avatarUrl: 'http://blogimages.jspang.com/blogtouxiang1.jpg'),
new ContactDataPage(seationKey: 'D',name: 'D张三',avatarUrl: 'http://blogimages.jspang.com/blogtouxiang1.jpg'),
new ContactDataPage(seationKey: 'E',name: 'E张三',avatarUrl: 'http://blogimages.jspang.com/blogtouxiang1.jpg'),
new ContactDataPage(seationKey: 'F',name: 'F张三',avatarUrl: 'http://blogimages.jspang.com/blogtouxiang1.jpg'),
new ContactDataPage(seationKey: 'G',name: 'G张三',avatarUrl: 'http://blogimages.jspang.com/blogtouxiang1.jpg'),
];

View File

@ -0,0 +1,19 @@
import 'package:flutter/material.dart';
import 'package:chatting/contact_item_page.dart';
//
class ContactHeaderPage extends StatelessWidget {
Color WechatThemeColor = Colors.white;
@override
Widget build(BuildContext context) {
return Column(
children: <Widget>[
ContactItemPage(titleName: '新的朋友',imageName: '',),
ContactItemPage(titleName: '群聊',imageName: '',),
ContactItemPage(titleName: '标签',imageName: '',),
ContactItemPage(titleName: '公众号',imageName: '',)
],
);
}
}

View File

@ -0,0 +1,60 @@
import 'package:chatting/contact_data_page.dart';
import 'package:flutter/material.dart';
import 'package:chatting/chatting_data_page.dart';
//
class ContactItemPage extends StatelessWidget {
//
final ContactDataPage item;
//
final String titleName;
//
final String imageName;
//
ContactItemPage({this.item, this.titleName, this.imageName});
@override
Widget build(BuildContext context) {
//
return Container(
decoration: BoxDecoration(
color: Colors.white,
//
border: Border(
bottom: BorderSide(width: 0.5,color: Color(0xFFd9d9d9))
),
),
height: 52.0,
child: FlatButton(
onPressed: (){},
child: Row(
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
//
//imageName !=null ? Image.network( item.avatarUrl):Image.asset(''),
Image.network('http://blogimages.jspang.com/blogtouxiang1.jpg'),
//
Container(
margin: const EdgeInsets.only(left: 12.0),
child: Text(
//titleName == null ? titleName:"暂时",
"海阔天空",
style: TextStyle(
fontSize: 18.0,
color: Color(0xFF353535)
),
),
)
],
),
),
);
}
}

101
lib/contact_list_page.dart Normal file
View File

@ -0,0 +1,101 @@
import 'package:flutter/material.dart';
import 'package:chatting/contact_data_page.dart';
import 'package:chatting/contact_header_page.dart';
import 'package:chatting/contact_item_page.dart';
import 'package:chatting/contact_sider_list_page.dart';
//
class ContactListPage extends StatefulWidget {
@override
_ContactListPageState createState() => _ContactListPageState();
}
class _ContactListPageState extends State<ContactListPage> {
Color WechatThemeColor = Colors.white;
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("通讯录"),
centerTitle: true,
leading: GestureDetector(
child: Container(
margin: EdgeInsets.only(left: 15, top: 15),
child: Text(
'更多',
style: TextStyle(
fontSize: 20
),
),
),
onTap: () {
Navigator.of(context)
.push(MaterialPageRoute(builder: (BuildContext context) {
return null;
}));
},
),
//
actions: <Widget>[
GestureDetector(
child: Container(
margin: EdgeInsets.only(right: 15),
child: Image(
color: Colors.white,
image: AssetImage('assets/images/ic_friends_add.png'),
width: 28,
height: 25,
),
),
onTap: () {
Navigator.of(context)
.push(MaterialPageRoute(builder: (BuildContext context) {
return null;
}));
},
)
],//
),
//
body: ContactSiderListPage(
//
items: contactData,
//
headerBuilder: (BuildContext context,int index){
return Container(
//
child: ContactHeaderPage(),
);
},
//
itemBuilder: (BuildContext context,int index){
return Container(
color: Colors.white,
alignment: Alignment.centerLeft,
child: ContactItemPage(),
);
},
//
sectionBuilder: (BuildContext context,int index){
return Container(
height: 32.0,
padding: const EdgeInsets.only(left: 14.0),
color: Colors.grey[300],
alignment: Alignment.centerLeft,
//
child: Text(
contactData[index].seationKey,
style: TextStyle(
fontSize: 14.0,
color: Color(0xff909090)
),
),
);
},
),
);
}
}

View File

@ -0,0 +1,109 @@
import 'package:chatting/contact_data_page.dart';
import 'package:flutter/material.dart';
//
//
class ContactSiderListPage extends StatefulWidget {
//
final List<ContactDataPage> items;
//
final IndexedWidgetBuilder headerBuilder;
//
final IndexedWidgetBuilder itemBuilder;
//
final IndexedWidgetBuilder sectionBuilder;
//
const ContactSiderListPage(
{Key key,
@required this.items,
this.headerBuilder,
@required this.itemBuilder,
@required this.sectionBuilder})
: super(key: key);
@override
_ContactSiderListPageState createState() => _ContactSiderListPageState();
}
class _ContactSiderListPageState extends State<ContactSiderListPage> {
//
final ScrollController _scrollController = new ScrollController();
bool _onNotification(ScrollNotification notification) {
return true;
}
//,
_isShowHeaderView(index){
if(index == 0 && widget.headerBuilder !=null){
return Offstage(
offstage: false,
child: widget.headerBuilder(context,index),
);
}
}
//
bool _shouldShowHeader(int position){
if(position<= 0 ){
return false;
}
if(position != 0 && widget.items[position].seationKey !=widget.items[position-1].seationKey){
return false;
}
return true;
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: Stack(
children: <Widget>[
//
NotificationListener(
onNotification: _onNotification,
child: ListView.builder(
//
controller: _scrollController,
//
physics: const AlwaysScrollableScrollPhysics(),
//
itemCount: widget.items.length,
itemBuilder: (BuildContext context,int index){
//
return Container(
alignment: Alignment.centerLeft,
child: Column(
children: <Widget>[
//
_isShowHeaderView(index),
//offstage
Offstage(
offstage: _shouldShowHeader(index),
child: widget.sectionBuilder(context,index),
),
//
Column(
children: <Widget>[
widget.itemBuilder(context,index)
],
)
],
),
);
},
),
)
],
),
);
}
}