// 钱包页面 import 'package:easy_refresh/easy_refresh.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:loopin/IM/im_service.dart'; import 'package:loopin/behavior/custom_scroll_behavior.dart'; import 'package:loopin/pages/my/merchant/balance/controller.dart'; class Balance extends StatefulWidget { const Balance({super.key}); @override State createState() => _BalanceState(); } class _BalanceState extends State { final controller = Get.put(BalanceController()); @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar(title: const Text("我的钱包")), body: ScrollConfiguration( behavior: CustomScrollBehavior().copyWith(scrollbars: false), child: Column( children: [ // 上半部分:余额 + 充值 Container( padding: const EdgeInsets.all(16), color: Colors.blueAccent, width: double.infinity, child: Obx(() { return Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ const Text( "钱包余额", style: TextStyle(color: Colors.white, fontSize: 16), ), const SizedBox(height: 8), Text( "¥ ${controller.balance.value.toStringAsFixed(2)}", style: const TextStyle( color: Colors.white, fontSize: 28, fontWeight: FontWeight.bold, ), ), const SizedBox(height: 12), ElevatedButton( onPressed: () => controller.recharge(100.0), style: ElevatedButton.styleFrom( backgroundColor: Colors.orange, ), child: const Text("充值 100 元"), ), ], ); }), ), // 下半部分:流水记录分页列表 Expanded( child: Obx(() { return EasyRefresh.builder( callLoadOverOffset: 20, //触底距离 callRefreshOverOffset: 20, // 下拉距离 header: ClassicHeader( dragText: '下拉刷新', armedText: '释放刷新', readyText: '加载中...', processingText: '加载中...', processedText: '加载完成', failedText: '加载失败,请重试', messageText: '最后更新于 %T', ), footer: ClassicFooter( dragText: '加载更多', armedText: '释放加载', readyText: '加载中...', processingText: '加载中...', processedText: controller.hasMore.value ? '加载完成' : '没有更多了~', failedText: '加载失败,请重试', messageText: '最后更新于 %T', succeededIcon: controller.hasMore.value ? Icon(Icons.check_circle, color: Colors.green) : Icon(Icons.warning, color: Colors.orange), ), onRefresh: () async { await controller.getData(reset: true); }, onLoad: () async { if (controller.hasMore.value) { await controller.getData(); } }, childBuilder: (context, physics) { return ListView.builder( physics: physics, itemCount: controller.data.length, itemBuilder: (context, index) { final tx = controller.data[index]; logger.w(tx.source); return ListTile( title: Text(tx.source), subtitle: Text(tx.createTime), trailing: Text( "变动金额:${tx.changeType == 1 ? '+' : '-'}${tx.changeAmount}", // 变动金额 style: TextStyle( fontWeight: FontWeight.bold, color: tx.changeType == 1 ? Colors.green : Colors.red, ), ), ); }, ); }, ); }), ), ], ), ), ); } }