You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

257 lines
7.4 KiB

4 years ago
import 'package:flutter/material.dart';
import 'package:recook/pages/user/functions/user_func.dart';
import 'package:recook/pages/user/invite/group_invite_card.dart';
import 'package:recook/pages/user/model/user_common_model.dart';
import 'package:recook/utils/user_level_tool.dart';
import 'package:recook/widgets/alert.dart';
import 'package:recook/widgets/recook/recook_scaffold.dart';
import 'package:recook/widgets/refresh_widget.dart';
import 'package:velocity_x/velocity_x.dart';
import 'package:recook/constants/header.dart';
class MyGroupPageV2 extends StatefulWidget {
MyGroupPageV2({Key key}) : super(key: key);
@override
_MyGroupPageV2State createState() => _MyGroupPageV2State();
}
class _MyGroupPageV2State extends State<MyGroupPageV2> {
TextEditingController _editingController = TextEditingController();
List<UserCommonModel> _models = [];
UsersMode usersMode = UsersMode.MY_GROUP;
int get _allGroupCount {
int value = 0;
_models.forEach((element) {
value += element.count;
});
return value;
}
GSRefreshController _refreshController = GSRefreshController.auto();
_renderShitTab(String name, UsersMode mode) {
bool same = mode == usersMode;
return MaterialButton(
materialTapTargetSize: MaterialTapTargetSize.shrinkWrap,
minWidth: double.infinity,
child: name.text
.size(14.sp)
.color(same ? Colors.black : Color(0xFFA3A3A3))
.make(),
onPressed: () {
usersMode = mode;
_refreshController.requestRefresh();
setState(() {});
},
).expand();
}
String get _renderTitle {
switch (usersMode) {
case UsersMode.MY_GROUP:
return '我的自营店铺';
case UsersMode.MY_RECOMMEND:
return '我的分销店铺';
case UsersMode.MY_REWARD:
return '我的代理店铺';
}
}
4 years ago
Widget get _renderShitVerticalLine => Container(
height: 20.w,
width: 1.w,
color: Color(0xFF979797),
);
_renderTopCard() {
return Material(
color: Colors.white,
borderRadius: BorderRadius.circular(4.w),
clipBehavior: Clip.antiAlias,
child: Column(
children: [
Container(
height: 76.w,
decoration: BoxDecoration(
image: DecorationImage(
image: AssetImage(UserLevelTool.currentCardImagePath()),
fit: BoxFit.cover,
),
),
alignment: Alignment.center,
child: Image.asset(
UserLevelTool.currentMedalImagePath(),
height: 56.w,
width: 56.w,
),
),
Row(
children: [
50.hb,
_renderShitTab('自营店铺', UsersMode.MY_GROUP),
_renderShitVerticalLine,
_renderShitTab('分销店铺', UsersMode.MY_RECOMMEND),
_renderShitVerticalLine,
_renderShitTab('代理店铺', UsersMode.MY_REWARD),
],
),
],
),
).pSymmetric(h: 36.w, v: 10.w);
}
_renderSearchBar() {
return Material(
color: Colors.white,
shape: StadiumBorder(),
child: Row(
children: [
34.hb,
TextField(
controller: _editingController,
onEditingComplete: () {
_refreshController.requestRefresh();
},
style: TextStyle(color: Colors.black),
decoration: InputDecoration(
isDense: true,
border: InputBorder.none,
contentPadding: EdgeInsets.symmetric(horizontal: 20.w),
hintText: '请输入昵称/备注/手机号/微信号',
hintStyle: TextStyle(
fontSize: 12.sp,
color: Color(0xFF999999),
),
),
).expand(),
Icon(
Icons.search,
color: Color(0xFF999999),
),
20.wb,
],
),
).pSymmetric(h: 15.w, v: 10.w);
}
_renderShitLine() {
return Container(
height: 10.w,
width: double.infinity,
decoration: BoxDecoration(
color: Color(0xFFE3E3E3),
borderRadius: BorderRadius.circular(5.w),
boxShadow: [
BoxShadow(
offset: Offset(0, 2.w),
blurRadius: 4.w,
color: Colors.black.withOpacity(0.2451),
)
],
),
margin: EdgeInsets.symmetric(horizontal: 6.w),
alignment: Alignment.center,
child: Container(
height: 4.w,
width: double.infinity,
margin: EdgeInsets.symmetric(horizontal: 4.w),
decoration: BoxDecoration(
color: Color(0xFF6A6A6A).withOpacity(0.3178),
borderRadius: BorderRadius.circular(2.w),
),
),
);
}
Widget _renderShitList() {
return Container(
child: Column(
children: [
Row(
children: [
54.hb,
16.wb,
_renderTitle.text.bold.size(14.sp).black.make(),
4 years ago
MaterialButton(
padding: EdgeInsets.all(4.w),
minWidth: 0,
materialTapTargetSize: MaterialTapTargetSize.shrinkWrap,
child: Icon(
Icons.help_outline,
size: 12.w,
color: Color(0xFFA5A5A5),
),
onPressed: () {
Alert.show(
context,
NormalContentDialog(
title: '店铺贡献榜图标定义',
content: Image.asset(R.ASSETS_USER_CARD_DESCRIPTION_PNG),
items: ["确认"],
listener: (index) => Alert.dismiss(context),
),
);
},
),
Spacer(),
Image.asset(
R.ASSETS_USER_ICON_GROUP_PNG,
width: 12.w,
height: 12.w,
),
_allGroupCount.toString().text.size(12.sp).black.make(),
20.wb,
],
),
..._models.map((e) => GroupInviteCard(model: e)).toList(),
4 years ago
],
),
margin: EdgeInsets.symmetric(horizontal: 16.w),
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.vertical(bottom: Radius.circular(2.w)),
boxShadow: [
BoxShadow(
offset: Offset(0, 2.w),
blurRadius: 4.w,
color: Colors.black.withOpacity(0.1089),
),
],
),
);
}
@override
Widget build(BuildContext context) {
return RecookScaffold(
title: '我的店铺',
whiteBg: true,
body: NestedScrollView(
headerSliverBuilder: (context, _) =>
[SliverToBoxAdapter(child: _renderTopCard())],
body: RefreshWidget(
controller: _refreshController,
onRefresh: () async {
_models = await UserFunc.usersList(
usersMode,
keyword: _editingController.text,
);
_refreshController.refreshCompleted();
setState(() {});
},
body: SingleChildScrollView(
child: Column(
children: [
_renderSearchBar(),
_renderShitLine(),
_renderShitList(),
],
),
),
),
).material(color: AppColor.frenchColor),
);
}
}