diff --git a/assets/icons/life_pay_record.png b/assets/icons/life_pay_record.png new file mode 100644 index 00000000..303865d5 Binary files /dev/null and b/assets/icons/life_pay_record.png differ diff --git a/lib/constants/api.dart b/lib/constants/api.dart index 75282743..2df3f62e 100644 --- a/lib/constants/api.dart +++ b/lib/constants/api.dart @@ -272,8 +272,6 @@ class _Manager { ///借还管理:根据用户主键id查询需要归还物品信息(归还界面) String get articleReturnList => '/user/articleBorrow/findBorrowByUserId'; - ///生活缴费:查询生活缴费信息list - String get dailyPaymentList => '/user/dailyPayment/list'; ///生活缴费:查询当前用户的房屋是否缴费 String get findEstatelsPament => '/user/dailyPayment/findEstateIsPayment'; @@ -388,6 +386,9 @@ class _Manager { ///生活缴费:查询未缴金额(日常缴费+公摊费) String get findUnpaidAmount => '/user/dailyPayment/findUnpaidAmount'; + + ///生活缴费:查询生活缴费信息list + String get dailyPaymentList => '/user/dailyPayment/list'; } class _Community { diff --git a/lib/constants/application_objects.dart b/lib/constants/application_objects.dart index c1d51014..61367832 100644 --- a/lib/constants/application_objects.dart +++ b/lib/constants/application_objects.dart @@ -13,6 +13,8 @@ import 'package:aku_new_community/pages/goods_manage_page/select_borrow_return_p import 'package:aku_new_community/pages/house_introduce/house_introduce.dart'; import 'package:aku_new_community/pages/industry_committee/industry_committee_page.dart'; import 'package:aku_new_community/pages/life_pay/life_pay_choose_page.dart'; +import 'package:aku_new_community/pages/life_pay/life_pay_page.dart'; +import 'package:aku_new_community/pages/life_pay/life_pay_page_new.dart'; import 'package:aku_new_community/pages/one_alarm/widget/alarm_page.dart'; import 'package:aku_new_community/pages/opening_code_page/opening_code_page.dart'; import 'package:aku_new_community/pages/renovation_manage/new_renovation/new_renovation_page.dart'; @@ -75,7 +77,7 @@ List appObjects = [ AO('开门码', R.ASSETS_ICONS_FUNC_KMM_PNG, () => OpeningCodePage()), AO('访客邀请', R.ASSETS_ICONS_FUNC_FKYQ_PNG, () => VisitorAccessPage()), AO('报事报修', R.ASSETS_ICONS_FUNC_BSBX_PNG, () => WorkOrderPage()), - AO('生活缴费', R.ASSETS_ICONS_FUNC_SHJF_PNG, () => LifePayChoosePage()), + AO('生活缴费', R.ASSETS_ICONS_FUNC_SHJF_PNG, () => LifePayPageNew()), AO('业委会', R.ASSETS_ICONS_FUNC_YWH_PNG, () => IndustryCommitteePage()), AO('建议咨询', R.ASSETS_ICONS_FUNC_JYZX_PNG, () => AdvicePage(type: AdviceType.SUGGESTION)), diff --git a/lib/constants/saas_api.dart b/lib/constants/saas_api.dart index 92ab59ba..b3f2f883 100644 --- a/lib/constants/saas_api.dart +++ b/lib/constants/saas_api.dart @@ -34,6 +34,7 @@ class SAASAPI { static _Information information = _Information(); static _WorkOrder workOrder = _WorkOrder(); static _Pay pay = _Pay(); + static _LifePay lifePay = _LifePay(); ///二级分类 static _ProfileApi profile = _ProfileApi(); @@ -262,3 +263,14 @@ class _Pay { ///app商品 向支付宝发起订单查询请求 String get jcookOrderCheckAlipay => '/app/user/alipay/jcookOrderCheckAlipay'; } + + +class _LifePay{ + ///查询该房屋下所有的未缴费的订单 + String get livingExpensesList => '/app/user/livingExpenses/list'; + + ///生活缴费支付记录 + String get paymentRecordList => '/app/user/livingExpenses/paymentRecord'; + + +} diff --git a/lib/gen/assets.gen.dart b/lib/gen/assets.gen.dart index 1c058ebe..b1a52229 100644 --- a/lib/gen/assets.gen.dart +++ b/lib/gen/assets.gen.dart @@ -663,6 +663,10 @@ class $AssetsIconsGen { AssetGenImage get leaseHouse => const AssetGenImage('assets/icons/lease_house.png'); + /// File path: assets/icons/life_pay_record.png + AssetGenImage get lifePayRecord => + const AssetGenImage('assets/icons/life_pay_record.png'); + /// File path: assets/icons/like.png AssetGenImage get like => const AssetGenImage('assets/icons/like.png'); @@ -1196,10 +1200,6 @@ class $AssetsImagesGen { AssetGenImage get wxpay => const AssetGenImage('assets/images/wxpay.png'); } -class $AssetsJsonGen { - const $AssetsJsonGen(); -} - class $AssetsStaticGen { const $AssetsStaticGen(); @@ -1298,7 +1298,6 @@ class Assets { static const $AssetsBraceletGen bracelet = $AssetsBraceletGen(); static const $AssetsIconsGen icons = $AssetsIconsGen(); static const $AssetsImagesGen images = $AssetsImagesGen(); - static const $AssetsJsonGen json = $AssetsJsonGen(); static const $AssetsStaticGen static = $AssetsStaticGen(); static const $AssetsTabGen tab = $AssetsTabGen(); } diff --git a/lib/models/life_pay/life_pay_model.dart b/lib/models/life_pay/life_pay_model.dart new file mode 100644 index 00000000..60210c6a --- /dev/null +++ b/lib/models/life_pay/life_pay_model.dart @@ -0,0 +1,33 @@ +import 'package:equatable/equatable.dart'; +import 'package:json_annotation/json_annotation.dart'; +part 'life_pay_model.g.dart'; + + +@JsonSerializable(createToJson: true, explicitToJson: true) +class LifePayModel extends Equatable { + final int id; + final String chargesName; + final String billDateStart; + final String billDateEnd; + final String createDate; + final double payPrincipal; + final double defaultAmount; + + + + factory LifePayModel.fromJson(Map json) =>_$LifePayModelFromJson(json); + Map toJson()=> _$LifePayModelToJson(this); + + LifePayModel({ + required this.id, + required this.chargesName, + required this.billDateStart, + required this.billDateEnd, + required this.createDate, + required this.payPrincipal, + required this.defaultAmount, + }); + + @override + List get props => [id, chargesName, billDateStart,billDateEnd,createDate,payPrincipal,defaultAmount]; +} \ No newline at end of file diff --git a/lib/models/life_pay/life_pay_model.g.dart b/lib/models/life_pay/life_pay_model.g.dart new file mode 100644 index 00000000..b56edc6a --- /dev/null +++ b/lib/models/life_pay/life_pay_model.g.dart @@ -0,0 +1,28 @@ +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'life_pay_model.dart'; + +// ************************************************************************** +// JsonSerializableGenerator +// ************************************************************************** + +LifePayModel _$LifePayModelFromJson(Map json) => LifePayModel( + id: json['id'] as int, + chargesName: json['chargesName'] as String, + billDateStart: json['billDateStart'] as String, + billDateEnd: json['billDateEnd'] as String, + createDate: json['createDate'] as String, + payPrincipal: (json['payPrincipal'] as num).toDouble(), + defaultAmount: (json['defaultAmount'] as num).toDouble(), + ); + +Map _$LifePayModelToJson(LifePayModel instance) => + { + 'id': instance.id, + 'chargesName': instance.chargesName, + 'billDateStart': instance.billDateStart, + 'billDateEnd': instance.billDateEnd, + 'createDate': instance.createDate, + 'payPrincipal': instance.payPrincipal, + 'defaultAmount': instance.defaultAmount, + }; diff --git a/lib/models/life_pay/life_pay_record_model.dart b/lib/models/life_pay/life_pay_record_model.dart index 9c0f6ab0..06352a60 100644 --- a/lib/models/life_pay/life_pay_record_model.dart +++ b/lib/models/life_pay/life_pay_record_model.dart @@ -6,26 +6,20 @@ part 'life_pay_record_model.g.dart'; @JsonSerializable() class LifePayRecordModel extends Equatable { final int id; - final String chargesTemplateDetailName; - final String roomName; - final String years; - final num paidPrice; - final String createName; + final String chargesName; + final String communityName; + final String buildingName; + final String unitName; + final String estateName; + final String billDateStart; + final String billDateEnd; + final String billCreateDate; + final num payAmount; final String createDate; final int payType; final String code; - LifePayRecordModel({ - required this.id, - required this.chargesTemplateDetailName, - required this.roomName, - required this.years, - required this.paidPrice, - required this.createName, - required this.createDate, - required this.payType, - required this.code, - }); + factory LifePayRecordModel.fromJson(Map json) => _$LifePayRecordModelFromJson(json); @@ -34,14 +28,34 @@ class LifePayRecordModel extends Equatable { List get props { return [ id, - chargesTemplateDetailName, - roomName, - years, - paidPrice, - createName, + chargesName, + communityName, + buildingName, + unitName, + estateName, + billDateStart, + billDateEnd, + billCreateDate, + payAmount, createDate, payType, code, ]; } + + LifePayRecordModel({ + required this.id, + required this.chargesName, + required this.communityName, + required this.buildingName, + required this.unitName, + required this.estateName, + required this.billDateStart, + required this.billDateEnd, + required this.billCreateDate, + required this.payAmount, + required this.createDate, + required this.payType, + required this.code, + }); } diff --git a/lib/models/life_pay/life_pay_record_model.g.dart b/lib/models/life_pay/life_pay_record_model.g.dart index f0dcef8c..cdc9f622 100644 --- a/lib/models/life_pay/life_pay_record_model.g.dart +++ b/lib/models/life_pay/life_pay_record_model.g.dart @@ -9,11 +9,15 @@ part of 'life_pay_record_model.dart'; LifePayRecordModel _$LifePayRecordModelFromJson(Map json) => LifePayRecordModel( id: json['id'] as int, - chargesTemplateDetailName: json['chargesTemplateDetailName'] as String, - roomName: json['roomName'] as String, - years: json['years'] as String, - paidPrice: json['paidPrice'] as num, - createName: json['createName'] as String, + chargesName: json['chargesName'] as String, + communityName: json['communityName'] as String, + buildingName: json['buildingName'] as String, + unitName: json['unitName'] as String, + estateName: json['estateName'] as String, + billDateStart: json['billDateStart'] as String, + billDateEnd: json['billDateEnd'] as String, + billCreateDate: json['billCreateDate'] as String, + payAmount: json['payAmount'] as num, createDate: json['createDate'] as String, payType: json['payType'] as int, code: json['code'] as String, diff --git a/lib/pages/life_pay/life_pay_page_new.dart b/lib/pages/life_pay/life_pay_page_new.dart new file mode 100644 index 00000000..f4891e08 --- /dev/null +++ b/lib/pages/life_pay/life_pay_page_new.dart @@ -0,0 +1,625 @@ +import 'dart:convert'; + +import 'package:aku_new_community/base/base_style.dart'; +import 'package:aku_new_community/constants/api.dart'; +import 'package:aku_new_community/constants/saas_api.dart'; +import 'package:aku_new_community/gen/assets.gen.dart'; +import 'package:aku_new_community/models/life_pay/life_pay_list_model.dart'; +import 'package:aku_new_community/models/life_pay/life_pay_model.dart'; +import 'package:aku_new_community/pages/life_pay/life_pay_record_page.dart'; +import 'package:aku_new_community/pages/life_pay/life_pre_pay_page.dart'; +import 'package:aku_new_community/pages/life_pay/pay_finish_page.dart'; +import 'package:aku_new_community/pages/life_pay/pay_util.dart'; +import 'package:aku_new_community/pages/life_pay/widget/life_pay_detail_page.dart'; +import 'package:aku_new_community/pages/life_pay/widget/life_pay_detail_page_new.dart'; +import 'package:aku_new_community/provider/app_provider.dart'; +import 'package:aku_new_community/utils/bee_parse.dart'; +import 'package:aku_new_community/utils/headers.dart'; +import 'package:aku_new_community/utils/network/base_list_model.dart'; +import 'package:aku_new_community/utils/network/base_model.dart'; +import 'package:aku_new_community/utils/network/net_util.dart'; +import 'package:aku_new_community/widget/bee_divider.dart'; +import 'package:aku_new_community/widget/bee_scaffold.dart'; +import 'package:aku_new_community/widget/buttons/bee_check_radio.dart'; +import 'package:aku_new_community/widget/others/house_head_card.dart'; +import 'package:aku_new_community/widget/others/user_tool.dart'; +import 'package:bot_toast/bot_toast.dart'; +import 'package:common_utils/common_utils.dart'; +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_easyrefresh/easy_refresh.dart'; +import 'package:get/get.dart' hide Response; +import 'package:provider/provider.dart'; + +class LifePayPageNew extends StatefulWidget { + LifePayPageNew({Key? key}) : super(key: key); + + @override + _LifePayPageNewState createState() => _LifePayPageNewState(); +} + +class MonthPay { + double payTotal; //费用 + List selectIds; //存储选中的主键id数组 + List ids;//存储原先全部主键id数组 + String itemNames; //选择的费用名称 + String timeTitle; + //月份 + MonthPay( + {required this.payTotal, + required this.ids, + required this.itemNames, + required this.selectIds, + required this.timeTitle}); +} + +class _LifePayPageNewState extends State { + EasyRefreshController? _controller; + List _selectMonths = []; //选择的月份 + List _models = []; //原model,禁止修改 + int _page = 0; + int _size = 10; + double _prePrice = 0; + + List _selectModelIndex = []; //选择的月份model,存储其数组下标 + + bool get allSelect => + ((_selectMonths.length == _selectModelIndex.length) && (_selectMonths.length != 0)); + + + MonthPay get total { + + double price = 0; + List ids = []; + for (var i in _selectModelIndex) { + MonthPay model = _selectMonths[i]; + + price += model.payTotal; + ids.addAll(model.selectIds); + } + return MonthPay( payTotal: price, ids: [], selectIds: ids, itemNames: '', timeTitle: ''); + } + + @override + void initState() { + super.initState(); + _controller = EasyRefreshController(); + _models = [ + LifePayModel( + id: 1, + createDate: '2022-02-11 00:00:01', + payPrincipal: 100, + billDateStart: '2022-02-11 00:00:01', + chargesName: '物业费', + defaultAmount: 50, + billDateEnd: '2022-03-11 00:00:01'), + LifePayModel( + id: 2, + createDate: '2022-02-12 00:00:01', + payPrincipal: 100, + billDateStart: '2022-02-11 00:00:01', + chargesName: '物业费', + defaultAmount: 50, + billDateEnd: '2022-03-12 00:00:01'), + LifePayModel( + id: 3, + createDate: '2022-03-11 00:00:01', + payPrincipal: 100, + billDateStart: '2022-03-11 00:00:01', + chargesName: '物业费', + defaultAmount: 50, + billDateEnd: '2022-04-11 00:00:01'), + LifePayModel( + id: 4, + createDate: '2022-04-11 00:00:01', + payPrincipal: 100, + billDateStart: '2022-04-11 00:00:01', + chargesName: '物业费', + defaultAmount: 50, + billDateEnd: '2022-05-11 00:00:01'), + LifePayModel( + id: 5, + createDate: '2022-02-15 00:00:01', + payPrincipal: 100, + billDateStart: '2022-02-15 00:00:01', + chargesName: '物业费', + defaultAmount: 50, + billDateEnd: '2022-03-15 00:00:01'), + LifePayModel( + id: 6, + createDate: '2022-02-16 00:00:01', + payPrincipal: 100, + billDateStart: '2022-02-16 00:00:01', + chargesName: '物业费', + defaultAmount: 50, + billDateEnd: '2022-03-16 00:00:01'), + LifePayModel( + id: 7, + createDate: '2022-03-18 00:00:01', + payPrincipal: 100, + billDateStart: '2022-03-11 00:00:01', + chargesName: '物业费', + defaultAmount: 50, + billDateEnd: '2022-04-19 00:00:01'), + ]; + } + + @override + void dispose() { + _controller?.dispose(); + BotToast.closeAllLoading(); + super.dispose(); + } + + Widget _buildCard(MonthPay model, int index) { + return Container( + padding: EdgeInsets.symmetric(vertical: 32.w,horizontal: 32.w), + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(8.w), color: kForeGroundColor), + child: Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + GestureDetector( + onTap: () { + setState(() { + if (_selectModelIndex.contains(index)) { + _selectModelIndex.remove(index); + } else { + _selectModelIndex.add(index); + } + }); + }, + child: Container( + padding: EdgeInsets.only(left: 10.w,right: 10.w,bottom: 50.w), + color: Colors.transparent, + child: BeeCheckRadio( + value: index, + groupValue: _selectModelIndex, + ), + ), + ), + ], + ), + 24.w.widthBox, + Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisSize: MainAxisSize.min, + children: [ + model.timeTitle.text.color(Colors.black.withOpacity(0.8)).bold.size(32.sp).make(), + 13.w.heightBox, + '已选择:' + .richText + .withTextSpanChildren([ + '${model.selectIds.length}' + .textSpan + .color(Colors.black.withOpacity(0.85)) + .size(32.sp) + .bold + .make(), + ' / ${model.ids.length}' + .textSpan + .color(Colors.black.withOpacity(0.25)) + .size(32.sp) + .bold + .make(), + ]) + .color(Colors.black.withOpacity(0.65)) + .size(26.sp) + .make(), + 13.w.heightBox, + + SizedBox( + width: 400.w, + child: Text( + model.itemNames, + maxLines: 2, + overflow: TextOverflow.ellipsis, + style: TextStyle( + color: ktextSubColor, + fontSize: 28.sp, + + ), + ), + ), + + 13.w.heightBox, + RichText( + text: TextSpan( + text: '合计:', + style: TextStyle( + color: ktextPrimary, + fontSize: 24.sp, + fontWeight: FontWeight.bold), + children: [ + TextSpan( + text: '¥ ', + style: TextStyle( + color: kDangerColor, + fontSize: 24.sp, + fontWeight: FontWeight.bold)), + TextSpan( + text: '${model.payTotal.toStringAsFixed(2)}', + style: TextStyle( + color: kDangerColor, + fontSize: 32.sp, + fontWeight: FontWeight.bold)), + ])) + ], + ).expand(), + Column( + mainAxisSize: MainAxisSize.max, + mainAxisAlignment: MainAxisAlignment.start, + children: [ + GestureDetector( + onTap: () async { + + + dynamic back = await Get.to(()=>LifePayDetailPageNew(model: model,)); + if(back){ + + for(int i=0;i<_selectMonths.length;i++){ + if(_selectMonths[i].selectIds.isEmpty){ + _selectModelIndex.remove(_selectMonths.indexOf(_selectMonths[i])); + + } + } + setState(() { + + }); + } + + }, + child: Container( + decoration: BoxDecoration( + color: kPrimaryColor, + borderRadius: BorderRadius.circular(22.w), + ), + padding: + EdgeInsets.symmetric(horizontal: 20.w, vertical: 8.w), + child: '选择明细'.text.color(Colors.black.withOpacity(0.85)).size(22.sp).bold.make(), + ), + ), + + + ], + ), + ], + ), + ); + } + + Widget _payButton() { + return MaterialButton( + elevation: 0, + shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(37.w)), + color: kPrimaryColor, + padding: EdgeInsets.symmetric(horizontal: 50.w, vertical: 15.w), + onPressed: () async { + // Function cancel = BotToast.showLoading(); + // BaseModel baseModel = + // await NetUtil().post('/user/alipay/dailyPaymentAlipay', params: { + // "ids": total.ids, + // "payType": 1, //暂时写死 等待后续补充 + // "payPrice": total.payTotal.toDoubleStringAsFixed() + // }); + // if (baseModel.success) { + // bool result = await PayUtil() + // .callAliPay(baseModel.msg, API.pay.dailPayMentCheck); + // if (result) { + // Get.off(() => PayFinishPage()); + // } + // } + // cancel(); + }, + child: '去缴费'.text.black.size(32.sp).bold.make(), + ); + } + + Widget _buildPrePayment() { + return Container( + padding: EdgeInsets.symmetric(vertical: 32.w, horizontal: 32.w), + width: double.infinity, + color: Colors.white, + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + '当前预缴'.text.size(28.sp).color(ktextSubColor).make(), + 30.w.heightBox, + Row( + children: [ + '¥'.text.size(28.sp).black.make(), + 16.w.widthBox, + _prePrice.text.size(40.sp).black.bold.make(), + Spacer(), + MaterialButton( + elevation: 0, + height: 50.w, + padding: EdgeInsets.symmetric(vertical: 8.w, horizontal: 25.w), + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(24.w), + side: BorderSide(color: Color(0xFF979797), width: 1.w)), + color: Colors.white, + onPressed: () { + Get.to(() => LifePrePayPage( + prePay: _prePrice, + )); + }, + child: '预缴充值'.text.size(28.sp).black.make(), + ) + ], + ), + ], + ), + ); + } + + Future _dailyPaymentPrePay() async { + BaseModel baseModel = + await NetUtil().get(API.manager.dailyPaymentPrePay, params: { + "estateId": 5,//UserTool.appProvider.selectedHouse!.estateId, + }); + if (baseModel.success) { + return (baseModel.data as num).toDouble(); + } else { + return 0; + } + } + + @override + Widget build(BuildContext context) { + final appProvider = Provider.of(context); + return BeeScaffold( + title: '生活缴费', + actions: [ + InkWell( + onTap: () { + Get.to(() => LifePayRecordPage()); + }, + child: Container( + padding: EdgeInsets.fromLTRB(32.w, 28.w, 32.w, 20.w), + alignment: Alignment.center, + child: Image.asset(Assets.icons.lifePayRecord.path,width:48.w ,height: 48.w,) + ), + ), + ], + body: EasyRefresh( + firstRefresh: true, + header: MaterialHeader(), + controller: _controller, + onRefresh: () async { + _page = 1; + _size = 10; + // BaseListModel baseListModel = await NetUtil() + // .getList(SAASAPI.lifePay.livingExpensesList, params: { + // "pageNum": _page, + // "size": _size, + // 'estateId': 5//appProvider.selectedHouse!.estateId + // }); + // _models = baseListModel.rows + // .map((e) => LifePayModel.fromJson(e)) + // .toList(); + _selectMonths.clear(); + _models = [ + LifePayModel( + id: 1, + createDate: '2022-02-11 00:00:01', + payPrincipal: 100, + billDateStart: '2022-02-11 00:00:01', + chargesName: '物业费', + defaultAmount: 50, + billDateEnd: '2022-03-11 00:00:01'), + LifePayModel( + id: 2, + createDate: '2022-02-12 00:00:01', + payPrincipal: 100, + billDateStart: '2022-02-11 00:00:01', + chargesName: '物业费', + defaultAmount: 50, + billDateEnd: '2022-03-12 00:00:01'), + LifePayModel( + id: 3, + createDate: '2022-03-11 00:00:01', + payPrincipal: 100, + billDateStart: '2022-03-11 00:00:01', + chargesName: '物业费', + defaultAmount: 50, + billDateEnd: '2022-04-11 00:00:01'), + LifePayModel( + id: 4, + createDate: '2022-04-11 00:00:01', + payPrincipal: 100, + billDateStart: '2022-04-11 00:00:01', + chargesName: '物业费', + defaultAmount: 50, + billDateEnd: '2022-05-11 00:00:01'), + LifePayModel( + id: 5, + createDate: '2022-02-15 00:00:01', + payPrincipal: 100, + billDateStart: '2022-02-15 00:00:01', + chargesName: '物业费', + defaultAmount: 50, + billDateEnd: '2022-03-15 00:00:01'), + LifePayModel( + id: 6, + createDate: '2022-02-16 00:00:01', + payPrincipal: 100, + billDateStart: '2022-02-16 00:00:01', + chargesName: '物业费', + defaultAmount: 50, + billDateEnd: '2022-03-16 00:00:01'), + LifePayModel( + id: 7, + createDate: '2022-03-18 00:00:01', + payPrincipal: 100, + billDateStart: '2022-03-11 00:00:01', + chargesName: '物业费', + defaultAmount: 50, + billDateEnd: '2022-04-19 00:00:01'), + ]; + + ///先按月份分好 + _models.forEach((element) { + if (_selectMonths.isEmpty) { + _selectMonths.add(MonthPay( + payTotal: element.payPrincipal + element.defaultAmount, + ids: [element], + itemNames: element.chargesName, + timeTitle: DateUtil.formatDate( + DateTime.parse(element.billDateStart), + format: 'yyyy-MM'), selectIds: [element],)); + } else { + bool same = false; + for(int i=0;i<_selectMonths.length;i++){ + + if (DateUtil.formatDate(DateTime.parse(element.billDateStart), + format: 'yyyy-MM') == + _selectMonths[i].timeTitle) { + _selectMonths[i].payTotal += + element.defaultAmount + element.payPrincipal; + _selectMonths[i].ids.add(element); + _selectMonths[i].itemNames += '、'+element.chargesName; + + _selectMonths[i].selectIds.add(element); + same = true; + } + } + if(!same){ + _selectMonths.add(MonthPay( + payTotal: element.payPrincipal + element.defaultAmount, + ids: [element], + selectIds: [element], + itemNames: element.chargesName, + timeTitle: DateUtil.formatDate( + DateTime.parse(element.billDateStart), + format: 'yyyy-MM'))); + } + + } + }); + + _prePrice = 0; + if (mounted) setState(() {}); + }, + child: Column( + children: [ + HouseHeadCard( + onChanged: () { + _controller!.callRefresh(); + }, + context: context), + 16.w.heightBox, + _buildPrePayment(), + 16.w.heightBox, + Container( + //padding: EdgeInsets.all(32.w), + width: double.infinity, + color: kForeGroundColor, + constraints: BoxConstraints(minHeight: 20.w), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Padding(padding: EdgeInsets.symmetric(vertical: 24.w,horizontal: 32.w), + child: '当前账单'.text.color(ktextPrimary).size(28.sp).make(),), + + BeeDivider.horizontal(), + ...List.generate(_selectMonths.length, + (index) => _buildCard(_selectMonths[index], index)) + .sepWidget(separate: BeeDivider.horizontal()), + ], + ), + ), + ], + ), + ), + bottomNavi: Container( + color: kForeGroundColor, + padding: EdgeInsets.fromLTRB( + 32.w, 16.w, 32.w, 12.w + MediaQuery.of(context).padding.bottom), + child: Row( + children: [ + GestureDetector( + onTap: () { + if (allSelect) { + _selectModelIndex.clear(); + setState(() {}); + } else { + + _selectModelIndex.clear(); + for (var i = 0; i < _selectMonths.length; i++) { + _selectModelIndex.add(i); + } + setState(() {}); + } + }, + child: AnimatedContainer( + duration: Duration(milliseconds: 300), + decoration: BoxDecoration( + border: Border.all( + width: 1.w, + color: allSelect ? kPrimaryColor : kDarkSubColor), + color: allSelect ? kPrimaryColor : Colors.transparent, + borderRadius: BorderRadius.circular(20.w)), + curve: Curves.easeInOutCubic, + width: 40.w, + height: 40.w, + child: allSelect + ? Icon( + CupertinoIcons.check_mark, + size: 25.w, + color: Colors.white, + ) + : SizedBox(), + ).material(color: Colors.transparent), + ), + 16.wb, + '全选' + .text + .color(ktextSubColor) + .size(28.sp) + .bold + .make(), + Spacer(), + Column( + crossAxisAlignment: CrossAxisAlignment.end, + mainAxisSize: MainAxisSize.min, + children: [ + RichText( + text: TextSpan( + text: '合计:', + style: TextStyle( + color: ktextPrimary, + fontSize: 24.sp, + fontWeight: FontWeight.bold), + children: [ + TextSpan( + text: ' ¥', + style: TextStyle( + color: kDangerColor, + fontSize: 24.sp, + fontWeight: FontWeight.bold)), + TextSpan( + text: '${total.payTotal.toStringAsFixed(2)}', + style: TextStyle( + color: kDangerColor, + fontSize: 32.sp, + fontWeight: FontWeight.bold)), + ])), + '已选${_selectModelIndex.length}项' + .text + .color(ktextSubColor) + .size(24.sp) + .make(), + ], + ), + 24.w.widthBox, + _payButton(), + ], + ), + ), + ); + } +} diff --git a/lib/pages/life_pay/life_pay_record_page.dart b/lib/pages/life_pay/life_pay_record_page.dart index 485ea014..826d6a75 100644 --- a/lib/pages/life_pay/life_pay_record_page.dart +++ b/lib/pages/life_pay/life_pay_record_page.dart @@ -10,7 +10,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_easyrefresh/easy_refresh.dart'; class LifePayRecordPage extends StatefulWidget { - LifePayRecordPage({Key? key}) : super(key: key); + LifePayRecordPage({Key? key}) : super(key: key); @override _LifePayRecordPageState createState() => _LifePayRecordPageState(); @@ -84,15 +84,29 @@ class _LifePayRecordPageState extends State { Widget _buildRecordCard(LifePayRecordModel model) { return Column( children: [ + Container( + padding: EdgeInsets.symmetric(vertical: 8.w,horizontal: 24.w), + decoration: BoxDecoration( + color: Colors.black.withOpacity(0.06), + borderRadius: BorderRadius.circular(8.w), + ), + child: DateUtil.formatDate( + DateTime.parse(model.createDate), + format: 'MM-dd hh-mm').text + .size(24.sp) + .color(Colors.black.withOpacity(0.45)) + .make(), + + ), Row( children: [ - model.chargesTemplateDetailName.text + model.chargesName.text .size(30.sp) .color(ktextPrimary) .bold .make(), Spacer(), - '${S.of(context)!.tempPlotName} ${model.roomName}' + '${S.of(context)!.tempPlotName} ${model.unitName+model.estateName}' .text .size(24.sp) .color(Color(0xFF999999)) @@ -100,30 +114,18 @@ class _LifePayRecordPageState extends State { ], ), 16.w.heightBox, - Row( - children: [ - '缴纳人'.text.color(ktextSubColor).size(24.sp).make(), - Spacer(), - '${model.createName}' - .text - .color(Color(0xFFFC361D)) - .size(28.sp) - .bold - .make() - ], - ), Row( children: [ '缴纳金额'.text.color(ktextSubColor).size(28.sp).make(), Spacer(), - '${model.paidPrice}'.text.color(ktextPrimary).size(28.sp).make(), + '${model.payAmount}'.text.color(ktextPrimary).size(28.sp).make(), ], ), Row( children: [ - '缴费时间'.text.color(ktextSubColor).size(28.sp).make(), + '付款方式'.text.color(ktextSubColor).size(28.sp).make(), Spacer(), - '${DateUtil.formatDateStr(model.createDate, format: "yyyy/MM/dd HH:mm")}' + '${getPayType[model.payType]}' .text .color(ktextPrimary) .size(28.sp) @@ -132,22 +134,20 @@ class _LifePayRecordPageState extends State { ), Row( children: [ - '付款方式'.text.color(ktextSubColor).size(28.sp).make(), + '流水号'.text.color(ktextSubColor).size(28.sp).make(), Spacer(), - '${getPayType[model.payType]}' - .text - .color(ktextPrimary) - .size(28.sp) - .make(), + '${model.code}'.text.color(ktextPrimary).size(28.sp).make(), ], ), + Row( children: [ - '订单号'.text.color(ktextSubColor).size(28.sp).make(), + '流水号'.text.color(ktextSubColor).size(28.sp).make(), Spacer(), '${model.code}'.text.color(ktextPrimary).size(28.sp).make(), ], ), + ].sepWidget(separate: 24.w.heightBox), ) .box diff --git a/lib/pages/life_pay/widget/life_pay_detail_page.dart b/lib/pages/life_pay/widget/life_pay_detail_page.dart index 4c0d8bfb..6a653930 100644 --- a/lib/pages/life_pay/widget/life_pay_detail_page.dart +++ b/lib/pages/life_pay/widget/life_pay_detail_page.dart @@ -1,10 +1,3 @@ -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; - -import 'package:expandable/expandable.dart'; -import 'package:get/get.dart'; -import 'package:provider/provider.dart'; - import 'package:aku_new_community/base/base_style.dart'; import 'package:aku_new_community/models/life_pay/life_pay_list_model.dart'; import 'package:aku_new_community/pages/life_pay/life_pay_page.dart'; @@ -13,6 +6,11 @@ import 'package:aku_new_community/utils/bee_parse.dart'; import 'package:aku_new_community/utils/headers.dart'; import 'package:aku_new_community/widget/bee_scaffold.dart'; import 'package:aku_new_community/widget/buttons/bee_check_radio.dart'; +import 'package:expandable/expandable.dart'; +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; +import 'package:get/get.dart'; +import 'package:provider/provider.dart'; class LifePayDetailPage extends StatefulWidget { final LifePayListModel model; diff --git a/lib/pages/life_pay/widget/life_pay_detail_page_new.dart b/lib/pages/life_pay/widget/life_pay_detail_page_new.dart new file mode 100644 index 00000000..5a99f528 --- /dev/null +++ b/lib/pages/life_pay/widget/life_pay_detail_page_new.dart @@ -0,0 +1,298 @@ +import 'package:aku_new_community/models/life_pay/life_pay_model.dart'; +import 'package:aku_new_community/pages/life_pay/life_pay_page_new.dart'; +import 'package:aku_new_community/widget/bee_divider.dart'; +import 'package:common_utils/common_utils.dart'; +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; + +import 'package:expandable/expandable.dart'; +import 'package:get/get.dart'; +import 'package:provider/provider.dart'; + +import 'package:aku_new_community/base/base_style.dart'; +import 'package:aku_new_community/models/life_pay/life_pay_list_model.dart'; +import 'package:aku_new_community/pages/life_pay/life_pay_page.dart'; +import 'package:aku_new_community/provider/app_provider.dart'; +import 'package:aku_new_community/utils/bee_parse.dart'; +import 'package:aku_new_community/utils/headers.dart'; +import 'package:aku_new_community/widget/bee_scaffold.dart'; +import 'package:aku_new_community/widget/buttons/bee_check_radio.dart'; + +class LifePayDetailPageNew extends StatefulWidget { + final MonthPay model; + + LifePayDetailPageNew({ + Key? key, + required this.model, + }) : super(key: key); + + @override + _LifePayDetailPageNewState createState() => _LifePayDetailPageNewState(); +} + +class _LifePayDetailPageNewState extends State { + //已选择的model + List _selectModelIndex = []; //选择的月份model,存储其数组下标 + List _list = []; + + + SelectPay get total { + int count = 0; + double price = 0; + List ids = []; + + widget.model.selectIds.forEach((element) { + count++; + price += (element.defaultAmount + element.payPrincipal); + ids.add(element.id); + }); + widget.model.payTotal = price; + return SelectPay(payCount: count, payTotal: price, ids: ids); + } + + bool get isAllSelect { + return _selectModelIndex.length == widget.model.ids.length && _selectModelIndex != 0; + } + + @override + void initState() { + super.initState(); + + for(int i=0;i _buildCard(widget.model.ids[index], index)).sepWidget(separate: BeeDivider.horizontal(indent: 100.w,)),), + ), + bottomNavi: Container( + color: Colors.white, + padding: EdgeInsets.fromLTRB( + 32.w, 16.w, 32.w, 12.w + MediaQuery.of(context).padding.bottom), + child: Row( + children: [ + + GestureDetector( + onTap: () { + if (isAllSelect) { + _selectModelIndex.clear(); + widget.model.selectIds.clear(); + setState(() {}); + } else { + + _selectModelIndex.clear(); + for (var i = 0; i < widget.model.ids.length; i++) { + _selectModelIndex.add(i); + widget.model.selectIds.add(widget.model.ids[i]); + } + setState(() {}); + } + + }, + child: animatedContainer, + ), + 16.wb, + '全选' + .text + .color(ktextSubColor) + .size(28.sp) + .bold + .make(), + Spacer(), + Column( + crossAxisAlignment: CrossAxisAlignment.end, + mainAxisSize: MainAxisSize.min, + children: [ + RichText( + text: TextSpan( + text: '合计:', + style: TextStyle( + color: ktextPrimary, + fontSize: 24.sp, + fontWeight: FontWeight.bold), + children: [ + TextSpan( + text: ' ¥', + style: TextStyle( + color: kDangerColor, + fontSize: 24.sp, + fontWeight: FontWeight.bold)), + TextSpan( + text: '${total.payTotal.toStringAsFixed(2)}', + style: TextStyle( + color: kDangerColor, + fontSize: 32.sp, + fontWeight: FontWeight.bold)), + ])), + + '已选${total.payCount}项' + .text + .color(ktextSubColor) + .size(20.sp) + .make(), + ], + ), + 20.w.widthBox, + MaterialButton( + elevation: 0, + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(37.w)), + color: kPrimaryColor, + padding: EdgeInsets.symmetric(horizontal: 50.w, vertical: 15.w), + onPressed: () { + Get.back(result: true); + }, + child: '确定'.text.black.size(32.sp).bold.make(), + ), + ], + ), + ), + ); + } +} diff --git a/lib/widget/others/house_head_card.dart b/lib/widget/others/house_head_card.dart index 8d61a07b..f2675cba 100644 --- a/lib/widget/others/house_head_card.dart +++ b/lib/widget/others/house_head_card.dart @@ -60,7 +60,8 @@ class HouseHeadCard extends StatelessWidget { .bold .make(), 10.w.heightBox, - appProvider.selectedHouse!.roomName.text.black + + (appProvider.selectedHouse!=null?appProvider.selectedHouse!.roomName:'').text.black .size(32.sp) .bold .make() diff --git a/pubspec.lock b/pubspec.lock index a1f4858b..e09654bf 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -5,252 +5,252 @@ packages: dependency: transitive description: name: _fe_analyzer_shared - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "38.0.0" advance_pdf_viewer: dependency: "direct main" description: name: advance_pdf_viewer - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "2.0.1" amap_flutter_base: dependency: "direct main" description: name: amap_flutter_base - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "3.0.0" amap_flutter_location: dependency: "direct main" description: name: amap_flutter_location - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "3.0.0" amap_flutter_map: dependency: "direct main" description: name: amap_flutter_map - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "3.0.0" analyzer: dependency: transitive description: name: analyzer - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "3.4.1" animated_text_kit: dependency: "direct main" description: name: animated_text_kit - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "4.2.1" archive: dependency: transitive description: name: archive - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "3.3.0" args: dependency: transitive description: name: args - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "2.3.0" async: dependency: transitive description: name: async - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "2.8.2" audio_session: dependency: transitive description: name: audio_session - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "0.1.6+1" auto_size_text_pk: dependency: transitive description: name: auto_size_text_pk - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "3.0.0" badges: dependency: "direct main" description: name: badges - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "2.0.2" boolean_selector: dependency: transitive description: name: boolean_selector - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "2.1.0" bot_toast: dependency: "direct main" description: name: bot_toast - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "4.0.1" build: dependency: transitive description: name: build - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "2.2.1" build_config: dependency: transitive description: name: build_config - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "1.0.0" build_daemon: dependency: transitive description: name: build_daemon - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "3.0.1" build_resolvers: dependency: transitive description: name: build_resolvers - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "2.0.6" build_runner: dependency: "direct dev" description: name: build_runner - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "2.1.8" build_runner_core: dependency: transitive description: name: build_runner_core - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "7.2.3" built_collection: dependency: transitive description: name: built_collection - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "5.1.1" built_value: dependency: transitive description: name: built_value - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "8.1.4" cached_network_image: dependency: "direct main" description: name: cached_network_image - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "3.2.0" cached_network_image_platform_interface: dependency: transitive description: name: cached_network_image_platform_interface - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "1.0.0" cached_network_image_web: dependency: transitive description: name: cached_network_image_web - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "1.0.1" card_swiper: dependency: "direct main" description: name: card_swiper - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "2.0.3" carousel_slider: dependency: "direct main" description: name: carousel_slider - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "4.0.0" characters: dependency: transitive description: name: characters - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "1.2.0" charcode: dependency: transitive description: name: charcode - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "1.3.1" checked_yaml: dependency: transitive description: name: checked_yaml - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "2.0.1" cli_util: dependency: transitive description: name: cli_util - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "0.3.5" clock: dependency: transitive description: name: clock - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "1.1.0" code_builder: dependency: transitive description: name: code_builder - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "4.1.0" collection: dependency: "direct main" description: name: collection - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "1.15.0" color: dependency: transitive description: name: color - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "3.0.0" common_utils: @@ -266,154 +266,154 @@ packages: dependency: transitive description: name: convert - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "3.0.1" cross_file: dependency: transitive description: name: cross_file - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "0.3.2" crypto: dependency: transitive description: name: crypto - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "3.0.1" cupertino_icons: dependency: "direct main" description: name: cupertino_icons - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "1.0.4" dart_style: dependency: transitive description: name: dart_style - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "2.2.2" dartx: dependency: transitive description: name: dartx - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "1.0.0" decimal: dependency: transitive description: name: decimal - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "2.1.0" device_info_plus: dependency: transitive description: name: device_info_plus - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "2.2.0" device_info_plus_linux: dependency: transitive description: name: device_info_plus_linux - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "2.1.1" device_info_plus_macos: dependency: transitive description: name: device_info_plus_macos - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "2.2.2" device_info_plus_platform_interface: dependency: transitive description: name: device_info_plus_platform_interface - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "2.3.0+1" device_info_plus_web: dependency: transitive description: name: device_info_plus_web - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "2.1.0" device_info_plus_windows: dependency: transitive description: name: device_info_plus_windows - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "2.1.1" dio: dependency: "direct main" description: name: dio - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "4.0.4" dotted_border: dependency: "direct main" description: name: dotted_border - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "2.0.0+2" equatable: dependency: "direct main" description: name: equatable - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "2.0.3" expandable: dependency: "direct main" description: name: expandable - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "5.0.1" extended_list_library: dependency: transitive description: name: extended_list_library - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "3.0.0" fake_async: dependency: transitive description: name: fake_async - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "1.2.0" ffi: dependency: transitive description: name: ffi - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "1.1.2" file: dependency: transitive description: name: file - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "6.1.2" fixnum: dependency: transitive description: name: fixnum - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "1.0.0" flutter: @@ -425,42 +425,42 @@ packages: dependency: transitive description: name: flutter_blurhash - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "0.6.4" flutter_cache_manager: dependency: transitive description: name: flutter_cache_manager - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "3.3.0" flutter_easyrefresh: dependency: "direct main" description: name: flutter_easyrefresh - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "2.2.1" flutter_gen_core: dependency: transitive description: name: flutter_gen_core - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "4.1.6" flutter_gen_runner: dependency: "direct dev" description: name: flutter_gen_runner - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "4.1.6" flutter_highlight: dependency: transitive description: name: flutter_highlight - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "0.7.0" flutter_icons: @@ -481,56 +481,56 @@ packages: dependency: "direct dev" description: name: flutter_native_splash - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "1.3.2" flutter_plugin_android_lifecycle: dependency: transitive description: name: flutter_plugin_android_lifecycle - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "2.0.5" flutter_rating_bar: dependency: "direct main" description: name: flutter_rating_bar - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "4.0.0" flutter_screenutil: dependency: "direct main" description: name: flutter_screenutil - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "5.3.1" flutter_slidable: dependency: "direct main" description: name: flutter_slidable - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "0.6.0" flutter_sound: dependency: "direct main" description: name: flutter_sound - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "9.1.7" flutter_sound_platform_interface: dependency: transitive description: name: flutter_sound_platform_interface - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "9.1.7" flutter_sound_web: dependency: transitive description: name: flutter_sound_web - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "9.1.7" flutter_test: @@ -547,511 +547,511 @@ packages: dependency: "direct main" description: name: fluwx - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "3.8.1+1" frontend_server_client: dependency: transitive description: name: frontend_server_client - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "2.1.2" get: dependency: "direct main" description: name: get - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "4.6.1" glob: dependency: transitive description: name: glob - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "2.0.2" graphs: dependency: transitive description: name: graphs - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "2.1.0" grinder: dependency: "direct dev" description: name: grinder - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "0.9.0" highlight: dependency: transitive description: name: highlight - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "0.7.0" hive: dependency: "direct main" description: name: hive - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "2.1.0" hive_flutter: dependency: "direct main" description: name: hive_flutter - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "1.1.0" hive_generator: dependency: "direct dev" description: name: hive_generator - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "1.1.2" http: dependency: transitive description: name: http - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "0.13.4" http_multi_server: dependency: transitive description: name: http_multi_server - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "3.2.0" http_parser: dependency: transitive description: name: http_parser - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "4.0.0" image: dependency: transitive description: name: image - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "3.1.3" image_picker: dependency: "direct main" description: name: image_picker - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "0.7.5+4" image_picker_for_web: dependency: transitive description: name: image_picker_for_web - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "2.1.6" image_picker_platform_interface: dependency: transitive description: name: image_picker_platform_interface - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "2.4.4" import_sorter: dependency: "direct dev" description: name: import_sorter - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "4.6.0" infinite_listview: dependency: transitive description: name: infinite_listview - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "1.1.0" intl: dependency: "direct main" description: name: intl - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "0.17.0" io: dependency: transitive description: name: io - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "1.0.3" jpush_flutter: dependency: "direct main" description: name: jpush_flutter - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "2.2.3" js: dependency: transitive description: name: js - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "0.6.3" json_annotation: dependency: "direct main" description: name: json_annotation - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "4.4.0" json_serializable: dependency: "direct dev" description: name: json_serializable - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "6.1.5" just_audio: dependency: "direct main" description: name: just_audio - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "0.9.20" just_audio_platform_interface: dependency: transitive description: name: just_audio_platform_interface - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "4.1.0" just_audio_web: dependency: transitive description: name: just_audio_web - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "0.4.7" like_button: dependency: "direct main" description: name: like_button - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "2.0.4" logger: dependency: transitive description: name: logger - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "1.1.0" logging: dependency: transitive description: name: logging - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "1.0.2" matcher: dependency: transitive description: name: matcher - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "0.12.11" meta: dependency: transitive description: name: meta - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "1.7.0" mime: dependency: transitive description: name: mime - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "1.0.1" nested: dependency: transitive description: name: nested - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "1.0.0" numberpicker: dependency: transitive description: name: numberpicker - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "2.1.1" octo_image: dependency: transitive description: name: octo_image - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "1.0.1" open_file: dependency: "direct main" description: name: open_file - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "3.2.1" package_config: dependency: transitive description: name: package_config - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "2.0.2" package_info: dependency: "direct main" description: name: package_info - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "2.0.2" package_info_plus: dependency: transitive description: name: package_info_plus - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "1.4.0" package_info_plus_linux: dependency: transitive description: name: package_info_plus_linux - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "1.0.3" package_info_plus_macos: dependency: transitive description: name: package_info_plus_macos - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "1.3.0" package_info_plus_platform_interface: dependency: transitive description: name: package_info_plus_platform_interface - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "1.0.2" package_info_plus_web: dependency: transitive description: name: package_info_plus_web - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "1.0.4" package_info_plus_windows: dependency: transitive description: name: package_info_plus_windows - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "1.0.4" palette_generator: dependency: "direct main" description: name: palette_generator - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "0.3.3" path: dependency: transitive description: name: path - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "1.8.0" path_drawing: dependency: transitive description: name: path_drawing - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "1.0.0" path_parsing: dependency: transitive description: name: path_parsing - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "1.0.0" path_provider: dependency: "direct main" description: name: path_provider - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "2.0.9" path_provider_android: dependency: transitive description: name: path_provider_android - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "2.0.12" path_provider_ios: dependency: transitive description: name: path_provider_ios - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "2.0.8" path_provider_linux: dependency: transitive description: name: path_provider_linux - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "2.1.5" path_provider_macos: dependency: transitive description: name: path_provider_macos - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "2.0.5" path_provider_platform_interface: dependency: transitive description: name: path_provider_platform_interface - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "2.0.3" path_provider_windows: dependency: transitive description: name: path_provider_windows - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "2.0.5" pedantic: dependency: transitive description: name: pedantic - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "1.11.1" permission_handler: dependency: "direct main" description: name: permission_handler - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "7.2.0" permission_handler_platform_interface: dependency: transitive description: name: permission_handler_platform_interface - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "3.7.0" petitparser: dependency: transitive description: name: petitparser - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "4.4.0" pin_input_text_field: dependency: transitive description: name: pin_input_text_field - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "4.1.2" platform: dependency: transitive description: name: platform - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "3.1.0" plugin_platform_interface: dependency: transitive description: name: plugin_platform_interface - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "2.1.2" pool: dependency: transitive description: name: pool - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "1.5.0" power_logger: dependency: "direct main" description: name: power_logger - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "1.2.2" process: dependency: transitive description: name: process - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "4.2.4" provider: dependency: "direct main" description: name: provider - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "6.0.2" pub_semver: dependency: "direct dev" description: name: pub_semver - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "2.1.1" pubspec_parse: dependency: transitive description: name: pubspec_parse - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "1.2.0" qr: dependency: transitive description: name: qr - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "2.1.0" qr_code_scanner: dependency: "direct main" description: name: qr_code_scanner - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "0.4.0" qr_flutter: dependency: "direct main" description: name: qr_flutter - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "4.0.0" random_character: @@ -1067,63 +1067,63 @@ packages: dependency: transitive description: name: rational - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "2.2.0" recase: dependency: transitive description: name: recase - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "4.0.0" rxdart: dependency: transitive description: name: rxdart - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "0.27.3" scroll_to_index: dependency: "direct main" description: name: scroll_to_index - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "2.1.1" share: dependency: "direct main" description: name: share - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "2.0.4" shelf: dependency: transitive description: name: shelf - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "1.2.0" shelf_web_socket: dependency: transitive description: name: shelf_web_socket - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "1.0.1" shimmer: dependency: "direct main" description: name: shimmer - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "2.0.0" signature: dependency: "direct main" description: name: signature - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "4.1.1" sky_engine: @@ -1135,266 +1135,266 @@ packages: dependency: "direct main" description: name: sms_autofill - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "2.2.0" source_gen: dependency: transitive description: name: source_gen - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "1.2.1" source_helper: dependency: transitive description: name: source_helper - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "1.3.1" source_span: dependency: transitive description: name: source_span - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "1.8.1" sqflite: dependency: transitive description: name: sqflite - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "2.0.2" sqflite_common: dependency: transitive description: name: sqflite_common - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "2.2.0" stack_trace: dependency: transitive description: name: stack_trace - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "1.10.0" stream_channel: dependency: transitive description: name: stream_channel - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "2.1.0" stream_transform: dependency: transitive description: name: stream_transform - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "2.0.0" string_scanner: dependency: transitive description: name: string_scanner - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "1.1.0" synchronized: dependency: transitive description: name: synchronized - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "3.0.0+2" term_glyph: dependency: transitive description: name: term_glyph - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "1.2.0" test_api: dependency: transitive description: name: test_api - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "0.4.3" time: dependency: transitive description: name: time - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "2.1.0" timing: dependency: transitive description: name: timing - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "1.0.0" tint: dependency: transitive description: name: tint - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "2.0.0" tobias: dependency: "direct main" description: name: tobias - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "2.4.0+2" typed_data: dependency: transitive description: name: typed_data - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "1.3.0" universal_io: dependency: transitive description: name: universal_io - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "2.0.4" url_launcher: dependency: "direct main" description: name: url_launcher - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "6.0.20" url_launcher_android: dependency: transitive description: name: url_launcher_android - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "6.0.15" url_launcher_ios: dependency: transitive description: name: url_launcher_ios - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "6.0.15" url_launcher_linux: dependency: transitive description: name: url_launcher_linux - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "3.0.0" url_launcher_macos: dependency: transitive description: name: url_launcher_macos - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "3.0.0" url_launcher_platform_interface: dependency: transitive description: name: url_launcher_platform_interface - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "2.0.5" url_launcher_web: dependency: transitive description: name: url_launcher_web - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "2.0.6" url_launcher_windows: dependency: transitive description: name: url_launcher_windows - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "3.0.0" uuid: dependency: transitive description: name: uuid - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "3.0.6" vector_math: dependency: transitive description: name: vector_math - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "2.1.1" velocity_x: dependency: "direct main" description: name: velocity_x - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "3.4.0" vxstate: dependency: transitive description: name: vxstate - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "2.1.0" watcher: dependency: transitive description: name: watcher - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "1.0.1" waterfall_flow: dependency: "direct main" description: name: waterfall_flow - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "3.0.2" web_socket_channel: dependency: "direct main" description: name: web_socket_channel - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "2.1.0" win32: dependency: transitive description: name: win32 - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "2.5.0" xdg_directories: dependency: transitive description: name: xdg_directories - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "0.2.0+1" xml: dependency: transitive description: name: xml - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "5.3.1" yaml: dependency: "direct dev" description: name: yaml - url: "https://pub.dartlang.org" + url: "https://pub.flutter-io.cn" source: hosted version: "3.1.0" sdks: