Skip to content

Commit 17ef198

Browse files
committed
update user center page
1 parent 8bbcaaa commit 17ef198

File tree

3 files changed

+173
-84
lines changed

3 files changed

+173
-84
lines changed
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
import 'package:flutter_wanandroid/model/coin/coin_user_info.dart';
2+
3+
/// Created with Android Studio.
4+
/// User: maoqitian
5+
/// Date: 2020-03-15
6+
/// email: maoqitian068@163.com
7+
/// des: 获取用户积分信息
8+
9+
class CoinUserInfoEvent{
10+
11+
final CoinUserInfo coinUserInfo;
12+
13+
CoinUserInfoEvent(this.coinUserInfo);
14+
15+
}

flutter_wanandroid/lib/views/share/page/user_share_page.dart

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import 'package:flutter/material.dart';
88
import 'package:flutter_easyrefresh/easy_refresh.dart';
99
import 'package:flutter_wanandroid/common/application.dart';
1010
import 'package:flutter_wanandroid/common/constants.dart';
11+
import 'package:flutter_wanandroid/common/event/coin_user_Info_event.dart';
1112
import 'package:flutter_wanandroid/common/event/share_article_event.dart';
1213
import 'package:flutter_wanandroid/http/data_utils.dart';
1314
import 'package:flutter_wanandroid/model/usershare/user_share_data.dart';
@@ -31,6 +32,8 @@ class _UserSharePageState extends State<UserSharePage> with AutomaticKeepAliveCl
3132
List list = [];
3233
var pageIndex = 1;
3334

35+
bool isFirstLoad = false;
36+
3437
@override
3538
bool get wantKeepAlive => true;
3639

@@ -106,6 +109,10 @@ class _UserSharePageState extends State<UserSharePage> with AutomaticKeepAliveCl
106109
if(userShareData.shareArticles.datas.length!=0){
107110
list.addAll(userShareData.shareArticles.datas);
108111
pageIndex= userShareData.shareArticles.curPage+1;
112+
if(!isFirstLoad){
113+
Application.eventBus.fire(new CoinUserInfoEvent(userShareData.coinInfo));
114+
isFirstLoad = true;
115+
}
109116
_controller.finishLoad(success: true);
110117
}else{
111118
ToolUtils.showToast(msg: "哥,这回真没了!!");

flutter_wanandroid/lib/views/user/user_center_page.dart

Lines changed: 151 additions & 84 deletions
Original file line numberDiff line numberDiff line change
@@ -6,41 +6,64 @@
66
import 'package:flutter/material.dart';
77
import 'package:flutter/rendering.dart';
88
import 'package:flutter_wanandroid/common/Page.dart';
9+
import 'package:flutter_wanandroid/common/application.dart';
910
import 'package:flutter_wanandroid/common/constants.dart';
11+
import 'package:flutter_wanandroid/common/event/coin_user_Info_event.dart';
1012
import 'package:flutter_wanandroid/http/data_utils.dart';
1113
import 'package:flutter_wanandroid/utils/tool_utils.dart';
1214
import 'package:flutter_wanandroid/views/collect/page/collect_item_page.dart';
1315
import 'package:flutter_wanandroid/views/collect/page/collect_web_item_page.dart';
1416
import 'package:flutter_wanandroid/views/share/page/user_share_page.dart';
1517
import 'package:flutter_wanandroid/views/user/delegate/sticky_tabBar_delegate.dart';
1618
import 'package:flutter_wanandroid/widget/stroke_widget.dart';
17-
import 'package:extended_nested_scroll_view/extended_nested_scroll_view.dart' as extended;
19+
import 'package:extended_nested_scroll_view/extended_nested_scroll_view.dart'
20+
as extended;
1821

1922
TabController _tabController;
2023

2124
class UserCenterPage extends StatefulWidget {
22-
2325
final String type;
2426
final String authorId;
2527
final String authorName;
2628

27-
UserCenterPage({this.type = Constants.USER_CENTER_PAGE_TYPE, this.authorId, this.authorName});
29+
UserCenterPage(
30+
{this.type = Constants.USER_CENTER_PAGE_TYPE,
31+
this.authorId,
32+
this.authorName});
2833

2934
@override
3035
_UserCenterPageState createState() => _UserCenterPageState();
3136
}
3237

33-
class _UserCenterPageState extends State<UserCenterPage> with SingleTickerProviderStateMixin {
34-
38+
class _UserCenterPageState extends State<UserCenterPage>
39+
with SingleTickerProviderStateMixin {
3540
// 滚动控制器
3641
ScrollController _scrollController;
3742

43+
//积分 等级
44+
int coin = 0;
45+
int level = 0;
46+
3847
@override
3948
void initState() {
4049
super.initState();
41-
_tabController = new TabController(length:Constants.USER_CENTER_PAGE_TYPE == widget.type ?
42-
Constants.userPages.length:Constants.userSharePages.length,vsync: this);
50+
_tabController = new TabController(
51+
length: Constants.USER_CENTER_PAGE_TYPE == widget.type
52+
? Constants.userPages.length
53+
: Constants.userSharePages.length,
54+
vsync: this);
4355
_scrollController = ScrollController();
56+
57+
Application.eventBus.on<CoinUserInfoEvent>().listen((event) {
58+
print("刷新 个人 或者用户等级信息");
59+
//event.coinUserInfo.rank;
60+
if (this.mounted) {
61+
setState(() {
62+
coin = event.coinUserInfo.coinCount;
63+
level = event.coinUserInfo.level;
64+
});
65+
}
66+
});
4467
}
4568

4669
@override
@@ -91,67 +114,105 @@ class _UserCenterPageState extends State<UserCenterPage> with SingleTickerProvid
91114
color: ToolUtils.getPrimaryColor(context), //指示器颜色
92115
)
93116
);*/
94-
Scaffold(
95-
body: extended.NestedScrollView( //使用扩展 extended.NestedScrollView 处理 联动问题
96-
innerScrollPositionKeyBuilder: (){
97-
return Key(getKey(_tabController.index));
98-
},
99-
headerSliverBuilder: (context, bool) {
100-
return [
101-
SliverAppBar(
102-
iconTheme: IconThemeData(color: Colors.white), //设置 icon 颜色
103-
pinned: true,
104-
expandedHeight: 150.0,
105-
flexibleSpace: FlexibleSpaceBar(
106-
title: Text(Constants.USER_CENTER_PAGE_TYPE == widget.type ? dataUtils.getUserName():widget.authorName,style:TextStyle(color: Colors.white,
107-
fontWeight: FontWeight.bold )),
108-
background: Image.asset(
109-
ToolUtils.getImage("ic_zone_background",format: "webp"), fit: BoxFit.cover),
110-
)
111-
),
112-
SliverPersistentHeader(
113-
pinned: true,
114-
delegate: StickyTabBarDelegate(
115-
color: Colors.white,
116-
child: buildTabBar(context)
117+
Scaffold(
118+
body: extended.NestedScrollView(
119+
//使用扩展 extended.NestedScrollView 处理 联动问题
120+
innerScrollPositionKeyBuilder: () {
121+
return Key(getKey(_tabController.index));
122+
},
123+
headerSliverBuilder: (context, bool) {
124+
return [
125+
SliverAppBar(
126+
iconTheme: IconThemeData(color: Colors.white), //设置 icon 颜色
127+
pinned: true,
128+
expandedHeight: 150.0,
129+
flexibleSpace: FlexibleSpaceBar(
130+
centerTitle: false,
131+
title: Container(
132+
child: Row(
133+
children: <Widget>[
134+
Text(
135+
Constants.USER_CENTER_PAGE_TYPE == widget.type
136+
? dataUtils.getUserName()
137+
: widget.authorName,
138+
style: TextStyle(
139+
color: Colors.white,
140+
fontWeight: FontWeight.bold)),
141+
Padding(
142+
child: StrokeWidget(
143+
strokeWidth: 2,
144+
edgeInsets: EdgeInsets.symmetric(
145+
horizontal: 2.0, vertical: 0.0),
146+
color: Colors.white,
147+
childWidget: Text("lv " + level.toString(),
148+
style: TextStyle(
149+
fontSize: 11.0,
150+
color: Colors.white,
151+
fontWeight: FontWeight.bold))),
152+
padding: EdgeInsets.only(left: 10.0),
153+
),
154+
Expanded(
155+
child: Padding(
156+
child: Text("积分:" + coin.toString(),
157+
style: TextStyle(
158+
color: Colors.white,
159+
fontWeight: FontWeight.bold),
160+
maxLines: 1, // title 只显示一行
161+
overflow: TextOverflow.ellipsis),
162+
padding: EdgeInsets.only(left: 10.0),
163+
),
164+
)
165+
],
117166
),
118167
),
119-
];
120-
},
121-
body: TabBarView(
122-
controller: _tabController,
123-
children: Constants.USER_CENTER_PAGE_TYPE == widget.type ? Constants.userPages.map((Page page){
168+
background: Image.asset(
169+
ToolUtils.getImage("ic_zone_background", format: "webp"),
170+
fit: BoxFit.cover),
171+
)),
172+
SliverPersistentHeader(
173+
pinned: true,
174+
delegate: StickyTabBarDelegate(
175+
color: Colors.white, child: buildTabBar(context)),
176+
),
177+
];
178+
},
179+
body: TabBarView(
180+
controller: _tabController,
181+
children: Constants.USER_CENTER_PAGE_TYPE == widget.type
182+
? Constants.userPages.map((Page page) {
124183
return buildTabView(context, page);
125-
}).toList() :
126-
Constants.userSharePages.map((Page page){
184+
}).toList()
185+
: Constants.userSharePages.map((Page page) {
127186
return buildTabView(context, page);
128187
}).toList(),
129-
),
130-
),
131-
);
188+
),
189+
),
190+
);
132191
}
133192

134193
Widget buildTabView(BuildContext context, Page page) {
135194
int labelIndex = page.labelIndex;
136-
switch(labelIndex){
195+
switch (labelIndex) {
137196
case 1:
138-
//收藏文章
139-
return extended.NestedScrollViewInnerScrollPositionKeyWidget( //使用扩展 extended.NestedScrollView 处理 联动问题
140-
Key(getKey(labelIndex)),CollectItemPage(false)
141-
);
197+
//收藏文章
198+
return extended.NestedScrollViewInnerScrollPositionKeyWidget(
199+
//使用扩展 extended.NestedScrollView 处理 联动问题
200+
Key(getKey(labelIndex)),
201+
CollectItemPage(false));
142202
break;
143203
case 0:
144-
//分享文章
145-
return extended.NestedScrollViewInnerScrollPositionKeyWidget( //使用扩展 extended.NestedScrollView 处理 联动问题
146-
Key(getKey(labelIndex)),UserSharePage(type: widget.type,authorId: widget.authorId)
147-
);
204+
//分享文章
205+
return extended.NestedScrollViewInnerScrollPositionKeyWidget(
206+
//使用扩展 extended.NestedScrollView 处理 联动问题
207+
Key(getKey(labelIndex)),
208+
UserSharePage(type: widget.type, authorId: widget.authorId));
148209
break;
149210
case 2:
150-
//收藏网站
211+
//收藏网站
151212
return CollectWebItemPage(false);
152213
break;
153214
default:
154-
return Container(
215+
return Container(
155216
child: new Center(
156217
child: new Text("暂未实现 Page"),
157218
),
@@ -160,13 +221,12 @@ class _UserCenterPageState extends State<UserCenterPage> with SingleTickerProvid
160221
}
161222
}
162223

163-
String getKey(int index){
164-
if(Constants.USER_CENTER_PAGE_TYPE == widget.type){
165-
return Constants.userPages[index].labelId+index.toString();
166-
}else{
167-
return Constants.userSharePages[index].labelId+index.toString();
224+
String getKey(int index) {
225+
if (Constants.USER_CENTER_PAGE_TYPE == widget.type) {
226+
return Constants.userPages[index].labelId + index.toString();
227+
} else {
228+
return Constants.userSharePages[index].labelId + index.toString();
168229
}
169-
170230
}
171231

172232
buildUserIconAndNickName() {
@@ -180,48 +240,55 @@ class _UserCenterPageState extends State<UserCenterPage> with SingleTickerProvid
180240
style:TextStyle(color: Colors.white,
181241
fontWeight: FontWeight.bold )),*/
182242
Row(
183-
children: <Widget>[
184-
Padding(
185-
child: StrokeWidget(
186-
strokeWidth: 2,
187-
edgeInsets: EdgeInsets.symmetric(horizontal: 2.0, vertical: 0.0),
188-
color: Colors.white,
189-
childWidget: Text( "lv 666", style: TextStyle(fontSize: 11.0, color: Colors.white, fontWeight: FontWeight.bold))
190-
),
191-
padding: EdgeInsets.only(right: 10.0),
192-
),
193-
Text(
194-
"积分:66666",
195-
style: TextStyle(color: Colors.white,fontSize: 15.0),
196-
)
197-
],
198-
);
199-
//],
243+
children: <Widget>[
244+
Padding(
245+
child: StrokeWidget(
246+
strokeWidth: 2,
247+
edgeInsets: EdgeInsets.symmetric(horizontal: 2.0, vertical: 0.0),
248+
color: Colors.white,
249+
childWidget: Text("lv 666",
250+
style: TextStyle(
251+
fontSize: 11.0,
252+
color: Colors.white,
253+
fontWeight: FontWeight.bold))),
254+
padding: EdgeInsets.only(right: 10.0),
255+
),
256+
Text(
257+
"积分:66666",
258+
style: TextStyle(color: Colors.white, fontSize: 15.0),
259+
)
260+
],
261+
);
262+
//],
200263
//);
201264
}
202265

203266
//页面刷新
204-
Future<Null> _pageRefresh() async{
267+
Future<Null> _pageRefresh() async {
205268
print("下拉刷新 ");
206269

207270
return null;
208271
}
272+
209273
//构造 TabBar
210274
buildTabBar(BuildContext context) {
211275
return new TabBar(
212276
//构造Tab集合
213-
tabs: Constants.USER_CENTER_PAGE_TYPE == widget.type ? Constants.userPages.map((Page page ){
214-
return Tab(
215-
text: page.labelId,
216-
);
217-
}).toList(): Constants.userSharePages.map((Page page){
218-
return Tab(
219-
text: page.labelId,
220-
);
221-
}).toList(),
277+
tabs: Constants.USER_CENTER_PAGE_TYPE == widget.type
278+
? Constants.userPages.map((Page page) {
279+
return Tab(
280+
text: page.labelId,
281+
);
282+
}).toList()
283+
: Constants.userSharePages.map((Page page) {
284+
return Tab(
285+
text: page.labelId,
286+
);
287+
}).toList(),
222288
//设置tab文字得类型
223289
labelStyle: TextStyle(fontSize: 15, fontWeight: FontWeight.bold),
224290
labelPadding: EdgeInsets.only(top: 12.0, left: 12.0, right: 12.0),
291+
225292
///指示器大小计算方式,TabBarIndicatorSize.label跟文字等宽,TabBarIndicatorSize.tab跟每个tab等宽
226293
indicatorSize: TabBarIndicatorSize.label,
227294
//设置tab选中得颜色

0 commit comments

Comments
 (0)