import 'dart:convert'; import 'package:dio/dio.dart'; import 'package:flutter/material.dart'; import 'package:huixiang/generated/l10n.dart'; import 'package:huixiang/retrofit/data/base_data.dart'; import 'package:huixiang/retrofit/data/page.dart'; import 'package:huixiang/retrofit/data/user_bill.dart'; import 'package:huixiang/retrofit/data/user_info.dart'; import 'package:huixiang/retrofit/retrofit_api.dart'; import 'package:huixiang/utils/font_weight.dart'; import 'package:huixiang/view_widget/classic_header.dart'; import 'package:huixiang/view_widget/my_appbar.dart'; import 'package:huixiang/view_widget/my_footer.dart'; import 'package:huixiang/view_widget/round_button.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:pull_to_refresh/pull_to_refresh.dart'; import 'package:shared_preferences/shared_preferences.dart'; class MineWalletPage extends StatefulWidget { @override State createState() { return _MineWalletPage(); } } class _MineWalletPage extends State { dynamic mBalance = 0; @override void initState() { super.initState(); loadBalance(); } UserInfo userInfo; ApiService apiService; int current = 1; List userBills = []; loadBalance() async { SharedPreferences sharedPreferences = await SharedPreferences.getInstance(); userInfo = UserInfo.fromJson(jsonDecode(sharedPreferences.getString('user'))); mBalance = double.tryParse(userInfo.money); if (mounted) setState(() {}); String token = sharedPreferences.getString("token"); apiService = ApiService(Dio(), context: context, token: token); loadBillInfo(); } _onRefresh() { current = 1; loadBillInfo(); } queryUserBalance() async { BaseData baseData = await apiService.queryInfo(); if (baseData != null && baseData.isSuccess) { userInfo = baseData.data; mBalance = double.tryParse(userInfo.money); if (mounted) setState(() {}); } } loadBillInfo() async { queryUserBalance(); BaseData> baseData = await apiService.queryBillInfo({ "current": current, "model": {"category": "", "title": "bill_title_balance", "type": ""}, "order": "descending", "size": 10, "sort": "id" }).catchError((onError) { refreshController.refreshFailed(); refreshController.loadFailed(); }); if (baseData != null && baseData.isSuccess) { if (current == 1) { userBills.clear(); } userBills.addAll(baseData.data.records); refreshController.refreshCompleted(); refreshController.loadComplete(); if (current * 10 > int.tryParse(baseData.data.total)) { refreshController.loadNoData(); } else { current += 1; } } else { refreshController.refreshFailed(); refreshController.loadFailed(); } if (mounted) setState(() {}); } RefreshController refreshController = RefreshController(); @override Widget build(BuildContext context) { return Scaffold( appBar: MyAppBar( title: S.of(context).wodeqianbao, titleColor: Colors.black, background: Color(0xFFF7F7F7), leadingColor: Colors.black, ), body: SmartRefresher( controller: refreshController, enablePullDown: true, enablePullUp: true, physics: BouncingScrollPhysics(), header: MyHeader(), footer: CustomFooter( builder: (context, mode) { return MyFooter(mode); }, ), onRefresh: _onRefresh, onLoading: loadBillInfo, child: SingleChildScrollView( child: Container( color: Color(0xFFF7F7F7), child: Column( children: [ balance(), // rechargeWithdrawal(), balanceHistory(), ], ), ), ), ), ); } Widget balanceHistory() { return Container( margin: EdgeInsets.fromLTRB(16.w, 16.h, 16.w, 0), padding: EdgeInsets.fromLTRB(24.w, 24.h, 24.w, 24.h), decoration: BoxDecoration( color: Colors.white, borderRadius: BorderRadius.all(Radius.circular(8)), boxShadow: [ BoxShadow( color: Colors.black.withAlpha(25), offset: Offset(0, 3), blurRadius: 14, spreadRadius: 0, ) ]), child: Column( mainAxisAlignment: MainAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( S.of(context).lishijilu, style: TextStyle( fontWeight: FontWeight.bold, color: Colors.black, fontSize: 16.sp, ), ), SizedBox( height: 16.h, ), Container( margin: EdgeInsets.only(top: 14.h), child: ListView.builder( itemCount: userBills != null ? userBills.length : 0, shrinkWrap: true, padding: EdgeInsets.only(bottom: 20.h), physics: NeverScrollableScrollPhysics(), itemBuilder: (context, position) { return historyItem(userBills[position], position); }), ), ], ), ); } Widget historyItem(UserBill userBill, position) { return Container( margin: EdgeInsets.only(top: 10.h, bottom: 10.h), child: Row( children: [ Image.asset( userBill.pm == 0 ? "assets/image/icon_wallet_withdrawal.png" : "assets/image/icon_wallet_recharge.png", width: 34.w, height: 34.h, ), SizedBox( width: 12.w, ), Expanded( flex: 1, child: Container( height: 34.h, child: Column( mainAxisAlignment: MainAxisAlignment.spaceAround, crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( userBill.name, style: TextStyle( color: Colors.black, fontSize: 12.sp, ), ), Text( userBill.createTime, style: TextStyle( color: Color(0xFF727272), fontSize: 10.sp, ), ) ], ), ), ), Container( child: Column( mainAxisAlignment: MainAxisAlignment.spaceAround, crossAxisAlignment: CrossAxisAlignment.end, children: [ Text( userBill.pm == 0 ? "-${userBill.number}" : "+${userBill.number}", style: TextStyle( color: Color(0xFF20662A), fontWeight: FontWeight.bold, fontSize: 12.sp, ), ), Text( S.of(context).yue_(userBill.balance), style: TextStyle( color: Color(0xFF727272), fontSize: 10.sp, ), ) ], ), ) ], ), ); } Widget balance() { return Container( width: double.infinity, margin: EdgeInsets.fromLTRB(16.w, 16.h, 16.w, 8.h), padding: EdgeInsets.fromLTRB(24.w, 24.h, 24.w, 24.h), decoration: BoxDecoration( color: Colors.white, borderRadius: BorderRadius.circular(8), boxShadow: [ BoxShadow( color: Colors.black.withAlpha(25), offset: Offset(0, 3), blurRadius: 14, spreadRadius: 0, ), ], ), child: Column( mainAxisAlignment: MainAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.center, children: [ Stack( alignment: Alignment.center, children: [ Align( alignment: Alignment.center, child: Text( S.of(context).zhanghuyue, style: TextStyle( fontWeight: MyFontWeight.semi_bold, color: Color(0xFF353535), fontSize: 20.sp, ), ), ), GestureDetector( onTap: () { queryUserBalance(); }, child: Row( mainAxisAlignment: MainAxisAlignment.end, children: [ Icon( Icons.refresh, size: 20, color: Color(0xFF8A8A8A), ), Text( S.of(context).shuaxin, style: TextStyle( color: Color(0xFF353535), fontSize: 12.sp, ), ), ], ), ), ], ), SizedBox( height: 16.h, ), Text( "$mBalance", style: TextStyle( fontWeight: MyFontWeight.medium, color: Color(0xFF353535), fontSize: 50.sp, ), ), // SizedBox( // height: 4.h, // ), // Text( // S.of(context).keyongyue, // style: TextStyle( // color: Color(0xFF20662A), // fontSize: 16.sp, // fontWeight: MyFontWeight.regular // ), // ), SizedBox( height: 24.h, ), InkWell( onTap: () { toRecharge(); }, child: RoundButton( width: 104.w, text: S.of(context).lijichongzhi, textColor: Colors.white, fontWeight: MyFontWeight.semi_bold, radius: 15, backgroup: Color(0xFF32A060), fontSize: 14.sp, padding: EdgeInsets.symmetric(vertical: 5.h), ), ), ], ), ); } toRecharge() async { await Navigator.of(context).pushNamed('/router/recharge_page'); loadBillInfo(); } //充值/提现 // Widget rechargeWithdrawal() { // return Row( // children: [ // Expanded( // child: InkWell( // onTap: () { // toRecharge(); // }, // child: Container( // margin: EdgeInsets.fromLTRB(16.w, 16.h, 16.w, 16.h), // padding: EdgeInsets.fromLTRB(0, 7.h, 0, 7.h), // decoration: BoxDecoration( // color: Colors.white, // borderRadius: BorderRadius.circular(8), // boxShadow: [ // BoxShadow( // color: Colors.black.withAlpha(12), // offset: Offset(0, 3), // blurRadius: 14, // spreadRadius: 0, // ) // ]), // child: Row( // mainAxisAlignment: MainAxisAlignment.center, // crossAxisAlignment: CrossAxisAlignment.center, // children: [ // Image.asset( // "assets/image/icon_wallet_recharge.png", // width: 40.w, // height: 40.h, // ), // Text( // S.of(context).chongzhi, // style: TextStyle( // fontWeight: FontWeight.bold, // fontSize: 16.sp, // color: Colors.black, // ), // ) // ], // ), // ), // ), // flex: 1, // ), // Expanded( // child: Container( // margin: EdgeInsets.fromLTRB(16.w, 16.h, 16.w, 16.h), // padding: EdgeInsets.fromLTRB(0, 7.h, 0, 7.h), // decoration: BoxDecoration( // color: Colors.white, // borderRadius: BorderRadius.all(Radius.circular(8)), // boxShadow: [ // BoxShadow( // color: Colors.black.withAlpha(12), // offset: Offset(0, 3), // blurRadius: 14, // spreadRadius: 0) // ]), // child: Row( // mainAxisAlignment: MainAxisAlignment.center, // crossAxisAlignment: CrossAxisAlignment.center, // children: [ // Image.asset( // "assets/image/icon_wallet_withdrawal.png", // width: 40.w, // height: 40.w, // ), // Text( // S.of(context).tixian, // style: TextStyle( // fontWeight: FontWeight.bold, // fontSize: 16.sp, // color: Colors.black, // ), // ) // ], // ), // ), // flex: 1, // ), // ], // ); // } }