diff --git a/lib/pages/goods_details_page/bloc/goods_details_page_repository.dart b/lib/pages/goods_details_page/bloc/goods_details_page_repository.dart index 9f5e117..eec4c36 100644 --- a/lib/pages/goods_details_page/bloc/goods_details_page_repository.dart +++ b/lib/pages/goods_details_page/bloc/goods_details_page_repository.dart @@ -81,6 +81,7 @@ class GoodsDetailsPageRepository { List modLists = model['mod_list']; for (int i = 0; i < modLists.length; i++) { Map item = modLists[i]; + // ⚠️这里之所以要判断是否是String类型,是因为修改的是父亲页面传进来的model -> data 类型了。把dynamic变成了String Map data = item['data'] is String ? jsonDecode(item['data']) : item['data']; Map style = jsonDecode(item['style']); style.addAll(baseData); diff --git a/lib/pages/message_notice_page/bloc/message_notice_bloc.dart b/lib/pages/message_notice_page/bloc/message_notice_bloc.dart new file mode 100644 index 0000000..38d0c2a --- /dev/null +++ b/lib/pages/message_notice_page/bloc/message_notice_bloc.dart @@ -0,0 +1,49 @@ +import 'dart:async'; + +import 'package:bloc/bloc.dart'; +import 'package:equatable/equatable.dart'; +import 'package:zhiying_base_widget/pages/message_notice_page/bloc/message_notice_repository.dart'; + +part 'message_notice_event.dart'; + +part 'message_notice_state.dart'; + +class MessageNoticeBloc extends Bloc { + // MessageNoticeBloc() : super(MessageNoticeInitial()); + + MessageNoticeRepository repository; + + MessageNoticeBloc(this.repository); + + @override + MessageNoticeState get initialState => MessageNoticeInitial(); + + @override + Stream mapEventToState( + MessageNoticeEvent event, + ) async* { + /// 初始化 + if (event is MessageNoticeInitEvent) { + yield* _mapInitEventToState(event); + } + + /// 下拉刷新 + if (event is MessageNoticeOnRefreshEvent) { + yield* _mapOnRefreshEventToState(event); + } + + /// 上拉更多 + if (event is MessageNoticeOnLoadEvent) { + yield* _mapOnLoadEventToState(event); + } + } + + /// 初始化 + Stream _mapInitEventToState(MessageNoticeInitEvent event) async* {} + + /// 下拉刷新 + Stream _mapOnRefreshEventToState(MessageNoticeOnRefreshEvent event) async* {} + + /// 上拉更多 + Stream _mapOnLoadEventToState(MessageNoticeOnLoadEvent event) async* {} +} diff --git a/lib/pages/message_notice_page/bloc/message_notice_event.dart b/lib/pages/message_notice_page/bloc/message_notice_event.dart new file mode 100644 index 0000000..8ce3d6c --- /dev/null +++ b/lib/pages/message_notice_page/bloc/message_notice_event.dart @@ -0,0 +1,17 @@ +part of 'message_notice_bloc.dart'; + +abstract class MessageNoticeEvent extends Equatable { + const MessageNoticeEvent(); + + @override + List get props => []; +} + +/// 初始化 +class MessageNoticeInitEvent extends MessageNoticeEvent {} + +/// 下拉刷新 +class MessageNoticeOnRefreshEvent extends MessageNoticeEvent{} + +/// 上拉更多 +class MessageNoticeOnLoadEvent extends MessageNoticeEvent{} \ No newline at end of file diff --git a/lib/pages/message_notice_page/bloc/message_notice_repository.dart b/lib/pages/message_notice_page/bloc/message_notice_repository.dart new file mode 100644 index 0000000..6e0dee9 --- /dev/null +++ b/lib/pages/message_notice_page/bloc/message_notice_repository.dart @@ -0,0 +1,45 @@ +import 'package:zhiying_comm/util/empty_util.dart'; +import 'package:zhiying_comm/util/global_config.dart'; +import 'package:zhiying_comm/util/log/let_log.dart'; +import 'package:zhiying_comm/util/net_util.dart'; + +class MessageNoticeRepository { + final int _maxSize = 5; + int _currentPage = 1; + bool _hasMoreData = true; + List _oldData = []; + + /// 下拉刷新 + Future fetchRefreshData() async { + return fetchInitData(); + } + + /// 上拉更多 + Future fetchLoadData() async { + if (_hasMoreData) { + return _baseRequest(); + } + return null; + } + + /// 数据初始化 + Future fetchInitData() async { + _currentPage = 1; + _hasMoreData = true; + _oldData.clear(); + return _baseRequest(); + } + + /// 基础请求 + Future _baseRequest() async { + try { + var result = await NetUtil.post('', params: {'size': _maxSize.toString()}); + if (NetUtil.isSuccess(result) && !EmptyUtil.isEmpty(result[GlobalConfig.HTTP_RESPONSE_KEY_DATA])) { + ++_currentPage; + } + } catch (e, s) { + Logger.error(e, s); + } + return null; + } +} diff --git a/lib/pages/message_notice_page/bloc/message_notice_state.dart b/lib/pages/message_notice_page/bloc/message_notice_state.dart new file mode 100644 index 0000000..36b4b1f --- /dev/null +++ b/lib/pages/message_notice_page/bloc/message_notice_state.dart @@ -0,0 +1,22 @@ +part of 'message_notice_bloc.dart'; + +abstract class MessageNoticeState extends Equatable { + const MessageNoticeState(); + + @override + List get props => []; +} + +class MessageNoticeInitial extends MessageNoticeState {} + +/// 数据加载成功 +class MessageNoticeLoadedState extends MessageNoticeState {} + +/// 下拉刷新失败 +class MessageNoticeOnRefreshErrorState extends MessageNoticeState {} + +/// 上拉更多失败 +class MessageNoticeOnLoadErrorState extends MessageNoticeState {} + +/// 数据初始化加载失败 +class MessageNoticeErrorState extends MessageNoticeState {} diff --git a/lib/pages/message_notice_page/message_notice_page.dart b/lib/pages/message_notice_page/message_notice_page.dart new file mode 100644 index 0000000..901853b --- /dev/null +++ b/lib/pages/message_notice_page/message_notice_page.dart @@ -0,0 +1,388 @@ +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; +import 'package:zhiying_base_widget/pages/message_notice_page/bloc/message_notice_bloc.dart'; +import 'package:zhiying_base_widget/pages/message_notice_page/bloc/message_notice_repository.dart'; +import 'package:zhiying_comm/zhiying_comm.dart'; + +/// +/// 消息通知页 +/// +class MessageNoticePage extends StatelessWidget { + final Map data; + + MessageNoticePage(this.data); + + @override + Widget build(BuildContext context) { + return BlocProvider( + create: (_) => MessageNoticeBloc(MessageNoticeRepository())..add(MessageNoticeInitEvent()), + child: _MessageNoticePageContainer(), + ); + } +} + +class _MessageNoticePageContainer extends StatefulWidget { + @override + __MessageNoticePageContainerState createState() => __MessageNoticePageContainerState(); +} + +class __MessageNoticePageContainerState extends State<_MessageNoticePageContainer> { + @override + Widget build(BuildContext context) { + return _buildMainWidget(); + } + + /// 主视图 + Widget _buildMainWidget() { + return Scaffold( + appBar: _buildAppBarWidget(), + backgroundColor: HexColor.fromHex('#F9F9F9'), + body: ListView.builder( + padding: const EdgeInsets.only(left: 12.5, right: 12.5, top: 8), + // shrinkWrap: true, + itemCount: 5, + itemBuilder: (context, index) { + return _buildOfficialActivitiesStyleWidget(); + })); + } + + /// 消息中心样式 + Widget _buildMessageCenterStyleWidget(int index, int length) { + var borderRadius = index == 0 + ? BorderRadius.only(topLeft: Radius.circular(7.5), topRight: Radius.circular(7.5)) + : index == length - 1 ? BorderRadius.only(bottomRight: Radius.circular(7.5), bottomLeft: Radius.circular(7.5)) : BorderRadius.only(); + + return Container( + decoration: BoxDecoration(color: HexColor.fromHex('#FFFFFF'), borderRadius: borderRadius), + padding: const EdgeInsets.only(left: 15, right: 15, top: 16), + child: Column( + children: [ + Container( + height: 30, + width: double.infinity, + child: Row( + children: [ + _buildCustomerAvatarWidget(), + const SizedBox(width: 10), + Expanded( + child: Column( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + /// 官方活动 + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text('官方活动', style: TextStyle(color: HexColor.fromHex('#333333'), fontWeight: FontWeight.bold, fontSize: 13)), + Text('04-20 16:00', style: TextStyle(color: HexColor.fromHex('#D8D8D8'), fontSize: 12)), + ], + ), + Padding( + padding: const EdgeInsets.only(right: 22), + child: Text( + '2020年6月23日4:00至6月30日4:00关闭提现aaa', + maxLines: 1, + overflow: TextOverflow.ellipsis, + style: TextStyle(color: HexColor.fromHex('#999999'), fontSize: 12), + ), + ), + ], + ), + ) + ], + ), + ), + Padding(padding: const EdgeInsets.only(top: 14.5), child: Divider(height: 0.5, color: HexColor.fromHex('#EFEFEF'))) + ], + ), + ); + } + + /// 官方通知样式 + Widget _buildOfficialNoticeStyleWidget() { + return Container( + padding: const EdgeInsets.only(left: 15, right: 15, top: 12.5, bottom: 10), + margin: const EdgeInsets.only(bottom: 7.5), + decoration: BoxDecoration( + color: HexColor.fromHex('#FFFFFF'), + borderRadius: BorderRadius.circular(7.5), + ), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + _buildCustomerAvatarWidget(), + const SizedBox(width: 10), + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + /// 标题 + Text('关于关闭提现功能通知', style: TextStyle(color: HexColor.fromHex('#333333'), fontSize: 14, fontWeight: FontWeight.bold)), + const SizedBox(height: 5), + + /// 内容 + Text('由于微信官方的限制,我们暂时将嗨如意小程序内的提现功能进行关闭并进行维护,关闭功能时间为2020年6月23日4:00至6月30日4:00,请谅解', + maxLines: 3, overflow: TextOverflow.ellipsis, style: TextStyle(color: HexColor.fromHex('#999999'), fontSize: 11)) + ], + ), + ) + ], + ), + + /// 时间 + Padding(padding: const EdgeInsets.only(top: 16), child: Text('2020-06-23 01:00:06', style: TextStyle(color: HexColor.fromHex('#D8D8D8'), fontSize: 11))) + ], + ), + ); + } + + /// 官方活动样式 + Widget _buildOfficialActivitiesStyleWidget() { + return Container( + padding: const EdgeInsets.only(left: 15, right: 15, top: 12.5, bottom: 10), + margin: const EdgeInsets.only(bottom: 7.5), + decoration: BoxDecoration(borderRadius: BorderRadius.circular(7.5), color: HexColor.fromHex('#FFFFFF')), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + /// 标题 + Text( + '8.8淘宝会员节大促', + style: TextStyle(color: HexColor.fromHex('#333333'), fontWeight: FontWeight.bold, fontSize: 14), + maxLines: 1, + overflow: TextOverflow.ellipsis, + ), + const SizedBox(height: 6), + + /// 图片海报 + ClipRRect( + borderRadius: BorderRadius.circular(7.5), + child: CachedNetworkImage(imageUrl: 'http://ossq.izhyin.cn/index_carousel_1.png', width: double.infinity, )), + const SizedBox(height: 6.5), + + /// 活动内容 + Text( + '京东家电815周年庆,全场家电最低五折起,买一送一等超多优惠活动,点击查看活动详情', + maxLines: 2, + overflow: TextOverflow.ellipsis, + style: TextStyle(fontSize: 11, color: HexColor.fromHex('#999999')), + ), + + /// 时间 + const SizedBox(height: 7), + Text('2020-06-23 01:00:06', style: TextStyle(color: HexColor.fromHex('#D8D8D8'), fontSize: 11)) + ], + ), + ); + } + + /// 交易通知样式 + Widget _buildTradeNoticeStyleWidget() { + return Container( + padding: const EdgeInsets.only(left: 15, right: 15, top: 12.5, bottom: 10), + margin: const EdgeInsets.only(bottom: 7.5), + decoration: BoxDecoration( + color: HexColor.fromHex('#FFFFFF'), + borderRadius: BorderRadius.circular(7.5), + ), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + _buildCustomerAvatarWidget(), + const SizedBox(width: 10), + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + /// 标题 + Text('自购订单收益', style: TextStyle(color: HexColor.fromHex('#333333'), fontSize: 14, fontWeight: FontWeight.bold)), + const SizedBox(height: 5), + + /// 内容 + _buildCustomerTradeContentWidget(), + ], + ), + ) + ], + ), + + /// 时间 + Padding(padding: const EdgeInsets.only(top: 16), child: Text('2020-06-23 01:00:06', style: TextStyle(color: HexColor.fromHex('#D8D8D8'), fontSize: 11))) + ], + ), + ); + } + + /// 推广通知样式 + Widget _buildPromoteNoticeStyleWidget() { + return Container( + padding: const EdgeInsets.only(left: 15, right: 15, top: 12.5, bottom: 10), + margin: const EdgeInsets.only(bottom: 7.5), + decoration: BoxDecoration( + color: HexColor.fromHex('#FFFFFF'), + borderRadius: BorderRadius.circular(7.5), + ), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + _buildCustomerAvatarWidget(), + const SizedBox(width: 10), + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + /// 标题 + Text('新增直推粉丝', style: TextStyle(color: HexColor.fromHex('#333333'), fontSize: 14, fontWeight: FontWeight.bold)), + const SizedBox(height: 5), + + /// 内容 + Text('恭喜您成功邀请152****5887加入您的团队,快带领小伙伴走向致富之路吧!', + maxLines: 3, overflow: TextOverflow.ellipsis, style: TextStyle(color: HexColor.fromHex('#999999'), fontSize: 11)) + ], + ), + ) + ], + ), + + /// 时间 + Padding(padding: const EdgeInsets.only(top: 16), child: Text('2020-06-23 01:00:06', style: TextStyle(color: HexColor.fromHex('#D8D8D8'), fontSize: 11))) + ], + ), + ); + } + + /// 反馈通知样式 + Widget _buildFeedbackNoticeStyleWidget() { + return Container( + padding: const EdgeInsets.only(left: 15, right: 15, top: 14, bottom: 10), + margin: const EdgeInsets.only(bottom: 7.5), + decoration: BoxDecoration( + color: HexColor.fromHex('#FFFFFF'), + borderRadius: BorderRadius.circular(7.5), + ), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + _buildCustomerAvatarWidget(), + const SizedBox(width: 10), + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + /// 标题 + Text('您的反馈有回复啦', style: TextStyle(color: HexColor.fromHex('#333333'), fontSize: 14, fontWeight: FontWeight.bold)), + const SizedBox(height: 3), + /// 内容 + Text('点击查看回复详情', + maxLines: 1, overflow: TextOverflow.ellipsis, style: TextStyle(color: HexColor.fromHex('#999999'), fontSize: 11)) + ], + ), + ) + ], + ), + + /// 时间 + Padding(padding: const EdgeInsets.only(top: 16), child: Text('2020-06-23 01:00:06', style: TextStyle(color: HexColor.fromHex('#D8D8D8'), fontSize: 11))) + ], + ), + ); + } + + /// APPBar + Widget _buildAppBarWidget() { + return AppBar( + leading: IconButton( + icon: Icon( + Icons.arrow_back_ios, + size: 22, + color: HexColor.fromHex('#333333'), + ), + onPressed: () => Navigator.maybePop(context), + ), + title: Text( + '消息中心', + style: TextStyle(color: HexColor.fromHex('#333333'), fontSize: 15, fontWeight: FontWeight.bold), + ), + centerTitle: true, + backgroundColor: HexColor.fromHex('#FFFFFF'), + elevation: 0, + ); + } + + /// ================================= 自定义View ================================= /// + Widget _buildCustomerAvatarWidget() { + return Container( + // width: 30, + // height: 30, + child: Stack( + alignment: AlignmentDirectional.topEnd, + // mainAxisAlignment: MainAxisAlignment.start, + // crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Container( + height: 30, + width: 30, + color: Colors.deepPurpleAccent, + ), + Transform.translate( + offset: Offset(5, -4.5), + child: Container( + // width: 17, + height: 12, + padding: const EdgeInsets.only(left: 3, right: 3, top: 1, bottom: 1), + alignment: Alignment.center, + decoration: + BoxDecoration(color: HexColor.fromHex('#FF4242'), borderRadius: BorderRadius.circular(6), border: Border.all(color: HexColor.fromHex('#FFFFFF'), width: 0.5)), + child: Text( + '18', + textAlign: TextAlign.center, + style: TextStyle(fontSize: 9, color: HexColor.fromHex('#FFFFFF')), + ), + ), + ) + ], + ), + ); + } + + Widget _buildCustomerTradeContentWidget(){ + Map datas= { + '订单编号:':'154547896541651464788', + '订单类型:':'京东', + '预估收益:': '8.00', + '下单时间:':'2020-08-14 11:35:39', + '预估结算:':'次月25日结算', + }; + List lists = []; + datas.forEach((key, value) { + lists.add(Padding( + padding: const EdgeInsets.only(bottom: 5), + child: RichText( + textAlign: TextAlign.start, + text: TextSpan( + children: [ + TextSpan(text: key, style: TextStyle(fontSize: 11, color: HexColor.fromHex('#999999'))), + TextSpan(text: value, style: TextStyle(fontSize: 11, color: HexColor.fromHex('#999999'))), + ] + ), + ), + )); + }); + return Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: lists, + ); + } +} diff --git a/lib/pages/team_details_page/bloc/team_details_bloc.dart b/lib/pages/team_details_page/bloc/team_details_bloc.dart index 03a5970..a0b859e 100644 --- a/lib/pages/team_details_page/bloc/team_details_bloc.dart +++ b/lib/pages/team_details_page/bloc/team_details_bloc.dart @@ -4,6 +4,8 @@ import 'package:bloc/bloc.dart'; import 'package:equatable/equatable.dart'; import 'package:flutter/cupertino.dart'; import 'package:zhiying_base_widget/pages/team_details_page/bloc/team_details_repository.dart'; +import 'package:zhiying_base_widget/pages/team_details_page/model/team_details_data_model.dart'; +import 'package:zhiying_base_widget/pages/team_details_page/model/team_details_style_model.dart'; import 'package:zhiying_comm/util/empty_util.dart'; part 'team_details_event.dart'; @@ -31,10 +33,17 @@ class TeamDetailsBloc extends Bloc { /// 初始化数据 Stream _mapInitEventToState(TeamDetailsInitEvent event) async* { - var cache = repository.fetchCacheData(); - var result = repository.fetchNetData(); - if (!EmptyUtil.isEmpty(result)) { - yield TeamDetailsLoadedState(); + var cacheStyle = await repository.fetchCacheData(); + if (!EmptyUtil.isEmpty(cacheStyle)) { + yield TeamDetailsLoadedState(styleModel: cacheStyle); + } + var resultStyle = await repository.fetchNetStyleModelData(); + if (!EmptyUtil.isEmpty(resultStyle)) { + yield TeamDetailsLoadedState(styleModel: resultStyle); + } + var resultData = await repository.fetchNetData(event?.model); + if (!EmptyUtil.isEmpty(resultData) && (!EmptyUtil.isEmpty(resultStyle) || !EmptyUtil.isEmpty(cacheStyle))) { + yield TeamDetailsLoadedState(dataModel: resultData, styleModel: !EmptyUtil.isEmpty(resultStyle) ? resultStyle : cacheStyle); } else { yield TeamDetailsErrorState(); } diff --git a/lib/pages/team_details_page/bloc/team_details_event.dart b/lib/pages/team_details_page/bloc/team_details_event.dart index defe0d1..1dadb34 100644 --- a/lib/pages/team_details_page/bloc/team_details_event.dart +++ b/lib/pages/team_details_page/bloc/team_details_event.dart @@ -2,9 +2,16 @@ part of 'team_details_bloc.dart'; abstract class TeamDetailsEvent extends Equatable { const TeamDetailsEvent(); + @override List get props => []; } /// 初始化 -class TeamDetailsInitEvent extends TeamDetailsEvent{} +class TeamDetailsInitEvent extends TeamDetailsEvent { + final Map model; + + TeamDetailsInitEvent(this.model); + @override + List get props => [this.model]; +} diff --git a/lib/pages/team_details_page/bloc/team_details_repository.dart b/lib/pages/team_details_page/bloc/team_details_repository.dart index b2124de..60f8279 100644 --- a/lib/pages/team_details_page/bloc/team_details_repository.dart +++ b/lib/pages/team_details_page/bloc/team_details_repository.dart @@ -1,15 +1,60 @@ +import 'dart:convert'; -class TeamDetailsRepository{ +import 'package:zhiying_base_widget/pages/team_details_page/model/team_details_data_model.dart'; +import 'package:zhiying_base_widget/pages/team_details_page/model/team_details_style_model.dart'; +import 'package:zhiying_comm/zhiying_comm.dart'; + +class TeamDetailsRepository { + TeamDetailsStyleModel _styleModel; + TeamDetailsDataModel _dataModel; /// 初始化数据 - Future fetchNetData() async{ + Future fetchNetData(final Map data) async { + try { + if (!EmptyUtil.isEmpty(data)) { + String fansId = data['uid']; + if (!EmptyUtil.isEmpty(fansId)) { + var result = await NetUtil.post('/api/v1/user/fan/$fansId', method: NetMethod.GET); + if (NetUtil.isSuccess(result) && !EmptyUtil.isEmpty(result[GlobalConfig.HTTP_RESPONSE_KEY_DATA])) {} + } + } + } catch (e, s) { + Logger.error(e, s); + } + return null; + } + /// 初始化Style数据 + Future fetchNetStyleModelData() async { + try { + var result = await NetUtil.post('/api/v1/mod/pub.flutter.my_fan_detail', cache: true, method: NetMethod.GET); + if (NetUtil.isSuccess(result) && !EmptyUtil.isEmpty(result[GlobalConfig.HTTP_RESPONSE_KEY_DATA])) { + var modListData = result[GlobalConfig.HTTP_RESPONSE_KEY_DATA]['mod_list'][0]['data']; + if (!EmptyUtil.isEmpty(modListData)) { + _styleModel = TeamDetailsStyleModel.fromJson(jsonDecode(modListData.toString())); + return _styleModel; + } + } + } catch (e, s) { + Logger.error(e, s); + } + return null; } /// 获取缓存数据 - Future fetchCacheData() async{ - + Future fetchCacheData() async { + try { + var result = await NetUtil.getRequestCachedData('/api/v1/mod/pub.flutter.my_fan_detail'); + if (!EmptyUtil.isEmpty(result)) { + var modListData = result['mod_list'][0]['data']; + if (!EmptyUtil.isEmpty(modListData)) { + _styleModel = TeamDetailsStyleModel.fromJson(jsonDecode(modListData.toString())); + return _styleModel; + } + } + } catch (e, s) { + Logger.error(e, s); + } + return null; } - - -} \ No newline at end of file +} diff --git a/lib/pages/team_details_page/bloc/team_details_state.dart b/lib/pages/team_details_page/bloc/team_details_state.dart index 43a17da..d4a2d46 100644 --- a/lib/pages/team_details_page/bloc/team_details_state.dart +++ b/lib/pages/team_details_page/bloc/team_details_state.dart @@ -10,7 +10,15 @@ abstract class TeamDetailsState extends Equatable { class TeamDetailsInitial extends TeamDetailsState {} /// 数据加载成功 -class TeamDetailsLoadedState extends TeamDetailsState {} +class TeamDetailsLoadedState extends TeamDetailsState { + TeamDetailsStyleModel styleModel; + TeamDetailsDataModel dataModel; + + TeamDetailsLoadedState({@required this.styleModel, this.dataModel}); + + @override + List get props => [this.styleModel, this.dataModel]; +} /// 数据加载失败 class TeamDetailsErrorState extends TeamDetailsState {} diff --git a/lib/pages/team_details_page/model/team_details_data_model.dart b/lib/pages/team_details_page/model/team_details_data_model.dart new file mode 100644 index 0000000..a5aa311 --- /dev/null +++ b/lib/pages/team_details_page/model/team_details_data_model.dart @@ -0,0 +1 @@ +class TeamDetailsDataModel{} \ No newline at end of file diff --git a/lib/pages/team_details_page/model/team_details_style_model.dart b/lib/pages/team_details_page/model/team_details_style_model.dart new file mode 100644 index 0000000..cbeac41 --- /dev/null +++ b/lib/pages/team_details_page/model/team_details_style_model.dart @@ -0,0 +1,220 @@ +import 'package:zhiying_base_widget/pages/team_page/model/team_style_model.dart'; +import 'package:meta/meta.dart'; + + +@immutable +class TeamDetailsStyleModel { + String app_bar_bg_color; + String app_bar_bg_img; + String app_bar_name; + String app_bar_name_color; + String bg_color; + List dashbord; + List dashbord_items; + String dashbord_line_color; + TeamDetailsStyleModelHeaderReferrer header_referrer; + TeamViewItem self_info; + + TeamDetailsStyleModel({ + this.app_bar_bg_color, + this.app_bar_bg_img, + this.app_bar_name, + this.app_bar_name_color, + this.bg_color, + this.dashbord, + this.dashbord_items, + this.dashbord_line_color, + this.header_referrer, + this.self_info, + }); + + factory TeamDetailsStyleModel.fromJson(Map json) { + return TeamDetailsStyleModel( + app_bar_bg_color: json['app_bar_bg_color'], + app_bar_bg_img: json['app_bar_bg_img'], + app_bar_name: json['app_bar_name'], + app_bar_name_color: json['app_bar_name_color'], + bg_color: json['bg_color'], + dashbord: json['dashbord'] != null ? (json['dashbord'] as List).map((i) => TeamDetailsStyleModelDashbord.fromJson(i)).toList() : null, + dashbord_items: json['dashbord_items'] != null ? (json['dashbord_items'] as List).map((i) => TeamDetailsStyleModelDashbordItem.fromJson(i)).toList() : null, + dashbord_line_color: json['dashbord_line_color'], + header_referrer: json['header_referrer'] != null ? TeamDetailsStyleModelHeaderReferrer.fromJson(json['header_referrer']) : null, + self_info: json['self_info'] != null ? TeamViewItem.fromJson(json['self_info']) : null, + ); + } + + Map toJson() { + final Map data = new Map(); + data['app_bar_bg_color'] = this.app_bar_bg_color; + data['app_bar_bg_img'] = this.app_bar_bg_img; + data['app_bar_name'] = this.app_bar_name; + data['app_bar_name_color'] = this.app_bar_name_color; + data['bg_color'] = this.bg_color; + data['dashbord_line_color'] = this.dashbord_line_color; + if (this.dashbord != null) { + data['dashbord'] = this.dashbord.map((v) => v.toJson()).toList(); + } + if (this.dashbord_items != null) { + data['dashbord_items'] = this.dashbord_items.map((v) => v.toJson()).toList(); + } + if (this.header_referrer != null) { + data['header_referrer'] = this.header_referrer.toJson(); + } + if (this.self_info != null) { + data['self_info'] = this.self_info.toJson(); + } + return data; + } +} + +class TeamDetailsStyleModelDashbordItem { + String bg_color; + String text_color; + String text_icon; + List texts; + String title; + String title_bg_img; + String title_color; + String value_color; + + TeamDetailsStyleModelDashbordItem({this.bg_color, this.text_color, this.text_icon, this.texts, this.title, this.title_bg_img, this.title_color, this.value_color}); + + factory TeamDetailsStyleModelDashbordItem.fromJson(Map json) { + return TeamDetailsStyleModelDashbordItem( + bg_color: json['bg_color'], + text_color: json['text_color'], + text_icon: json['text_icon'], + texts: json['texts'] != null ? new List.from(json['texts']) : null, + title: json['title'], + title_bg_img: json['title_bg_img'], + title_color: json['title_color'], + value_color: json['value_color'], + ); + } + + Map toJson() { + final Map data = new Map(); + data['bg_color'] = this.bg_color; + data['text_color'] = this.text_color; + data['text_icon'] = this.text_icon; + data['title'] = this.title; + data['title_bg_img'] = this.title_bg_img; + data['title_color'] = this.title_color; + data['value_color'] = this.value_color; + if (this.texts != null) { + data['texts'] = this.texts; + } + return data; + } +} + +class TeamDetailsStyleModelHeaderReferrer { + String bar_color; + String copy_btn_bg_color; + String copy_btn_icon; + String copy_btn_text; + String copy_btn_text_color; + String last_login_text; + String last_login_text_color; + String last_login_value_color; + String phone_color; + String phone_text; + String title; + String title_bg_color; + String title_bg_color_t; + String title_color; + String username_color; + String wx_color; + String wx_text; + String wx_value_color; + + TeamDetailsStyleModelHeaderReferrer( + {this.bar_color, + this.copy_btn_bg_color, + this.copy_btn_icon, + this.copy_btn_text, + this.copy_btn_text_color, + this.last_login_text, + this.last_login_text_color, + this.last_login_value_color, + this.phone_color, + this.phone_text, + this.title, + this.title_bg_color, + this.title_bg_color_t, + this.title_color, + this.username_color, + this.wx_color, + this.wx_text, + this.wx_value_color}); + + factory TeamDetailsStyleModelHeaderReferrer.fromJson(Map json) { + return TeamDetailsStyleModelHeaderReferrer( + bar_color: json['bar_color'], + copy_btn_bg_color: json['copy_btn_bg_color'], + copy_btn_icon: json['copy_btn_icon'], + copy_btn_text: json['copy_btn_text'], + copy_btn_text_color: json['copy_btn_text_color'], + last_login_text: json['last_login_text'], + last_login_text_color: json['last_login_text_color'], + last_login_value_color: json['last_login_value_color'], + phone_color: json['phone_color'], + phone_text: json['phone_text'], + title: json['title'], + title_bg_color: json['title_bg_color'], + title_bg_color_t: json['title_bg_color_t'], + title_color: json['title_color'], + username_color: json['username_color'], + wx_color: json['wx_color'], + wx_text: json['wx_text'], + wx_value_color: json['wx_value_color'], + ); + } + + Map toJson() { + final Map data = new Map(); + data['bar_color'] = this.bar_color; + data['copy_btn_bg_color'] = this.copy_btn_bg_color; + data['copy_btn_icon'] = this.copy_btn_icon; + data['copy_btn_text'] = this.copy_btn_text; + data['copy_btn_text_color'] = this.copy_btn_text_color; + data['last_login_text'] = this.last_login_text; + data['last_login_text_color'] = this.last_login_text_color; + data['last_login_value_color'] = this.last_login_value_color; + data['phone_color'] = this.phone_color; + data['phone_text'] = this.phone_text; + data['title'] = this.title; + data['title_bg_color'] = this.title_bg_color; + data['title_bg_color_t'] = this.title_bg_color_t; + data['title_color'] = this.title_color; + data['username_color'] = this.username_color; + data['wx_color'] = this.wx_color; + data['wx_text'] = this.wx_text; + data['wx_value_color'] = this.wx_value_color; + return data; + } +} + +class TeamDetailsStyleModelDashbord { + String name; + String name_color; + String name_selected_color; + + TeamDetailsStyleModelDashbord({this.name, this.name_color, this.name_selected_color}); + + factory TeamDetailsStyleModelDashbord.fromJson(Map json) { + return TeamDetailsStyleModelDashbord( + name: json['name'], + name_color: json['name_color'], + name_selected_color: json['name_selected_color'], + ); + } + + Map toJson() { + final Map data = new Map(); + data['name'] = this.name; + data['name_color'] = this.name_color; + data['name_selected_color'] = this.name_selected_color; + return data; + } +} diff --git a/lib/pages/team_details_page/team_details_page.dart b/lib/pages/team_details_page/team_details_page.dart index 3893fe0..9d783c3 100644 --- a/lib/pages/team_details_page/team_details_page.dart +++ b/lib/pages/team_details_page/team_details_page.dart @@ -1,35 +1,63 @@ - import 'package:flutter/material.dart'; import 'package:tab_indicator_styler/tab_indicator_styler.dart'; +import 'package:zhiying_base_widget/pages/team_details_page/bloc/team_details_bloc.dart'; +import 'package:zhiying_base_widget/pages/team_details_page/bloc/team_details_repository.dart'; +import 'package:zhiying_base_widget/pages/team_details_page/model/team_details_data_model.dart'; +import 'package:zhiying_base_widget/pages/team_details_page/model/team_details_style_model.dart'; import 'package:zhiying_base_widget/widgets/team_details/month_data/team_details_month_data_widget.dart'; import 'package:zhiying_base_widget/widgets/team_details/referrer/team_details_referrer_widget.dart'; import 'package:zhiying_comm/zhiying_comm.dart'; import 'package:zhiying_base_widget/widgets/team/fans_list/team_fans_item.dart'; +import 'package:flutter_bloc/flutter_bloc.dart'; /// /// 我的团队 - 用户详情 /// -class TeamDetailsPage extends StatefulWidget { + +class TeamDetailsPage extends StatelessWidget { + final Map data; + + TeamDetailsPage(this.data); + + @override + Widget build(BuildContext context) { + return BlocProvider( + create: (_) => TeamDetailsBloc(repository: TeamDetailsRepository())..add(TeamDetailsInitEvent(data)), + child: _TeamDetailsPage(), + ); + } +} + +class _TeamDetailsPage extends StatefulWidget { @override _TeamDetailsPageState createState() => _TeamDetailsPageState(); } -class _TeamDetailsPageState extends State { +class _TeamDetailsPageState extends State<_TeamDetailsPage> { @override Widget build(BuildContext context) { - return _getMainWidget(); + return BlocConsumer( + listener: (context, state) {}, + buildWhen: (prov, current) { + return true; + }, + builder: (context, state) { + if (state is TeamDetailsLoadedState) { + return _getMainWidget(state?.styleModel, state?.dataModel); + } + return _getMainWidget(null, null); + }, + ); } TabController controller = TabController(length: 2, vsync: ScrollableState()); /// 主视图 - Widget _getMainWidget(){ + Widget _getMainWidget(TeamDetailsStyleModel styleModel, TeamDetailsDataModel dataModel) { return Scaffold( - backgroundColor: HexColor.fromHex('#F9F9F9'), + backgroundColor: HexColor.fromHex(styleModel?.bg_color ?? '#F9F9F9'), body: CustomScrollView( slivers: [ - - /// 头部Bar SliverAppBar( // expandedHeight: 200.0, @@ -37,16 +65,16 @@ class _TeamDetailsPageState extends State { icon: Icon( Icons.arrow_back_ios, size: 22, - color: HexColor.fromHex('#333333'), + color: HexColor.fromHex( '#333333'), ), onPressed: () => Navigator.maybePop(context), ), - backgroundColor: Colors.white, + backgroundColor: HexColor.fromHex(styleModel?.app_bar_bg_color ?? '#FFFFFF'), floating: true, pinned: true, title: Text( - '用户详情', - style: TextStyle(color: HexColor.fromHex('#333333'), fontWeight: FontWeight.bold, fontSize: 18), + styleModel?.app_bar_name ?? '用户详情', + style: TextStyle(color: HexColor.fromHex( styleModel?.app_bar_name_color ?? '#333333'), fontWeight: FontWeight.bold, fontSize: 18), ), centerTitle: true, elevation: 0, @@ -72,15 +100,8 @@ class _TeamDetailsPageState extends State { labelStyle: TextStyle(fontSize: 15, fontWeight: FontWeight.bold), indicatorColor: HexColor.fromHex('#F94B47'), indicator: MaterialIndicator( - height: 2, - bottomRightRadius: 2, - bottomLeftRadius: 2, - topRightRadius: 2, - topLeftRadius: 2, - color: HexColor.fromHex('#F94B47'), - horizontalPadding: 17 - ), - unselectedLabelStyle: TextStyle(fontSize: 15 ), + height: 2, bottomRightRadius: 2, bottomLeftRadius: 2, topRightRadius: 2, topLeftRadius: 2, color: HexColor.fromHex('#F94B47'), horizontalPadding: 17), + unselectedLabelStyle: TextStyle(fontSize: 15), indicatorSize: TabBarIndicatorSize.label, labelColor: HexColor.fromHex('#000000'), unselectedLabelColor: HexColor.fromHex('#999999'), @@ -107,7 +128,6 @@ class _TeamDetailsPageState extends State { ), SliverPadding(padding: const EdgeInsets.only(bottom: 28)) - ], ), ); @@ -115,10 +135,8 @@ class _TeamDetailsPageState extends State { /// 推荐人 - /// 推荐人的信息 - /// 本月数据 & 上个月数据 } diff --git a/lib/pages/team_page/model/team_style_model.dart b/lib/pages/team_page/model/team_style_model.dart index 7fdcb3a..2622f12 100644 --- a/lib/pages/team_page/model/team_style_model.dart +++ b/lib/pages/team_page/model/team_style_model.dart @@ -1,3 +1,5 @@ +import 'package:zhiying_comm/models/base/skip_model.dart'; + class TeamStyleModel { String appBarName; String appBarNameColor; @@ -435,7 +437,7 @@ class TeamViewItemTitleList { } } -class TeamViewItem { +class TeamViewItem extends SkipModel{ String lvTextColor; String lvBgColor; String lvBgImg; @@ -518,6 +520,7 @@ class TeamViewItem { this.monthEarningValueColor}); TeamViewItem.fromJson(Map json) { + super.fromJson(json); lvTextColor = json['lv_text_color']; lvBgColor = json['lv_bg_color']; lvBgImg = json['lv_bg_img']; @@ -560,7 +563,7 @@ class TeamViewItem { } Map toJson() { - final Map data = new Map(); + final Map data = super.toJson(); data['lv_text_color'] = this.lvTextColor; data['lv_bg_color'] = this.lvBgColor; data['lv_bg_img'] = this.lvBgImg; diff --git a/lib/pages/team_page/notifier/team_page_notifier.dart b/lib/pages/team_page/notifier/team_page_notifier.dart new file mode 100644 index 0000000..f0f131b --- /dev/null +++ b/lib/pages/team_page/notifier/team_page_notifier.dart @@ -0,0 +1,33 @@ +import 'package:flutter/material.dart'; +import 'package:zhiying_comm/util/log/let_log.dart'; + +class TeamPageNotifier with ChangeNotifier { + /// taBar选中的index + int tabSelectIndex = 0; + + /// 筛选的条件 + Map reqArgs = {}; + + /// 更新筛选条件 + void updateSortCondition(String key, String args) { + reqArgs[key] = args; + Logger.log('updateSortCondition reqArgs = ${reqArgs?.toString()}'); + notifyListeners(); + } + + /// 更新选中Index + void updateTabIndex(int index) { + print('111111'); + this.tabSelectIndex = index; + } + + /// 获取筛选条件 + Map getReqArgs() { + return this.reqArgs; + } + + /// 获取当前选中的Tab下标 + int getTabIndex() { + return this.tabSelectIndex; + } +} diff --git a/lib/pages/team_page/team_page.dart b/lib/pages/team_page/team_page.dart index 8e50910..e8ec18f 100644 --- a/lib/pages/team_page/team_page.dart +++ b/lib/pages/team_page/team_page.dart @@ -5,6 +5,7 @@ import 'package:zhiying_base_widget/pages/team_page/bloc/team_bloc.dart'; import 'package:zhiying_base_widget/pages/team_page/bloc/team_repository.dart'; import 'package:zhiying_base_widget/pages/team_page/model/team_data_model.dart'; import 'package:zhiying_base_widget/pages/team_page/model/team_style_model.dart'; +import 'package:zhiying_base_widget/pages/team_page/notifier/team_page_notifier.dart'; import 'package:zhiying_base_widget/widgets/team/appbar/team_app_bar_widget.dart'; import 'package:zhiying_base_widget/widgets/team/data/team_data_widet.dart'; import 'package:zhiying_base_widget/widgets/team/fans_list/team_fans_widget.dart'; @@ -14,6 +15,7 @@ import 'package:zhiying_base_widget/widgets/team/recommend/team_recommend_widget import 'package:zhiying_comm/util/custom_sliver_persistent_header_delegate.dart'; import 'package:zhiying_comm/zhiying_comm.dart'; import 'dart:ui'; +import 'package:provider/provider.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'team_page_sk.dart'; @@ -28,9 +30,14 @@ class TeamPage extends StatelessWidget { @override Widget build(BuildContext context) { - return BlocProvider( - create: (_) => TeamBloc(repository: TeamRepository())..add(TeamInitEvent(data)), - child: _TeamPageContainer(), + return MultiProvider( + providers: [ + ChangeNotifierProvider.value(value: TeamPageNotifier()), + ], + child: BlocProvider( + create: (_) => TeamBloc(repository: TeamRepository())..add(TeamInitEvent(data)), + child: _TeamPageContainer(), + ), ); } } @@ -41,6 +48,16 @@ class _TeamPageContainer extends StatefulWidget { } class _TeamPageContainerState extends State<_TeamPageContainer> { + + TabController _controller; + // TabController 监听 + void _tabChangeListener(){ + if (!_controller.indexIsChanging) { + Logger.log('this TabController is ${_controller?.index}'); + Provider.of(context, listen: false).updateTabIndex(_controller?.index ?? 0); + } + } + @override Widget build(BuildContext context) { return BlocConsumer( @@ -64,13 +81,7 @@ class _TeamPageContainerState extends State<_TeamPageContainer> { ); } - var tabTitle = [ - '全部1', - '达人1', - '超级达人', - '运营商1', - ]; - TabController _controller; + @override void initState() { @@ -81,17 +92,22 @@ class _TeamPageContainerState extends State<_TeamPageContainer> { void _initTabController(TeamStyleModel styleModel) { if (null == _controller) { _controller = TabController(length: styleModel?.userLvTabs?.length ?? 0, vsync: ScrollableState()); + _controller.addListener(_tabChangeListener); } } @override void dispose() { + _controller?.removeListener(_tabChangeListener); _controller?.dispose(); super.dispose(); } /// 主体视图 Widget _getMainWidget(TeamStyleModel styleModel, TeamDataModel dataModel) { + + + return Scaffold( resizeToAvoidBottomPadding: false, resizeToAvoidBottomInset: false, @@ -155,12 +171,30 @@ class _TeamPageContainerState extends State<_TeamPageContainer> { // child: TabBarView(controller: _controller, children: tabTitle.map((s) => TeamFansWidget(styleModel)).toList()), child: TabBarView( controller: _controller, - children: styleModel.userLvTabs.map((item) => TeamFansWidget(styleModel, item.type)).toList(), + children: _buildTabBarView(styleModel), + // children: styleModel.userLvTabs.map((item) => TeamFansWidget(styleModel, item.type, )).toList(), ), ), ), ); } + + + /// 创建TabBarView + List _buildTabBarView(TeamStyleModel styleModel){ + List lists = []; + int length = styleModel?.userLvTabs?.length ?? 0; + if(length > 0) { + for (int i = 0; i < styleModel.userLvTabs.length; i ++) { + UserLvTabs item = styleModel.userLvTabs[i]; + lists.add(TeamFansWidget(styleModel, item.type, i)); + } + }else{ + lists.add(Container()); + } + return lists; + } + } class _SliverTabBarDelegate extends SliverPersistentHeaderDelegate { diff --git a/lib/register.dart b/lib/register.dart index 6848758..d5915b0 100644 --- a/lib/register.dart +++ b/lib/register.dart @@ -18,6 +18,7 @@ import 'package:zhiying_base_widget/pages/security_page/security_mobile/security import 'package:zhiying_base_widget/pages/security_page/security_page.dart'; import 'package:zhiying_base_widget/pages/security_page/security_password/security_password.dart'; import 'package:zhiying_base_widget/pages/setting_page/setting_page.dart'; +import 'package:zhiying_base_widget/pages/team_details_page/team_details_page.dart'; import 'package:zhiying_base_widget/pages/team_page/team_page.dart'; import 'package:zhiying_base_widget/pages/webview/base_webview.dart'; import 'package:zhiying_base_widget/pages/wechat_teacher_page/wechat_teacher_page.dart'; @@ -51,6 +52,7 @@ import 'package:zhiying_base_widget/widgets/wallet/wallet_income/wallet_income.d import 'package:zhiying_comm/util/defalut_widget_creater.dart'; import 'package:zhiying_comm/zhiying_comm.dart'; +import 'pages/message_notice_page/message_notice_page.dart'; import 'pages/search_page/search_page.dart'; import 'pages/wallet_page/wallet_page.dart'; import 'widgets/goods_details/coupon/counpon_widget.dart'; @@ -144,6 +146,10 @@ class BaseWidgetRegister { /// 我的团队 PageFactory.regist('pub.flutter.my_team', (model) => TeamPage(model)); + /// 用户详情 + PageFactory.regist('pub.flutter.my_fan_detail', (model) => TeamDetailsPage(model)); + /// 消息中心 + PageFactory.regist('pub.flutter.message_notice', (model) => MessageNoticePage(model)); } // 注册控件 diff --git a/lib/widgets/goods_details/price/goods_details_price_widget.dart b/lib/widgets/goods_details/price/goods_details_price_widget.dart index cf738d6..6c5dd88 100644 --- a/lib/widgets/goods_details/price/goods_details_price_widget.dart +++ b/lib/widgets/goods_details/price/goods_details_price_widget.dart @@ -86,8 +86,8 @@ class GoodsDetailsPriceWidget extends StatelessWidget { Widget _getQhPriceWidget(GoodsDetailsPriceModel model) { return Column( children: [ - Text(model?.ticket ?? '券后', style: TextStyle(color: HexColor.fromHex(model?.ticket_color ?? '#FF4242'), fontSize: 11)), - Text('${model?.symbol}${model?.market_price}' ?? '¥ 199', style: TextStyle(color: HexColor.fromHex(model?.ticket_price_color ?? '#FF4242'), fontSize: 10, fontFamily: 'Din', package: 'zhiying_base_widget', decoration: TextDecoration.lineThrough)), + Text( model?.is_coupon == '1' ? model?.ticket ?? '券后' : model?.hand_price_text ?? '到手价', style: TextStyle(color: HexColor.fromHex(model?.ticket_color ?? '#FF4242'), fontSize: 11)), + Text('${model?.symbol}${model?.market_price}' ?? '¥ 0', style: TextStyle(color: HexColor.fromHex(model?.ticket_price_color ?? '#FF4242'), fontSize: 10, fontFamily: 'Din', package: 'zhiying_base_widget', decoration: TextDecoration.lineThrough)), ], ); } diff --git a/lib/widgets/goods_details/price/model/goods_details_price_model.dart b/lib/widgets/goods_details/price/model/goods_details_price_model.dart index 1a6f962..0ddaa89 100644 --- a/lib/widgets/goods_details/price/model/goods_details_price_model.dart +++ b/lib/widgets/goods_details/price/model/goods_details_price_model.dart @@ -13,23 +13,27 @@ class GoodsDetailsPriceModel { String ticket_price_color; String price_color; String symbol; + String hand_price_text; + String is_coupon; - - GoodsDetailsPriceModel( - {this.buy_color, - this.buy_text, - this.current_price, - this.good_id, - this.market_price, - this.point, - this.points_bg_color, - this.points_color, - this.sold_count, - this.ticket, - this.ticket_color, - this.ticket_price_color, - this.price_color, - this.symbol}); + GoodsDetailsPriceModel({ + this.buy_color, + this.buy_text, + this.current_price, + this.good_id, + this.market_price, + this.point, + this.points_bg_color, + this.points_color, + this.sold_count, + this.ticket, + this.ticket_color, + this.ticket_price_color, + this.price_color, + this.symbol, + this.hand_price_text, + this.is_coupon, + }); factory GoodsDetailsPriceModel.fromJson(Map json) { return GoodsDetailsPriceModel( @@ -47,6 +51,8 @@ class GoodsDetailsPriceModel { ticket_price_color: json['ticket_price_color'], price_color: json['price_color'], symbol: json['symbol'], + hand_price_text: json['hand_price_text'], + is_coupon: json['is_coupon'], ); } @@ -66,6 +72,8 @@ class GoodsDetailsPriceModel { data['ticket_price_color'] = this.ticket_price_color; data['price_color'] = this.price_color; data['symbol'] = this.symbol; + data['hand_price_text'] = this.hand_price_text; + data['is_coupon'] = this.is_coupon; return data; } } diff --git a/lib/widgets/home/home_slide_banner/home_slide_banner.dart b/lib/widgets/home/home_slide_banner/home_slide_banner.dart index 8e0844a..755b90b 100644 --- a/lib/widgets/home/home_slide_banner/home_slide_banner.dart +++ b/lib/widgets/home/home_slide_banner/home_slide_banner.dart @@ -5,6 +5,7 @@ import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_swiper/flutter_swiper.dart'; import 'package:provider/provider.dart'; import 'package:zhiying_base_widget/pages/main_page/notifier/main_page_bg_notifier.dart'; +import 'package:zhiying_base_widget/pages/message_notice_page/message_notice_page.dart'; import 'package:zhiying_base_widget/pages/team_details_page/team_details_page.dart'; import 'package:zhiying_comm/zhiying_comm.dart'; @@ -54,7 +55,7 @@ class _HomeSlideBannerContainerState extends State { // Navigator.push(context, CupertinoPageRoute(builder: (_)=> TeamPage())); Navigator.push( - context, CupertinoPageRoute(builder: (_) => TeamDetailsPage())); + context, CupertinoPageRoute(builder: (_) => MessageNoticePage(null))); } @override diff --git a/lib/widgets/search/widget/text_tag_widget.dart b/lib/widgets/search/widget/text_tag_widget.dart index 0332a9d..3c04c9a 100644 --- a/lib/widgets/search/widget/text_tag_widget.dart +++ b/lib/widgets/search/widget/text_tag_widget.dart @@ -1,6 +1,7 @@ import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:cached_network_image/cached_network_image.dart'; +import 'package:zhiying_base_widget/widgets/home/home_quick_entry/cached_network_image_util.dart'; import 'package:zhiying_comm/util/empty_util.dart'; import 'color_utils.dart'; @@ -64,7 +65,7 @@ class _TestPageState extends State { @override Widget build(BuildContext context) { - if(EmptyUtil.isEmpty(widget.icon)) { + if(EmptyUtil.isEmpty(widget?.icon)) { return buildTag(); }else{ return buildTag(); @@ -74,12 +75,33 @@ class _TestPageState extends State { /// 构建按钮 Widget buildTag(){ return Container( + margin: EdgeInsets.only(right: EmptyUtil.isEmpty(widget?.icon) ? 0 : 10), + child: Column( + crossAxisAlignment: CrossAxisAlignment.end, + children: [ + Container( + margin: widget.margin, + padding: widget.padding, + decoration: BoxDecoration( + color: widget.backgroundColor, borderRadius: BorderRadius.all(Radius.circular(widget.borderRadius)), border: Border.all(color: widget.borderColor)), + child: buildTextWidget(), + ), + + Visibility( + visible: !EmptyUtil.isEmpty(widget?.icon), + child: _buildIcon(), + ), + ], + ), + ); + } - margin: widget.margin, - padding: widget.padding, - decoration: BoxDecoration( - color: widget.backgroundColor, borderRadius: BorderRadius.all(Radius.circular(widget.borderRadius)), border: Border.all(color: widget.borderColor)), - child: buildTextWidget(), + Widget _buildIcon(){ + return Transform.translate( + offset: Offset(10 ,-35), + child: Container( + child: CachedNetworkImage(imageUrl: widget?.icon ?? '', width: 35, height: 18,), + ), ); } diff --git a/lib/widgets/team/fans_list/bloc/team_list_fans_bloc.dart b/lib/widgets/team/fans_list/bloc/team_list_fans_bloc.dart index 6c61cbc..b35773a 100644 --- a/lib/widgets/team/fans_list/bloc/team_list_fans_bloc.dart +++ b/lib/widgets/team/fans_list/bloc/team_list_fans_bloc.dart @@ -12,7 +12,6 @@ part 'team_list_fans_event.dart'; part 'team_list_fans_state.dart'; class TeamListFansBloc extends Bloc { - // TeamListFansBloc() : super(TeamListFansInitial()); TeamListFansRepository repository; @@ -46,6 +45,11 @@ class TeamListFansBloc extends Bloc { if (event is TeamListFansOnSortEvent) { yield* _mapSortEventToState(event); } + + /// 整体条件筛选 + if (event is TeamListFansFilterEvent) { + yield* _mapFilterEventToState(event); + } } /// 初始化 @@ -89,4 +93,14 @@ class TeamListFansBloc extends Bloc { yield TeamListFansErrorState(); } } + + /// 整体筛选 + Stream _mapFilterEventToState(TeamListFansFilterEvent event) async* { + var result = await repository.fetchFilter(event.args); + if (!EmptyUtil.isEmpty(result)) { + yield TeamListFansLoadedState(model: result); + } else { + yield TeamListFansErrorState(); + } + } } diff --git a/lib/widgets/team/fans_list/bloc/team_list_fans_event.dart b/lib/widgets/team/fans_list/bloc/team_list_fans_event.dart index 28d90d6..d9b0cbc 100644 --- a/lib/widgets/team/fans_list/bloc/team_list_fans_event.dart +++ b/lib/widgets/team/fans_list/bloc/team_list_fans_event.dart @@ -23,7 +23,7 @@ class TeamListFansOnRefreshEvent extends TeamListFansEvent {} /// 上拉更多 class TeamListFansOnLoadEevnt extends TeamListFansEvent {} -/// 排序 +/// 排序(单个条件) class TeamListFansOnSortEvent extends TeamListFansEvent { final String key; final String args; @@ -33,3 +33,11 @@ class TeamListFansOnSortEvent extends TeamListFansEvent { @override List get props => [this.key, this.args]; } + +/// 筛选(所有条件) +class TeamListFansFilterEvent extends TeamListFansEvent{ + final Map args; + const TeamListFansFilterEvent({@required this.args}); + @override + List get props => [this.args]; +} \ No newline at end of file diff --git a/lib/widgets/team/fans_list/bloc/team_list_fans_repository.dart b/lib/widgets/team/fans_list/bloc/team_list_fans_repository.dart index 9973f85..abd56de 100644 --- a/lib/widgets/team/fans_list/bloc/team_list_fans_repository.dart +++ b/lib/widgets/team/fans_list/bloc/team_list_fans_repository.dart @@ -48,6 +48,15 @@ class TeamListFansRepository { return fetchInitData(); } + /// 整体筛选排序的方法 + Future fetchFilter(final Map reqArgs) async{ + if(!EmptyUtil.isEmpty(reqArgs)) { + _reqArgs = reqArgs; + return fetchInitData(); + } + return null; + } + /// 基础请求 Future _fetchBase() async { try { @@ -83,18 +92,20 @@ class TeamListFansRepository { sb.write(_baseUrl); sb.write(type); sb.write('?'); - _reqArgs[_pageKey] = _currentPage.toString(); - _reqArgs[_sizeKey] = _max.toString(); + _reqArgs[_pageKey] = '$_pageKey=${_currentPage.toString()}'; + _reqArgs[_sizeKey] = '$_sizeKey=${_max.toString()}'; // sb.write('${_pageKey}=${_currentPage.toString()}&'); // sb.write('${_sizeKey}=${_MAX.toString()}&'); if (!EmptyUtil.isEmpty(_reqArgs)) { _reqArgs.forEach((key, value) { - sb.write(key); - sb.write('='); - sb.write(value); - sb.write('&'); + // sb.write(key); + // sb.write('='); + if(!EmptyUtil.isEmpty(value)) { + sb.write(value); + sb.write('&'); + } }); } diff --git a/lib/widgets/team/fans_list/model/team_fans_list_model.dart b/lib/widgets/team/fans_list/model/team_fans_list_model.dart index 7863a32..08657d9 100644 --- a/lib/widgets/team/fans_list/model/team_fans_list_model.dart +++ b/lib/widgets/team/fans_list/model/team_fans_list_model.dart @@ -27,6 +27,7 @@ class TeamFansListModel { } class TeamFansListItemModel { + String uid; String avatar; String inviteCount; String lastLogin; @@ -57,6 +58,7 @@ class TeamFansListItemModel { get blurWeChat => !EmptyUtil.isEmpty(wechat) ? wechat.length > 6 ? '${wechat.substring(0, 3)}****${wechat.substring(wechat.length - 3, wechat.length)}' : wechat : wechat; TeamFansListItemModel({ + this.uid, this.avatar, this.inviteCount, this.lastLogin, @@ -78,6 +80,7 @@ class TeamFansListItemModel { factory TeamFansListItemModel.fromJson(Map json) { return TeamFansListItemModel( + uid: json['uid'], avatar: json['avatar'], inviteCount: json['invite_count'], lastLogin: json['last_login'], @@ -100,6 +103,7 @@ class TeamFansListItemModel { Map toJson() { final Map data = new Map(); + data['uid'] = this.uid; data['avatar'] = this.avatar; data['invite_count'] = this.inviteCount; data['last_login'] = this.lastLogin; diff --git a/lib/widgets/team/fans_list/team_fans_item.dart b/lib/widgets/team/fans_list/team_fans_item.dart index c60dbd3..e2f658c 100644 --- a/lib/widgets/team/fans_list/team_fans_item.dart +++ b/lib/widgets/team/fans_list/team_fans_item.dart @@ -24,9 +24,11 @@ class TeamFansItem extends StatefulWidget { class _TeamFansItemState extends State { /// 跳去粉丝详情 void _openFansItemDetailsPage() { - Navigator.push(context, CupertinoPageRoute(builder: (_) => TeamDetailsPage())); + // Navigator.push(context, CupertinoPageRoute(builder: (_) => TeamDetailsPage(null))); + RouterUtil.route(widget?.styleModel?.teamViewItem, widget?.dataModel?.toJson(), context); } + /// 复制文字 void _copyText() { Fluttertoast.showToast(msg: '复制成功~'); } diff --git a/lib/widgets/team/fans_list/team_fans_widget.dart b/lib/widgets/team/fans_list/team_fans_widget.dart index 62bf605..677221d 100644 --- a/lib/widgets/team/fans_list/team_fans_widget.dart +++ b/lib/widgets/team/fans_list/team_fans_widget.dart @@ -3,11 +3,13 @@ import 'package:flutter/material.dart'; import 'package:pull_to_refresh/pull_to_refresh.dart'; import 'package:zhiying_base_widget/pages/team_page/model/team_style_model.dart'; import 'package:cached_network_image/cached_network_image.dart'; +import 'package:zhiying_base_widget/pages/team_page/notifier/team_page_notifier.dart'; import 'package:zhiying_base_widget/widgets/team/fans_list/bloc/team_list_fans_repository.dart'; import 'package:zhiying_base_widget/widgets/team/fans_list/model/team_fans_list_model.dart'; import 'package:zhiying_comm/zhiying_comm.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:fluttertoast/fluttertoast.dart'; +import 'package:provider/provider.dart'; import 'bloc/team_list_fans_bloc.dart'; import 'team_fans_item.dart'; @@ -16,8 +18,9 @@ import 'team_fans_number_item.dart'; class TeamFansWidget extends StatefulWidget { TeamStyleModel styleModel; final String type; + final int tabCurrentIndex; - TeamFansWidget(this.styleModel, this.type); + TeamFansWidget(this.styleModel, this.type, this.tabCurrentIndex); @override _TeamFansWidgetState createState() => _TeamFansWidgetState(); @@ -28,7 +31,7 @@ class _TeamFansWidgetState extends State with AutomaticKeepAlive Widget build(BuildContext context) { return BlocProvider( create: (_) => TeamListFansBloc(TeamListFansRepository(type: widget?.type)), - child: _TeamFansWidgetContainer(widget?.styleModel), + child: _TeamFansWidgetContainer(widget?.styleModel, widget?.tabCurrentIndex), ); } @@ -38,8 +41,9 @@ class _TeamFansWidgetState extends State with AutomaticKeepAlive class _TeamFansWidgetContainer extends StatefulWidget { TeamStyleModel styleModel; + final int tabCurrentIndex; - _TeamFansWidgetContainer(this.styleModel); + _TeamFansWidgetContainer(this.styleModel, this.tabCurrentIndex); @override __TeamFansWidgetContainerState createState() => __TeamFansWidgetContainerState(); @@ -47,17 +51,20 @@ class _TeamFansWidgetContainer extends StatefulWidget { class __TeamFansWidgetContainerState extends State<_TeamFansWidgetContainer> { RefreshController _refreshController; + int tabSelectIndex = 0; /// 上拉更多 void _onLoading() async { - // _refreshController.loadComplete(); - BlocProvider.of(context).add(TeamListFansOnLoadEevnt()); + // if(widget.tabCurrentIndex == tabSelectIndex ) { + BlocProvider.of(context).add(TeamListFansOnLoadEevnt()); + // } } /// 下拉刷新 void _onRefresh() async { - // _refreshController.refreshCompleted(resetFooterState: true); - BlocProvider.of(context).add(TeamListFansOnRefreshEvent()); + // if(widget.tabCurrentIndex == tabSelectIndex || _refreshController.initialRefresh) { + BlocProvider.of(context).add(TeamListFansOnRefreshEvent()); + // } } @override @@ -66,6 +73,21 @@ class __TeamFansWidgetContainerState extends State<_TeamFansWidgetContainer> { super.initState(); } + @override + void didChangeDependencies() { + TeamPageNotifier notifier = Provider.of(context); + if (null != notifier) { + tabSelectIndex = notifier?.getTabIndex() ?? 0; + Map reqArgs = notifier?.getReqArgs() ?? null; + if(widget.tabCurrentIndex == tabSelectIndex && !EmptyUtil.isEmpty(reqArgs)) { + Logger.log('didChangeDependencies, currentTabIndex = ${widget?.tabCurrentIndex}, tabSelectIndex = $tabSelectIndex , reqArgs = ${reqArgs?.toString()}'); + // _refreshController.refreshToIdle(); + BlocProvider.of(context).add(TeamListFansFilterEvent(args: reqArgs)); + } + } + super.didChangeDependencies(); + } + @override void dispose() { _refreshController?.dispose(); @@ -78,7 +100,6 @@ class __TeamFansWidgetContainerState extends State<_TeamFansWidgetContainer> { return BlocConsumer( listener: (context, current) { - Logger.log('listener current current current current current $current'); if (current is TeamListFansOnLoadErrorState) { _refreshController?.loadNoData(); } @@ -94,12 +115,11 @@ class __TeamFansWidgetContainerState extends State<_TeamFansWidgetContainer> { } }, buildWhen: (prov, current) { - Logger.log('buildWhen current current current current current $current'); if (current is TeamListFansErrorState) { if (prov is TeamListFansLoadedState) { - Fluttertoast.showToast(msg: '网络似乎开小差了~'); + // Fluttertoast.showToast(msg: '网络似乎开小差了~'); } - return false; + return true; } // 加载更多成功 if (current is TeamListFansOnLoadSuccessState) { diff --git a/lib/widgets/team/filter/team_filter_widget.dart b/lib/widgets/team/filter/team_filter_widget.dart index 49f737a..edf419d 100644 --- a/lib/widgets/team/filter/team_filter_widget.dart +++ b/lib/widgets/team/filter/team_filter_widget.dart @@ -1,7 +1,9 @@ import 'package:flutter/material.dart'; import 'package:zhiying_base_widget/pages/team_page/model/team_style_model.dart'; import 'package:cached_network_image/cached_network_image.dart'; +import 'package:zhiying_base_widget/pages/team_page/notifier/team_page_notifier.dart'; import 'package:zhiying_comm/zhiying_comm.dart'; +import 'package:provider/provider.dart'; class TeamFilterWidget extends StatefulWidget { TeamStyleModel styleModel; @@ -18,6 +20,9 @@ class _TeamFilterWidgetState extends State { void _onClick(TeamViewSortList item) { print('item selectState = ${item.selectState}'); + + String id = '1'; + String args = ''; if (item.type != SPECIAL_TYPE) { widget.styleModel.teamViewSortList.forEach((listItem) { if (listItem.type != SPECIAL_TYPE && listItem.type != item.type) { @@ -25,11 +30,17 @@ class _TeamFilterWidgetState extends State { } }); item.updateSelectState(); - setState(() {}); + id = item.args[0].id; + args = item.selectState == 0 ? args : item.selectState == 1 ? item?.args[0]?.queryArgs ?? args : item.selectState == 2 ? item?.args[1]?.queryArgs ?? args : args; } else { item.updateSelectState(); - setState(() {}); + id = item.selectState == 0 ? item?.args[0]?.id ?? id : item.selectState == 1 ? item?.args[1]?.id ?? id : item.selectState == 2 ? item?.args[2]?.id ?? id : id; + args = item.selectState == 0 + ? item?.args[0]?.queryArgs ?? args + : item.selectState == 1 ? item?.args[1]?.queryArgs ?? args : item.selectState == 2 ? item?.args[2]?.queryArgs ?? args : args; } + Provider.of(context, listen: false).updateSortCondition(id, args); + setState(() {}); } @override @@ -43,20 +54,18 @@ class _TeamFilterWidgetState extends State { children: widget.styleModel.teamViewSortList.map((item) { if (item.type != SPECIAL_TYPE) { return _getCustomWidget( - item: item, - text: item?.name, - textColor: item.selectState == 0 ? item?.nameColor : item?.nameSelectedColor, - icon: item.selectState == 0 ? item?.icon1 : item.selectState == 1 ? item.icon2 : item.selectState == 2 ? item.icon3 : item.icon1, - isSelect: item.selectState != 0 - ); + item: item, + text: item?.name, + textColor: item.selectState == 0 ? item?.nameColor : item?.nameSelectedColor, + icon: item.selectState == 0 ? item?.icon1 : item.selectState == 1 ? item.icon2 : item.selectState == 2 ? item.icon3 : item.icon1, + isSelect: item.selectState != 0); } else { return _getCustomWidget( - item: item, - text: item.selectState == 0 ? item.args[0].name : item.selectState == 1 ? item.args[1].name : item.selectState == 2 ? item.args[2].name : item.args[0].name, - textColor: item?.nameSelectedColor, - icon: item?.icon1, - isSelect: true - ); + item: item, + text: item.selectState == 0 ? item.args[0].name : item.selectState == 1 ? item.args[1].name : item.selectState == 2 ? item.args[2].name : item.args[0].name, + textColor: item?.nameSelectedColor, + icon: item?.icon1, + isSelect: true); } }).toList(), ), @@ -71,11 +80,7 @@ class _TeamFilterWidgetState extends State { children: [ Text( text ?? '', - style: TextStyle( - fontSize: 12, - color: HexColor.fromHex(textColor), - fontWeight: isSelect ? FontWeight.bold : FontWeight.w400 - ), + style: TextStyle(fontSize: 12, color: HexColor.fromHex(textColor), fontWeight: isSelect ? FontWeight.bold : FontWeight.w400), ), const SizedBox(width: 3), CachedNetworkImage( diff --git a/lib/widgets/team/input/team_input_widget.dart b/lib/widgets/team/input/team_input_widget.dart index 04a7bcc..cfb87a1 100644 --- a/lib/widgets/team/input/team_input_widget.dart +++ b/lib/widgets/team/input/team_input_widget.dart @@ -1,12 +1,11 @@ - import 'package:flutter/material.dart'; import 'package:zhiying_base_widget/pages/team_page/model/team_style_model.dart'; import 'package:cached_network_image/cached_network_image.dart'; import 'package:zhiying_comm/zhiying_comm.dart'; class TeamInputWidget extends StatefulWidget { - TeamStyleModel styleModel; + TeamInputWidget(this.styleModel); @override @@ -14,13 +13,33 @@ class TeamInputWidget extends StatefulWidget { } class _TeamInputWidgetState extends State { - TextEditingController _controller; FocusNode _focusNode; + bool _showCancel = false; /// 搜索方法 - void _onSearchClick(){} + void _onSearchClick() {} + + /// 点击取消输入 + void _cancel() { + _controller?.clear(); + } + void _onChange(text){ + if(!EmptyUtil.isEmpty(text)){ + if(!_showCancel){ + setState(() { + _showCancel = true; + }); + } + }else{ + if(_showCancel) { + setState(() { + _showCancel = false; + }); + } + } + } @override void initState() { @@ -65,51 +84,78 @@ class _TeamInputWidgetState extends State { borderRadius: BorderRadius.circular(30), color: HexColor.fromHex(widget?.styleModel?.headerNoReferrerInputBgColor ?? '#F7F7F7'), ), - padding: const EdgeInsets.only(top: 5, bottom: 4.5, left: 7.5, right: 7.5), + // padding: const EdgeInsets.only(top: 5, bottom: 4.5, left: 7.5, right: 7.5), width: double.infinity, child: Row( children: [ // Container(width: 11.5, height: 11.5, color: Colors.red,), + /// 查询图标 + Padding( + padding: const EdgeInsets.only(top: 5, bottom: 4.5, left: 7.5), + child: CachedNetworkImage( + imageUrl: widget?.styleModel?.searchBarLeftIcon, + width: 11.5, + )), - CachedNetworkImage(imageUrl: widget?.styleModel?.searchBarLeftIcon, width: 11.5,), - - Expanded(child: Container( - color: Colors.transparent, - child: TextField( - controller: _controller, - focusNode: _focusNode, - style: TextStyle(fontSize: 11 , color: HexColor.fromHex(widget?.styleModel?.headerNoReferrerInputColor ?? '#000000'), textBaseline: TextBaseline.alphabetic), - decoration: InputDecoration( - focusedBorder: InputBorder.none, - border: InputBorder.none, - focusedErrorBorder: InputBorder.none, - errorBorder: InputBorder.none, - disabledBorder: InputBorder.none, - enabledBorder: InputBorder.none, - filled: true, - isDense: true, - contentPadding: const EdgeInsets.only(left: 6, bottom: 0, top: 0, right: 0), - fillColor: Colors.transparent, - hintStyle: TextStyle(fontSize: 11 , color: HexColor.fromHex(widget?.styleModel?.searchBarHideTextColor ?? '#999999'), textBaseline: TextBaseline.alphabetic), - hintText: widget?.styleModel?.searchBarHideText ?? '输入需搜索的手机号/昵称', + Expanded( + child: Container( + padding: const EdgeInsets.only(top: 5, bottom: 4.5), + color: Colors.transparent, + child: TextField( + controller: _controller, + focusNode: _focusNode, + onChanged: _onChange, + style: TextStyle(fontSize: 11, color: HexColor.fromHex(widget?.styleModel?.headerNoReferrerInputColor ?? '#000000'), textBaseline: TextBaseline.alphabetic), + decoration: InputDecoration( + focusedBorder: InputBorder.none, + border: InputBorder.none, + focusedErrorBorder: InputBorder.none, + errorBorder: InputBorder.none, + disabledBorder: InputBorder.none, + enabledBorder: InputBorder.none, + filled: true, + isDense: true, + contentPadding: const EdgeInsets.only(left: 6, bottom: 0, top: 0, right: 0), + fillColor: Colors.transparent, + hintStyle: + TextStyle(fontSize: 11, color: HexColor.fromHex(widget?.styleModel?.searchBarHideTextColor ?? '#999999'), textBaseline: TextBaseline.alphabetic), + hintText: widget?.styleModel?.searchBarHideText ?? '输入需搜索的手机号/昵称', + ), ), ), - ),), + ), // Container(width: 15, height: 15, color: Colors.red,) - CachedNetworkImage(imageUrl: widget?.styleModel?.searchBarRightIcon, width: 11.5,), + /// 关闭按钮 + Visibility( + visible: _showCancel, + child: GestureDetector( + behavior: HitTestBehavior.opaque, + onTap: () => _cancel(), + child: Padding( + padding: const EdgeInsets.only(top: 5, bottom: 4.5, right: 7.5), + child: CachedNetworkImage( + imageUrl: widget?.styleModel?.searchBarRightIcon, + width: 11.5, + ), + )), + ), ], ), ), ), const SizedBox(width: 8), + /// 确定按钮 GestureDetector( behavior: HitTestBehavior.opaque, - onTap: ()=> _onSearchClick(), + onTap: () => _onSearchClick(), child: Container( decoration: BoxDecoration(borderRadius: BorderRadius.circular(30), color: HexColor.fromHex(widget?.styleModel?.searchBarBtnBgColor ?? '#FF4242')), padding: const EdgeInsets.only(left: 15, right: 15, bottom: 6.5, top: 6.5), - child: Text(widget?.styleModel?.searchBarBtnText ?? '搜索', style: TextStyle(color: HexColor.fromHex(widget?.styleModel?.searchBarBtnTextColor ?? '#FFFFFF'), fontSize: 11),), + child: Text( + widget?.styleModel?.searchBarBtnText ?? '搜索', + style: TextStyle(color: HexColor.fromHex(widget?.styleModel?.searchBarBtnTextColor ?? '#FFFFFF'), fontSize: 11), + ), ), ) ], diff --git a/lib/widgets/wallet/wallet_detail/wallet_detail.dart b/lib/widgets/wallet/wallet_detail/wallet_detail.dart index 18d90d3..0c5b2ec 100644 --- a/lib/widgets/wallet/wallet_detail/wallet_detail.dart +++ b/lib/widgets/wallet/wallet_detail/wallet_detail.dart @@ -82,7 +82,7 @@ class _WalletDetailState extends State ///日期选择 Container( - height: 75.h, + height: 100.h, child: ListView.builder( padding: EdgeInsets.only(top: 16,left: 16.w), itemCount: _model.dateList.length,