Commit fc9ce87f authored by 杜欣's avatar 杜欣

add message

parent d58738cd
......@@ -14,6 +14,7 @@ class MessageModel extends BaseModel {
LiveData<UnreadMessageEntity> likeUnreadMessageLive = new LiveData();
LiveData<UnreadMessageEntity> followUnreadMessageLive = new LiveData();
LiveData<LatestMessageEntity> latestMessageLive = new LiveData();
MyMessageEntity myMessageList;
MessageModel(this.page, this.count);
......@@ -25,12 +26,18 @@ class MessageModel extends BaseModel {
}
getMyMessage(page, count){
getMyMessage(page, count, [callback]){
MessageRepository.getInstance()
.getMyMessage(page, count)
.listen((value) {
if (value != null) {
myMessageLive.notifyView(value);
if(page > 1) {
myMessageList.data?.addAll(value.data);
} else {
myMessageList = value;
}
if(callback != null) callback(value);
myMessageLive.notifyView(myMessageList);
}
}).onError((error) {
Toast.show(error, "${error.toString()}");
......
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:gmalpha_flutter/NewMessageModel/page/MessageModel.dart';
import 'package:gmalpha_flutter/NewMessageModel/page/common.dart';
import 'package:gmalpha_flutter/NewMessageModel/service/remote/entity/LatestMessageEntity.dart';
import 'package:gmalpha_flutter/NewMessageModel/service/remote/entity/MyMessageEntity.dart';
import 'package:gmalpha_flutter/NewMessageModel/service/remote/entity/UnreadMessageEntity.dart';
import 'package:gmalpha_flutter/commonModel/ui/ALColors.dart';
import 'common.dart';
//刷新状态枚举
enum LoadingStatus {
//正在加载中
STATUS_LOADING,
//数据加载完毕
STATUS_COMPLETED,
//空闲状态
STATUS_IDEL
}
import 'package:pull_to_refresh/pull_to_refresh.dart';
class MessagePage extends StatefulWidget {
MessageModel _messageModel;
......@@ -29,70 +21,35 @@ class MessagePage extends StatefulWidget {
class _MessagePageState extends State<MessagePage> {
MessageModel _messageModel;
//限制一滑动到最下方就刷新,在刷新数据 及 刷新完之后改变状态
static var loadStatus = LoadingStatus.STATUS_IDEL;
static int pageCount = 10;
//定义整个页面的数据源 list
static List list = new List();
//定义加载中默认文字
String loadText = "加载中...";
//定义 ListView 的监听, ScrollController ScrollController 能够添加对ListView的滑动监听
ScrollController _scrollController = new ScrollController();
Widget _pad(Widget widget, {l, t, r, b}) {
return new Padding(
padding:
EdgeInsets.fromLTRB(l ??= 0.0, t ??= 0.0, r ??= 0.0, b ??= 0.0),
child: widget);
}
// 加载中的布局
Widget _loadingView() {
var loadingTS = TextStyle(color: ALColors.Color999999, fontSize: 16);
// var loadingText=new Opacity(opacity: loadStatus==LoadingStatus.STATUS_LOADING?1.0:0,child:_pad(Text(loadText,style: loadingTS),l:20.0));
var loadingText = _pad(Text(loadText, style: loadingTS), l: 20.0);
// var loadingIndicator=new Opacity(opacity: loadStatus==LoadingStatus.STATUS_LOADING?1.0:0,child:SizedBox(child: CircularProgressIndicator(valueColor: AlwaysStoppedAnimation(Colors.blue)),width: 20.0,height: 20.0,));
var loadingIndicator = new Visibility(
visible: loadStatus == LoadingStatus.STATUS_LOADING ? true : false,
child: SizedBox(
child: CircularProgressIndicator(
valueColor: AlwaysStoppedAnimation(ALColors.Color999999),
strokeWidth: 2.0,
),
width: 16.0,
height: 16.0,
));
return _pad(
Row(
children: <Widget>[loadingIndicator, loadingText],
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.center,
),
t: 20.0,
b: 20.0);
}
static int pageNo = 2;
RefreshController _refreshController = RefreshController(initialRefresh: false);
_MessagePageState(this._messageModel);
@override
void initState() {
super.initState();
_messageModel.init(context);
//在初始化状态的方法里 设置ListView的监听
_scrollController.addListener(() {
//判断 当滑动到最底部的时候,去加载更多的数据
if (_scrollController.position.pixels ==
_scrollController.position.maxScrollExtent) {
//此时加载下一页数据
_getMoreData();
}
void _onLoading() async {
await _messageModel.getMyMessage(pageNo, pageCount, (data) {
if(data.data?.length == 0) {
_refreshController.loadNoData();
} else {
pageNo++;
_refreshController.loadComplete();
}
});
}
Widget _pad(Widget widget, {l, t, r, b}) {
return new Padding(
padding:
EdgeInsets.fromLTRB(l ??= 0.0, t ??= 0.0, r ??= 0.0, b ??= 0.0),
child: widget);
}
@override
Widget build(BuildContext context) {
ScreenUtil.instance = ScreenUtil(width: 375, height: 667)..init(context);
......@@ -101,50 +58,86 @@ class _MessagePageState extends State<MessagePage> {
centerTitle: false,
title: messageTitle('消息'),
elevation: 0,
backgroundColor: ALColors.ColorFFFFFF,
),
body: SingleChildScrollView(
child: Center(
child: Column(
children: <Widget>[
topCard(),
Container(
color: ALColors.ColorFFFFFF,
child: StreamBuilder<MyMessageEntity>(
stream: _messageModel.myMessageLive.stream,
initialData: _messageModel.myMessageLive.data ,
builder: (BuildContext context, data){
var dataList = data.data?.data;
if(dataList == null) {
return Container(
color: ALColors.ColorFFFFFF,
height: ScreenUtil().setHeight(430),
child: Center(child: Text('暂无相关内容', style: TextStyle(color: ALColors.Color999999, fontSize: ScreenUtil().setSp(16))))
);
}
print('++++++====================${dataList.length}=================');
return ListView.builder(
itemCount: dataList.length + 1,
itemExtent: 50,
itemBuilder: (BuildContext context, int index) {
print('============${index}++++++++${dataList.length}=============');
if (index == dataList.length) {
return _loadingView();
} else {
return messageList(dataList[index]);
}
},
controller: _scrollController,
);
},
)
body: SmartRefresher(
enablePullDown: false,
enablePullUp: true,
footer: CustomFooter(
builder: (BuildContext context, LoadStatus mode){
String body;
var loadingTS = TextStyle(color: ALColors.Color999999, fontSize: ScreenUtil().setSp(16));
if(mode == LoadStatus.idle) {
body = '上拉加载';
} else if(mode == LoadStatus.loading || mode == LoadStatus.canLoading) {
body = '加载中...';
} else if(mode == LoadStatus.failed) {
body = '加载失败!点击重试!';
} else {
body = '暂时无更多数据';
}
var loadingIndicator = Visibility(
visible: (mode == LoadStatus.loading || mode == LoadStatus.canLoading) ? true : false,
child: SizedBox(
child: CircularProgressIndicator(
valueColor: AlwaysStoppedAnimation(ALColors.Color999999),
strokeWidth: 2
),
width: ScreenUtil().setWidth(16),
height: ScreenUtil().setHeight(16)
)
]
),
);
return _pad(
Row(
children: <Widget>[loadingIndicator, _pad(Text(body, style: loadingTS), l: ScreenUtil().setWidth(10))],
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.center,
),
t: 20.0,
b: 20.0
);
},
),
controller: _refreshController,
onLoading: _onLoading,
child: Container(
color: ALColors.ColorFFFFFF,
child: SingleChildScrollView(
child: Column(
children: <Widget>[
topCard(),
getListView()
]
)
)
)
)
);
}
getListView() {
return StreamBuilder<MyMessageEntity>(
stream: _messageModel.myMessageLive.stream,
initialData: _messageModel.myMessageLive.data,
builder: (BuildContext context, data) {
var dataList = data?.data?.data;
if(dataList == null) {
return noData();
}
return ListView.builder(
shrinkWrap: true,
physics: NeverScrollableScrollPhysics(),
itemBuilder: (c, i) => messageList(dataList[i]),
itemCount: dataList.length,
);
}
);
}
noData() {
return Container();
}
topCard(){
return Container(
color: ALColors.ColorFFFFFF,
......@@ -154,27 +147,42 @@ class _MessagePageState extends State<MessagePage> {
stream: _messageModel.latestMessageLive.stream,
initialData: _messageModel.latestMessageLive.data ,
builder: (BuildContext context, data){
if(data?.data == null) {
return noData();
}
var content = data.data?.data?.content ?? '没有新的通知';
print('-====================${data.data.data.content}=================');
return messageTop('images/message_noti.png', '通知', content == '' ? '没有新的通知' : content, 0);
return GestureDetector(
onTap: (){},
child: messageTop('images/message_noti.png', '通知', content == '' ? '没有新的通知' : content, 0)
);
},
),
StreamBuilder<UnreadMessageEntity>(
stream: _messageModel.likeUnreadMessageLive.stream,
initialData: _messageModel.likeUnreadMessageLive.data ,
builder: (BuildContext context, data){
if(data?.data == null) {
return noData();
}
var voteCount = data.data?.data?.voteCount ?? 0;
print('-====================${voteCount}=================');
return messageTop('images/message_like.png', 'Like!', voteCount == 0 ? '还没有人给你Like!哦~' : '有$voteCount个人Like!了你', voteCount);
return GestureDetector(
onTap: (){},
child: messageTop('images/message_like.png', 'Like!', voteCount == 0 ? '还没有人给你Like!哦~' : '有$voteCount个人Like!了你', voteCount)
);
},
),
StreamBuilder<UnreadMessageEntity>(
stream: _messageModel.followUnreadMessageLive.stream,
initialData: _messageModel.followUnreadMessageLive.data ,
builder: (BuildContext context, data){
if(data?.data == null) {
return noData();
}
var count = data.data?.data?.count ?? 0;
print('-====================${count}=================');
return messageTop('images/message_att.png', '关注', count == 0 ? '还没有人给你关注哦~' : '有$count个人关注了你', count);
return GestureDetector(
onTap: (){},
child: messageTop('images/message_att.png', '关注', count == 0 ? '还没有人给你关注哦~' : '有$count个人关注了你', count)
);
},
),
Container(
......@@ -196,34 +204,11 @@ class _MessagePageState extends State<MessagePage> {
);
}
//获取完更多数据,然后给控件setState 让控件进行数据更新
Future _getMoreData() async {
if (loadStatus == LoadingStatus.STATUS_IDEL)
//先设置状态,防止往下拉就直接加载数据
setState(() {
loadStatus = LoadingStatus.STATUS_LOADING;
});
List moreList = [1,2];
await _messageModel.getMyMessage(2, 2);
//准备完数据后,在设置状态
setState(() {
if (moreList.length > 0) {
list.addAll(moreList);
loadStatus = LoadingStatus.STATUS_IDEL;
loadText = '加载中...';
} else {
//加载完毕
loadText = '暂时无更多数据';
loadStatus = LoadingStatus.STATUS_COMPLETED;
}
});
}
@override
void dispose() {
super.dispose();
_scrollController.dispose();
_refreshController.dispose();
pageNo = 2;
}
}
\ No newline at end of file
......@@ -151,21 +151,21 @@ messageList(list) {
)
],
),
Text(
list.content,
style: TextStyle(
color: ALColors.Color323232,
fontSize: ScreenUtil().setSp(13)
Container(
width: ScreenUtil().setWidth(210),
child: Text(
list.content,
style: TextStyle(
color: ALColors.Color323232,
fontSize: ScreenUtil().setSp(13)
),
maxLines: 1,
overflow: TextOverflow.ellipsis
),
maxLines: 1,
overflow: TextOverflow.ellipsis
),
Text(
// TimelineUtil.format(list.time,
// locTimeMillis: DateTime.now().millisecondsSinceEpoch,
// locale: 'zh',
// dayFormat: DayFormat.Full),
list.time.toString(),
dataFormat(list.time),
// list.time.toString(),
style: TextStyle(
color: Color(0xfff8e8e8e),
fontSize: ScreenUtil().setSp(10)
......@@ -185,3 +185,10 @@ messageList(list) {
)
);
}
dataFormat(timestamp) {
return TimelineUtil.format((timestamp * 1000).toInt(),
locTimeMillis: DateTime.now().millisecondsSinceEpoch,
locale: 'zh',
dayFormat: DayFormat.Full);
}
......@@ -45,12 +45,13 @@ class TestPage extends StatelessWidget {
}
testMessagePage(BuildContext context) {
return base(
context,
RouterCenterImpl()
.findNewMessageRouter()
?.getMessagePage(''),
"消息页面");
return base(context, () {
Navigator.push(
context,
new CustomRoute(RouterCenterImpl()
.findNewMessageRouter()
?.getMessagePage('')));
}, "消息页面");
}
testReportPage(BuildContext context) {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment