From 5fbdeae8423b07a7c38df1b819907035061cfd0c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=A8=E5=8D=8E=E8=BD=A9?= <646903573@qq.com> Date: Mon, 30 Nov 2020 16:57:00 +0800 Subject: [PATCH] =?UTF-8?q?1.=E9=92=B1=E5=8C=85=20-=20=E4=BF=AE=E5=A4=8D?= =?UTF-8?q?=E7=99=BB=E5=BD=95=E5=90=8E=E6=95=B0=E6=8D=AE=E6=97=A0=E5=88=B7?= =?UTF-8?q?=E6=96=B0=E9=97=AE=E9=A2=98=202.=E7=83=AD=E6=A6=9C=20-=20?= =?UTF-8?q?=E5=8A=A0=E5=85=A5=E7=BC=93=E5=AD=98=E8=AF=BB=E5=8F=96=E9=80=BB?= =?UTF-8?q?=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/pages/wallet_page/wallet_page.dart | 40 ++++-- lib/pages/wallet_page/wallet_page_bloc.dart | 2 +- .../hot_ranking_list/hot_ranking_bloc.dart | 10 +- .../wallet/wallet_data/wallet_data.dart | 21 ++- .../wallet/wallet_detail/wallet_detail.dart | 132 ++++++++++++++---- .../wallet_detail/wallet_detail_bloc.dart | 4 +- 6 files changed, 167 insertions(+), 42 deletions(-) diff --git a/lib/pages/wallet_page/wallet_page.dart b/lib/pages/wallet_page/wallet_page.dart index 9180386..07c0274 100644 --- a/lib/pages/wallet_page/wallet_page.dart +++ b/lib/pages/wallet_page/wallet_page.dart @@ -5,6 +5,7 @@ import 'package:pull_to_refresh/pull_to_refresh.dart'; import 'package:zhiying_base_widget/pages/main_page/notifier/main_page_bg_notifier.dart'; import 'package:zhiying_base_widget/pages/main_page/notifier/main_page_notifier.dart'; import 'package:zhiying_base_widget/utils/contants.dart'; +import 'package:zhiying_base_widget/widgets/hot_ranking/hot_ranking_list/model/hot_ranking_list_model.dart'; import 'package:zhiying_base_widget/widgets/refresh/refresh_header/refresh_header.dart'; import 'package:zhiying_base_widget/widgets/wallet/wallet_appbar/wallet_appbar_sk.dart'; import 'package:zhiying_base_widget/widgets/wallet/wallet_data/wallet_data_sk.dart'; @@ -13,6 +14,7 @@ import 'package:zhiying_base_widget/widgets/wallet/wallet_income/wallet_income_s import 'package:zhiying_comm/util/base_bloc.dart'; import 'package:zhiying_comm/zhiying_comm.dart'; import 'dart:ui'; +import 'package:provider/provider.dart'; import 'wallet_page_bloc.dart'; @@ -33,12 +35,13 @@ class _WalletPageState extends State { backgroundColor: Color(0xfff9f9f9), body: MultiProvider( providers: [ - ChangeNotifierProvider.value(value: MainPageNotifier()), - ChangeNotifierProvider.value(value: MainPageBgNotifier()), + ChangeNotifierProvider.value(value: BaseChangeNotifier()), ], child: BlocProvider( bloc: WalletPageBloc(), - child: _WalletPageContainer(data: widget.data), + child: _WalletPageContainer( + data: widget.data, + ), ), ), ); @@ -54,7 +57,8 @@ class _WalletPageContainer extends StatefulWidget { _WalletPageContainerState createState() => _WalletPageContainerState(); } -class _WalletPageContainerState extends State<_WalletPageContainer> { +class _WalletPageContainerState extends State<_WalletPageContainer> + with AutomaticKeepAliveClientMixin { ScrollController _controller; RefreshController _refreshController; @@ -71,9 +75,22 @@ class _WalletPageContainerState extends State<_WalletPageContainer> { super.initState(); } + @override + void didChangeDependencies() { + var userInfo = Provider.of(context); + if (userInfo != null) { + if (widget.data.containsKey(Constants.SkipIdentifierName)) { + _pageBloc.loadData(widget.data[Constants.SkipIdentifierName]); + Provider.of(context,listen: false).refresh(); + } + } + super.didChangeDependencies(); + } + @override void dispose() { _refreshController?.dispose(); + Provider.of(context,listen: false).close(); super.dispose(); } @@ -86,6 +103,7 @@ class _WalletPageContainerState extends State<_WalletPageContainer> { void _onRefresh() async { if (widget.data.containsKey(Constants.SkipIdentifierName)) { _pageBloc.loadData(widget.data[Constants.SkipIdentifierName]); + Provider.of(context,listen: false).refresh(); } } @@ -93,7 +111,6 @@ class _WalletPageContainerState extends State<_WalletPageContainer> { Widget build(BuildContext context) { ScreenUtil.init(context, width: 750, height: 1334); double top = MediaQueryData.fromWindow(window).padding.top; - return Container( width: double.infinity, child: Stack( @@ -130,7 +147,8 @@ class _WalletPageContainerState extends State<_WalletPageContainer> { ); } - List _createContent(BuildContext context, List> model) { + List _createContent( + BuildContext context, List> model) { List list = List(); if (model == null) { ///骨架图 @@ -148,12 +166,18 @@ class _WalletPageContainerState extends State<_WalletPageContainer> { )); } else { for (var item in model) { - WidgetModel widgetModel = WidgetModel.fromJson(Map.from(item)); - list.addAll(WidgetFactory.create(widgetModel.modName, isSliver: true, model: item)); + WidgetModel widgetModel = + WidgetModel.fromJson(Map.from(item)); + list.addAll(WidgetFactory.create(widgetModel.modName, + isSliver: true, model: item)); } } return list; } + + @override + // TODO: implement wantKeepAlive + bool get wantKeepAlive => true; } // class _SilverAppBarDelegate extends SliverPersistentHeaderDelegate { diff --git a/lib/pages/wallet_page/wallet_page_bloc.dart b/lib/pages/wallet_page/wallet_page_bloc.dart index f949f30..8862ea3 100644 --- a/lib/pages/wallet_page/wallet_page_bloc.dart +++ b/lib/pages/wallet_page/wallet_page_bloc.dart @@ -11,7 +11,7 @@ import 'package:zhiying_comm/zhiying_comm.dart'; class WalletPageBloc extends BlocBase { StreamController>> _tabController = - StreamController>>(); + StreamController>>.broadcast(); Stream>> get outData => _tabController.stream; diff --git a/lib/widgets/hot_ranking/hot_ranking_list/hot_ranking_bloc.dart b/lib/widgets/hot_ranking/hot_ranking_list/hot_ranking_bloc.dart index 709b423..b51ac9b 100644 --- a/lib/widgets/hot_ranking/hot_ranking_list/hot_ranking_bloc.dart +++ b/lib/widgets/hot_ranking/hot_ranking_list/hot_ranking_bloc.dart @@ -30,16 +30,20 @@ class HotRankingListBloc extends BlocBase { _dataController = null; } - void loadData(String typeId, int page, Function complete) { + void loadData(String typeId, int page, Function complete) async { if (isLoading) { complete(); return; } isLoading = true; currentTypeId = typeId; - NetUtil.request( + await NetUtil.request( '/api/v1/rec/taobao?type_id=' + typeId + '&page=' + page.toString(), - method: NetMethod.GET, onSuccess: (data) { + method: NetMethod.GET, onCache: (data) { + complete(); + Loading.dismiss(); + _loadData(data); + }, onSuccess: (data) { complete(); isLoading = false; _loadData(data); diff --git a/lib/widgets/wallet/wallet_data/wallet_data.dart b/lib/widgets/wallet/wallet_data/wallet_data.dart index 9267e0b..fba20a2 100644 --- a/lib/widgets/wallet/wallet_data/wallet_data.dart +++ b/lib/widgets/wallet/wallet_data/wallet_data.dart @@ -7,11 +7,12 @@ import 'package:zhiying_base_widget/widgets/wallet/wallet_data/model/wallet_head import 'package:zhiying_base_widget/widgets/wallet/wallet_data/wallet_data_bloc.dart'; import 'package:zhiying_base_widget/widgets/wallet/wallet_data/wallet_data_sk.dart'; import 'package:zhiying_comm/zhiying_comm.dart'; +import 'package:provider/provider.dart'; class WalletData extends StatefulWidget { final Map data; - const WalletData(this.data, {Key key}) : super(key: key); + WalletData(this.data, {Key key}) : super(key: key); @override _WalletDataState createState() => _WalletDataState(); @@ -25,15 +26,29 @@ class _WalletDataState extends State { @override void initState() { + super.initState(); data = widget.data; _bloc = WalletDataBloc(); _bloc.loadHeaderData(); - super.initState(); + } + + @override + void didChangeDependencies() { + + RefreshListener.listen(context, (event) { + _bloc.loadHeaderData(); + }); + super.didChangeDependencies(); + } + + + @override + void dispose() { + super.dispose(); } @override Widget build(BuildContext context) { - print(data); WalletHeaderModel model; return StreamBuilder( diff --git a/lib/widgets/wallet/wallet_detail/wallet_detail.dart b/lib/widgets/wallet/wallet_detail/wallet_detail.dart index c92eb9e..f7b84b7 100644 --- a/lib/widgets/wallet/wallet_detail/wallet_detail.dart +++ b/lib/widgets/wallet/wallet_detail/wallet_detail.dart @@ -9,6 +9,7 @@ import 'package:zhiying_base_widget/widgets/wallet/wallet_detail/wallet_detail_b import 'package:zhiying_base_widget/widgets/wallet/wallet_detail/wallet_detail_sk.dart'; import 'package:cached_network_image/cached_network_image.dart'; import 'package:zhiying_comm/zhiying_comm.dart'; +import 'package:provider/provider.dart'; class WalletDetail extends StatefulWidget { final Map data; @@ -22,7 +23,8 @@ class WalletDetail extends StatefulWidget { _WalletDetailState createState() => _WalletDetailState(); } -class _WalletDetailState extends State with TickerProviderStateMixin { +class _WalletDetailState extends State + with TickerProviderStateMixin { WalletDetailModel _model; TabController _tabController; @@ -33,13 +35,35 @@ class _WalletDetailState extends State with TickerProviderStateMix void initState() { if (widget.data != null) { _model = WalletDetailModel.fromJson(json.decode(widget.data['data'])); - _tabController = TabController(length: _model.providers.length, vsync: this); + _tabController = + TabController(length: _model.providers.length, vsync: this); } _bloc = new WalletDetailBloc(); _bloc.loadData(_model.providers[0].type); + super.initState(); } + + @override + void didChangeDependencies() { + RefreshListener.listen(context, (event) { + if (event == "refresh") { + if (_bloc.currentType == null) { + _bloc.loadData(_model.providers[0].type); + } else { + _bloc.loadData(_bloc.currentType); + } + } + }); + super.didChangeDependencies(); + } + + @override + void dispose() { + super.dispose(); + } + @override Widget build(BuildContext context) { return StreamBuilder( @@ -50,8 +74,10 @@ class _WalletDetailState extends State with TickerProviderStateMix return WalletDetailSkeleton(); } return Container( - decoration: BoxDecoration(color: Colors.white, borderRadius: BorderRadius.circular(8)), - margin: EdgeInsets.only(left: 12.5, right: 12.5, top: 7.5, bottom: 7.5), + decoration: BoxDecoration( + color: Colors.white, borderRadius: BorderRadius.circular(8)), + margin: + EdgeInsets.only(left: 12.5, right: 12.5, top: 7.5, bottom: 7.5), padding: const EdgeInsets.only(bottom: 13), child: Column( crossAxisAlignment: CrossAxisAlignment.start, @@ -70,10 +96,13 @@ class _WalletDetailState extends State with TickerProviderStateMix color: HexColor.fromHex(_model.providers[0].selectColor), ), isScrollable: true, - unselectedLabelColor: HexColor.fromHex(_model.providers[0].unselectColor), - labelColor: HexColor.fromHex(_model.providers[0].selectColor), + unselectedLabelColor: + HexColor.fromHex(_model.providers[0].unselectColor), + labelColor: + HexColor.fromHex(_model.providers[0].selectColor), controller: _tabController, - indicatorColor: HexColor.fromHex(_model.providers[0].selectColor), + indicatorColor: + HexColor.fromHex(_model.providers[0].selectColor), indicatorSize: TabBarIndicatorSize.label, onTap: (index) { ///变更平台 @@ -87,7 +116,7 @@ class _WalletDetailState extends State with TickerProviderStateMix height: 50, alignment: Alignment.center, child: ListView.builder( - padding: EdgeInsets.only( left: 8), + padding: EdgeInsets.only(left: 8), itemCount: _model.dateList.length, scrollDirection: Axis.horizontal, itemBuilder: _buildTimeItem, @@ -99,7 +128,11 @@ class _WalletDetailState extends State with TickerProviderStateMix height: 63, margin: EdgeInsets.only(top: 16, left: 15, right: 15), width: double.infinity, - decoration: BoxDecoration(image: DecorationImage(image: CachedNetworkImageProvider(_model.providerDashbord.finish.bgImg), fit: BoxFit.fill)), + decoration: BoxDecoration( + image: DecorationImage( + image: CachedNetworkImageProvider( + _model.providerDashbord.finish.bgImg), + fit: BoxFit.fill)), child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ @@ -109,7 +142,10 @@ class _WalletDetailState extends State with TickerProviderStateMix padding: const EdgeInsets.all(8.0), child: Text( _model.providerDashbord.finish.text, - style: TextStyle(fontSize: 14, color: HexColor.fromHex(_model.providerDashbord.finish.textColor)), + style: TextStyle( + fontSize: 14, + color: HexColor.fromHex(_model + .providerDashbord.finish.textColor)), ), ), Row( @@ -123,7 +159,9 @@ class _WalletDetailState extends State with TickerProviderStateMix child: Padding( padding: const EdgeInsets.all(8.0), child: CachedNetworkImage( - imageUrl: _model.providerDashbord.finish.tipIcon ?? "", + imageUrl: + _model.providerDashbord.finish.tipIcon ?? + "", width: 10, height: 10, fit: BoxFit.fill, @@ -131,13 +169,19 @@ class _WalletDetailState extends State with TickerProviderStateMix ), onTap: () { ///显示弹窗 - showTipDialog(null, _model.providerDashbord.finish.tipText); + showTipDialog( + null, _model.providerDashbord.finish.tipText); }) ], ), Text( _bloc.selectDateData.finish ?? "", - style: TextStyle(color: Colors.red, fontSize: 20, fontFamily: 'Din', package: 'zhiying_base_widget', fontWeight: FontWeight.bold), + style: TextStyle( + color: Colors.red, + fontSize: 20, + fontFamily: 'Din', + package: 'zhiying_base_widget', + fontWeight: FontWeight.bold), ) ], ), @@ -149,7 +193,8 @@ class _WalletDetailState extends State with TickerProviderStateMix shrinkWrap: true, physics: NeverScrollableScrollPhysics(), itemBuilder: (context, index) { - return _buildBottomItem(context, index, _model.providerDashbord); + return _buildBottomItem( + context, index, _model.providerDashbord); }), ) ], @@ -165,7 +210,9 @@ class _WalletDetailState extends State with TickerProviderStateMix for (var item in _model.providers) { listWidget.add(Text( item.name, - style: TextStyle(fontSize: 14, ), + style: TextStyle( + fontSize: 14, + ), )); } return listWidget; @@ -177,14 +224,23 @@ class _WalletDetailState extends State with TickerProviderStateMix child: Container( margin: EdgeInsets.only(top: 0, left: 8, right: 8), decoration: BoxDecoration( - image: DecorationImage(image: CachedNetworkImageProvider(item.type == _bloc.selectDateData.type ? item.btnImg ?? "" : item.btnNoColorImg ?? ""), fit: BoxFit.fitWidth), + image: DecorationImage( + image: CachedNetworkImageProvider( + item.type == _bloc.selectDateData.type + ? item.btnImg ?? "" + : item.btnNoColorImg ?? ""), + fit: BoxFit.fitWidth), ), child: Padding( padding: const EdgeInsets.only(left: 16, right: 16), child: Center( child: Text( item.text, - style: TextStyle(fontSize: 11, color: HexColor.fromHex(item.type == _bloc.selectDateData.type ? item.textSelectColor : item.textUnselectColor)), + style: TextStyle( + fontSize: 11, + color: HexColor.fromHex(item.type == _bloc.selectDateData.type + ? item.textSelectColor + : item.textUnselectColor)), )), ), ), @@ -201,7 +257,8 @@ class _WalletDetailState extends State with TickerProviderStateMix } ///底部显示 - Widget _buildBottomItem(BuildContext context, int index, ProviderDashbord dashbord) { + Widget _buildBottomItem( + BuildContext context, int index, ProviderDashbord dashbord) { SelfBuy item; if (index == 0) { item = dashbord.selfBuy; @@ -223,7 +280,8 @@ class _WalletDetailState extends State with TickerProviderStateMix ? Container() : Text( item.title, - style: TextStyle(color: HexColor.fromHex(item.titleColor), fontSize: 14), + style: TextStyle( + color: HexColor.fromHex(item.titleColor), fontSize: 14), ), SizedBox( height: 7.5, @@ -236,7 +294,11 @@ class _WalletDetailState extends State with TickerProviderStateMix height: 61.5, margin: EdgeInsets.only(right: 8, left: 15), padding: EdgeInsets.only(left: 10), - decoration: BoxDecoration(image: DecorationImage(image: CachedNetworkImageProvider(item.itemList[0].bgImg ?? ""), fit: BoxFit.fill)), + decoration: BoxDecoration( + image: DecorationImage( + image: CachedNetworkImageProvider( + item.itemList[0].bgImg ?? ""), + fit: BoxFit.fill)), child: Column( mainAxisAlignment: MainAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.start, @@ -245,7 +307,10 @@ class _WalletDetailState extends State with TickerProviderStateMix children: [ Text( item.itemList[0].text ?? "", - style: TextStyle(fontSize: 11, color: HexColor.fromHex(item.itemList[0].textColor)), + style: TextStyle( + fontSize: 11, + color: HexColor.fromHex( + item.itemList[0].textColor)), ), InkWell( child: Padding( @@ -270,7 +335,8 @@ class _WalletDetailState extends State with TickerProviderStateMix package: 'zhiying_base_widget', fontWeight: FontWeight.bold, fontSize: 17, - color: HexColor.fromHex(item.itemList[1].valueColor), + color: + HexColor.fromHex(item.itemList[1].valueColor), )) ], )), @@ -278,9 +344,16 @@ class _WalletDetailState extends State with TickerProviderStateMix Expanded( child: Container( height: 61.5, - margin: EdgeInsets.only(left: 8, right: 15,), + margin: EdgeInsets.only( + left: 8, + right: 15, + ), padding: EdgeInsets.only(left: 10), - decoration: BoxDecoration(image: DecorationImage(image: CachedNetworkImageProvider(item.itemList[1].bgImg ?? ""), fit: BoxFit.fill)), + decoration: BoxDecoration( + image: DecorationImage( + image: CachedNetworkImageProvider( + item.itemList[1].bgImg ?? ""), + fit: BoxFit.fill)), child: Column( mainAxisAlignment: MainAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.start, @@ -289,7 +362,10 @@ class _WalletDetailState extends State with TickerProviderStateMix children: [ Text( item.itemList[1].text ?? "", - style: TextStyle(fontSize: 11, color: HexColor.fromHex(item.itemList[1].textColor)), + style: TextStyle( + fontSize: 11, + color: + HexColor.fromHex(item.itemList[1].textColor)), ), InkWell( child: Padding( @@ -311,7 +387,11 @@ class _WalletDetailState extends State with TickerProviderStateMix Text( dataMap[item.itemList[1].vauleKey], style: TextStyle( - fontSize: 17, color: HexColor.fromHex(item.itemList[1].valueColor), fontFamily: 'Din', package: 'zhiying_base_widget', fontWeight: FontWeight.bold), + fontSize: 17, + color: HexColor.fromHex(item.itemList[1].valueColor), + fontFamily: 'Din', + package: 'zhiying_base_widget', + fontWeight: FontWeight.bold), ) ], ), diff --git a/lib/widgets/wallet/wallet_detail/wallet_detail_bloc.dart b/lib/widgets/wallet/wallet_detail/wallet_detail_bloc.dart index dc2fb94..3bfbf64 100644 --- a/lib/widgets/wallet/wallet_detail/wallet_detail_bloc.dart +++ b/lib/widgets/wallet/wallet_detail/wallet_detail_bloc.dart @@ -19,6 +19,8 @@ class WalletDetailBloc extends BlocBase { List listDataModel = new List(); + String currentType; + @override void dispose() { _dataController.close(); @@ -30,6 +32,7 @@ class WalletDetailBloc extends BlocBase { /// loadData(String type) async { await NetUtil.request("/api/v1/user/wallet/" + type, onSuccess: (data) { + currentType = type; listDataModel.clear(); listDataModel.addAll(List.from(data).map((v) { return WalletDetailDataModel.fromJson(v); @@ -38,7 +41,6 @@ class WalletDetailBloc extends BlocBase { }); } - ///刷新页面 refresh() { for (var item in listDataModel) {