Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
G
gmalpha_flutter
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
mobile
gmalpha_flutter
Commits
fc9ce87f
Commit
fc9ce87f
authored
Oct 16, 2019
by
杜欣
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
add message
parent
d58738cd
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
138 additions
and
137 deletions
+138
-137
MessageModel.dart
lib/NewMessageModel/page/MessageModel.dart
+9
-2
MessagePage.dart
lib/NewMessageModel/page/MessagePage.dart
+111
-125
common.dart
lib/NewMessageModel/page/common.dart
+13
-6
TestPage.dart
lib/TestPage.dart
+5
-4
No files found.
lib/NewMessageModel/page/MessageModel.dart
View file @
fc9ce87f
...
@@ -14,6 +14,7 @@ class MessageModel extends BaseModel {
...
@@ -14,6 +14,7 @@ class MessageModel extends BaseModel {
LiveData
<
UnreadMessageEntity
>
likeUnreadMessageLive
=
new
LiveData
();
LiveData
<
UnreadMessageEntity
>
likeUnreadMessageLive
=
new
LiveData
();
LiveData
<
UnreadMessageEntity
>
followUnreadMessageLive
=
new
LiveData
();
LiveData
<
UnreadMessageEntity
>
followUnreadMessageLive
=
new
LiveData
();
LiveData
<
LatestMessageEntity
>
latestMessageLive
=
new
LiveData
();
LiveData
<
LatestMessageEntity
>
latestMessageLive
=
new
LiveData
();
MyMessageEntity
myMessageList
;
MessageModel
(
this
.
page
,
this
.
count
);
MessageModel
(
this
.
page
,
this
.
count
);
...
@@ -25,12 +26,18 @@ class MessageModel extends BaseModel {
...
@@ -25,12 +26,18 @@ class MessageModel extends BaseModel {
}
}
getMyMessage
(
page
,
count
){
getMyMessage
(
page
,
count
,
[
callback
]
){
MessageRepository
.
getInstance
()
MessageRepository
.
getInstance
()
.
getMyMessage
(
page
,
count
)
.
getMyMessage
(
page
,
count
)
.
listen
((
value
)
{
.
listen
((
value
)
{
if
(
value
!=
null
)
{
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
)
{
}).
onError
((
error
)
{
Toast
.
show
(
error
,
"
${error.toString()}
"
);
Toast
.
show
(
error
,
"
${error.toString()}
"
);
...
...
lib/NewMessageModel/page/MessagePage.dart
View file @
fc9ce87f
import
'package:flutter/cupertino.dart'
;
import
'package:flutter/material.dart'
;
import
'package:flutter/material.dart'
;
import
'package:flutter_screenutil/flutter_screenutil.dart'
;
import
'package:flutter_screenutil/flutter_screenutil.dart'
;
import
'package:gmalpha_flutter/NewMessageModel/page/MessageModel.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/LatestMessageEntity.dart'
;
import
'package:gmalpha_flutter/NewMessageModel/service/remote/entity/MyMessageEntity.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/NewMessageModel/service/remote/entity/UnreadMessageEntity.dart'
;
import
'package:gmalpha_flutter/commonModel/ui/ALColors.dart'
;
import
'package:gmalpha_flutter/commonModel/ui/ALColors.dart'
;
import
'common.dart'
;
import
'package:pull_to_refresh/pull_to_refresh.dart'
;
//刷新状态枚举
enum
LoadingStatus
{
//正在加载中
STATUS_LOADING
,
//数据加载完毕
STATUS_COMPLETED
,
//空闲状态
STATUS_IDEL
}
class
MessagePage
extends
StatefulWidget
{
class
MessagePage
extends
StatefulWidget
{
MessageModel
_messageModel
;
MessageModel
_messageModel
;
...
@@ -29,19 +21,27 @@ class MessagePage extends StatefulWidget {
...
@@ -29,19 +21,27 @@ class MessagePage extends StatefulWidget {
class
_MessagePageState
extends
State
<
MessagePage
>
{
class
_MessagePageState
extends
State
<
MessagePage
>
{
MessageModel
_messageModel
;
MessageModel
_messageModel
;
//限制一滑动到最下方就刷新,在刷新数据 及 刷新完之后改变状态
static
var
loadStatus
=
LoadingStatus
.
STATUS_IDEL
;
static
int
pageCount
=
10
;
static
int
pageCount
=
10
;
static
int
pageNo
=
2
;
RefreshController
_refreshController
=
RefreshController
(
initialRefresh:
false
);
//定义整个页面的数据源 list
_MessagePageState
(
this
.
_messageModel
);
static
List
list
=
new
List
();
@override
void
initState
()
{
//定义加载中默认文字
super
.
initState
();
String
loadText
=
"加载中..."
;
_messageModel
.
init
(
context
);
}
//定义 ListView 的监听, ScrollController ScrollController 能够添加对ListView的滑动监听
void
_onLoading
()
async
{
ScrollController
_scrollController
=
new
ScrollController
();
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
})
{
Widget
_pad
(
Widget
widget
,
{
l
,
t
,
r
,
b
})
{
return
new
Padding
(
return
new
Padding
(
...
@@ -50,101 +50,94 @@ class _MessagePageState extends State<MessagePage> {
...
@@ -50,101 +50,94 @@ class _MessagePageState extends State<MessagePage> {
child:
widget
);
child:
widget
);
}
}
// 加载中的布局
@override
Widget
_loadingView
()
{
Widget
build
(
BuildContext
context
)
{
var
loadingTS
=
TextStyle
(
color:
ALColors
.
Color999999
,
fontSize:
16
);
ScreenUtil
.
instance
=
ScreenUtil
(
width:
375
,
height:
667
)..
init
(
context
);
// var loadingText=new Opacity(opacity: loadStatus==LoadingStatus.STATUS_LOADING?1.0:0,child:_pad(Text(loadText,style: loadingTS),l:20.0));
return
Scaffold
(
var
loadingText
=
_pad
(
Text
(
loadText
,
style:
loadingTS
),
l:
20.0
);
appBar:
AppBar
(
// 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,));
centerTitle:
false
,
var
loadingIndicator
=
new
Visibility
(
title:
messageTitle
(
'消息'
),
visible:
loadStatus
==
LoadingStatus
.
STATUS_LOADING
?
true
:
false
,
elevation:
0
,
backgroundColor:
ALColors
.
ColorFFFFFF
,
),
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:
SizedBox
(
child:
CircularProgressIndicator
(
child:
CircularProgressIndicator
(
valueColor:
AlwaysStoppedAnimation
(
ALColors
.
Color999999
),
valueColor:
AlwaysStoppedAnimation
(
ALColors
.
Color999999
),
strokeWidth:
2.0
,
strokeWidth:
2
),
),
width:
16.0
,
width:
ScreenUtil
().
setWidth
(
16
)
,
height:
16.0
,
height:
ScreenUtil
().
setHeight
(
16
)
));
)
);
return
_pad
(
return
_pad
(
Row
(
Row
(
children:
<
Widget
>[
loadingIndicator
,
loadingText
],
children:
<
Widget
>[
loadingIndicator
,
_pad
(
Text
(
body
,
style:
loadingTS
),
l:
ScreenUtil
().
setWidth
(
10
))
],
crossAxisAlignment:
CrossAxisAlignment
.
center
,
crossAxisAlignment:
CrossAxisAlignment
.
center
,
mainAxisAlignment:
MainAxisAlignment
.
center
,
mainAxisAlignment:
MainAxisAlignment
.
center
,
),
),
t:
20.0
,
t:
20.0
,
b:
20.0
);
b:
20.0
}
);
},
_MessagePageState
(
this
.
_messageModel
);
@override
void
initState
()
{
super
.
initState
();
_messageModel
.
init
(
context
);
//在初始化状态的方法里 设置ListView的监听
_scrollController
.
addListener
(()
{
//判断 当滑动到最底部的时候,去加载更多的数据
if
(
_scrollController
.
position
.
pixels
==
_scrollController
.
position
.
maxScrollExtent
)
{
//此时加载下一页数据
_getMoreData
();
}
});
}
@override
Widget
build
(
BuildContext
context
)
{
ScreenUtil
.
instance
=
ScreenUtil
(
width:
375
,
height:
667
)..
init
(
context
);
return
Scaffold
(
appBar:
AppBar
(
centerTitle:
false
,
title:
messageTitle
(
'消息'
),
elevation:
0
,
),
),
body:
SingleChildScrollView
(
controller:
_refreshController
,
child:
Center
(
onLoading:
_onLoading
,
child:
Container
(
color:
ALColors
.
ColorFFFFFF
,
child:
SingleChildScrollView
(
child:
Column
(
child:
Column
(
children:
<
Widget
>[
children:
<
Widget
>[
topCard
(),
topCard
(),
Container
(
getListView
()
color:
ALColors
.
ColorFFFFFF
,
]
child:
StreamBuilder
<
MyMessageEntity
>(
)
)
)
)
);
}
getListView
()
{
return
StreamBuilder
<
MyMessageEntity
>(
stream:
_messageModel
.
myMessageLive
.
stream
,
stream:
_messageModel
.
myMessageLive
.
stream
,
initialData:
_messageModel
.
myMessageLive
.
data
,
initialData:
_messageModel
.
myMessageLive
.
data
,
builder:
(
BuildContext
context
,
data
)
{
builder:
(
BuildContext
context
,
data
)
{
var
dataList
=
data
.
data
?.
data
;
var
dataList
=
data
?
.
data
?.
data
;
if
(
dataList
==
null
)
{
if
(
dataList
==
null
)
{
return
Container
(
return
noData
();
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
(
return
ListView
.
builder
(
itemCount:
dataList
.
length
+
1
,
shrinkWrap:
true
,
itemExtent:
50
,
physics:
NeverScrollableScrollPhysics
(),
itemBuilder:
(
BuildContext
context
,
int
index
)
{
itemBuilder:
(
c
,
i
)
=>
messageList
(
dataList
[
i
]),
print
(
'============
${index}
++++++++
${dataList.length}
============='
);
itemCount:
dataList
.
length
,
if
(
index
==
dataList
.
length
)
{
return
_loadingView
();
}
else
{
return
messageList
(
dataList
[
index
]);
}
},
controller:
_scrollController
,
);
);
},
}
)
)
]
),
),
)
);
);
}
}
noData
()
{
return
Container
();
}
topCard
(){
topCard
(){
return
Container
(
return
Container
(
color:
ALColors
.
ColorFFFFFF
,
color:
ALColors
.
ColorFFFFFF
,
...
@@ -154,27 +147,42 @@ class _MessagePageState extends State<MessagePage> {
...
@@ -154,27 +147,42 @@ class _MessagePageState extends State<MessagePage> {
stream:
_messageModel
.
latestMessageLive
.
stream
,
stream:
_messageModel
.
latestMessageLive
.
stream
,
initialData:
_messageModel
.
latestMessageLive
.
data
,
initialData:
_messageModel
.
latestMessageLive
.
data
,
builder:
(
BuildContext
context
,
data
){
builder:
(
BuildContext
context
,
data
){
if
(
data
?.
data
==
null
)
{
return
noData
();
}
var
content
=
data
.
data
?.
data
?.
content
??
'没有新的通知'
;
var
content
=
data
.
data
?.
data
?.
content
??
'没有新的通知'
;
print
(
'-====================
${data.data.data.content}
================='
);
return
GestureDetector
(
return
messageTop
(
'images/message_noti.png'
,
'通知'
,
content
==
''
?
'没有新的通知'
:
content
,
0
);
onTap:
(){},
child:
messageTop
(
'images/message_noti.png'
,
'通知'
,
content
==
''
?
'没有新的通知'
:
content
,
0
)
);
},
},
),
),
StreamBuilder
<
UnreadMessageEntity
>(
StreamBuilder
<
UnreadMessageEntity
>(
stream:
_messageModel
.
likeUnreadMessageLive
.
stream
,
stream:
_messageModel
.
likeUnreadMessageLive
.
stream
,
initialData:
_messageModel
.
likeUnreadMessageLive
.
data
,
initialData:
_messageModel
.
likeUnreadMessageLive
.
data
,
builder:
(
BuildContext
context
,
data
){
builder:
(
BuildContext
context
,
data
){
if
(
data
?.
data
==
null
)
{
return
noData
();
}
var
voteCount
=
data
.
data
?.
data
?.
voteCount
??
0
;
var
voteCount
=
data
.
data
?.
data
?.
voteCount
??
0
;
print
(
'-====================
${voteCount}
================='
);
return
GestureDetector
(
return
messageTop
(
'images/message_like.png'
,
'Like!'
,
voteCount
==
0
?
'还没有人给你Like!哦~'
:
'有
$voteCount
个人Like!了你'
,
voteCount
);
onTap:
(){},
child:
messageTop
(
'images/message_like.png'
,
'Like!'
,
voteCount
==
0
?
'还没有人给你Like!哦~'
:
'有
$voteCount
个人Like!了你'
,
voteCount
)
);
},
},
),
),
StreamBuilder
<
UnreadMessageEntity
>(
StreamBuilder
<
UnreadMessageEntity
>(
stream:
_messageModel
.
followUnreadMessageLive
.
stream
,
stream:
_messageModel
.
followUnreadMessageLive
.
stream
,
initialData:
_messageModel
.
followUnreadMessageLive
.
data
,
initialData:
_messageModel
.
followUnreadMessageLive
.
data
,
builder:
(
BuildContext
context
,
data
){
builder:
(
BuildContext
context
,
data
){
if
(
data
?.
data
==
null
)
{
return
noData
();
}
var
count
=
data
.
data
?.
data
?.
count
??
0
;
var
count
=
data
.
data
?.
data
?.
count
??
0
;
print
(
'-====================
${count}
================='
);
return
GestureDetector
(
return
messageTop
(
'images/message_att.png'
,
'关注'
,
count
==
0
?
'还没有人给你关注哦~'
:
'有
$count
个人关注了你'
,
count
);
onTap:
(){},
child:
messageTop
(
'images/message_att.png'
,
'关注'
,
count
==
0
?
'还没有人给你关注哦~'
:
'有
$count
个人关注了你'
,
count
)
);
},
},
),
),
Container
(
Container
(
...
@@ -196,34 +204,11 @@ class _MessagePageState extends State<MessagePage> {
...
@@ -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
@override
void
dispose
()
{
void
dispose
()
{
super
.
dispose
();
super
.
dispose
();
_scrollController
.
dispose
();
_refreshController
.
dispose
();
pageNo
=
2
;
}
}
}
}
\ No newline at end of file
lib/NewMessageModel/page/common.dart
View file @
fc9ce87f
...
@@ -151,7 +151,9 @@ messageList(list) {
...
@@ -151,7 +151,9 @@ messageList(list) {
)
)
],
],
),
),
Text
(
Container
(
width:
ScreenUtil
().
setWidth
(
210
),
child:
Text
(
list
.
content
,
list
.
content
,
style:
TextStyle
(
style:
TextStyle
(
color:
ALColors
.
Color323232
,
color:
ALColors
.
Color323232
,
...
@@ -160,12 +162,10 @@ messageList(list) {
...
@@ -160,12 +162,10 @@ messageList(list) {
maxLines:
1
,
maxLines:
1
,
overflow:
TextOverflow
.
ellipsis
overflow:
TextOverflow
.
ellipsis
),
),
),
Text
(
Text
(
// TimelineUtil.format(list.time,
dataFormat
(
list
.
time
),
// locTimeMillis: DateTime.now().millisecondsSinceEpoch,
// list.time.toString(),
// locale: 'zh',
// dayFormat: DayFormat.Full),
list
.
time
.
toString
(),
style:
TextStyle
(
style:
TextStyle
(
color:
Color
(
0xfff8e8e8e
),
color:
Color
(
0xfff8e8e8e
),
fontSize:
ScreenUtil
().
setSp
(
10
)
fontSize:
ScreenUtil
().
setSp
(
10
)
...
@@ -185,3 +185,10 @@ messageList(list) {
...
@@ -185,3 +185,10 @@ messageList(list) {
)
)
);
);
}
}
dataFormat
(
timestamp
)
{
return
TimelineUtil
.
format
((
timestamp
*
1000
).
toInt
(),
locTimeMillis:
DateTime
.
now
().
millisecondsSinceEpoch
,
locale:
'zh'
,
dayFormat:
DayFormat
.
Full
);
}
lib/TestPage.dart
View file @
fc9ce87f
...
@@ -45,12 +45,13 @@ class TestPage extends StatelessWidget {
...
@@ -45,12 +45,13 @@ class TestPage extends StatelessWidget {
}
}
testMessagePage
(
BuildContext
context
)
{
testMessagePage
(
BuildContext
context
)
{
return
base
(
return
base
(
context
,
()
{
Navigator
.
push
(
context
,
context
,
RouterCenterImpl
()
new
CustomRoute
(
RouterCenterImpl
()
.
findNewMessageRouter
()
.
findNewMessageRouter
()
?.
getMessagePage
(
''
),
?.
getMessagePage
(
''
)));
"消息页面"
);
},
"消息页面"
);
}
}
testReportPage
(
BuildContext
context
)
{
testReportPage
(
BuildContext
context
)
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment