import 'package:autosos_flutter/provider/providers.dart'; import 'package:autosos_flutter/util/toast.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_easyloading/flutter_easyloading.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:go_router/go_router.dart'; /// 提现申请页(对应 Android TiXianActivity) class WithdrawalPage extends ConsumerStatefulWidget { const WithdrawalPage({super.key}); @override ConsumerState createState() => _WithdrawalPageState(); } class _WithdrawalPageState extends ConsumerState { final _amount = TextEditingController(); final _realName = TextEditingController(); final _bankAccount = TextEditingController(); bool _loading = false; double _balance = 0; @override void initState() { super.initState(); _load(); } @override void dispose() { _amount.dispose(); _realName.dispose(); _bankAccount.dispose(); super.dispose(); } Future _load() async { final resp = await ref.read(userApiProvider).info(); if (!mounted || !resp.isSuccess || resp.data == null) return; final u = resp.data!; setState(() { _balance = u.balance ?? 0; _realName.text = u.realName ?? ''; }); } Future _submit() async { final amount = double.tryParse(_amount.text.trim()); if (amount == null || amount <= 0) { Toast.error('请输入提现金额'); return; } if (amount > _balance) { Toast.error('提现金额不能超过余额'); return; } if (_realName.text.isEmpty) { Toast.error('请填写收款人姓名'); return; } if (_bankAccount.text.isEmpty) { Toast.error('请填写银行卡号'); return; } setState(() => _loading = true); EasyLoading.show(status: '提交中…'); try { final r = await ref.read(userApiProvider).applyWithdrawal( amount: amount, bankAccount: _bankAccount.text.trim(), realName: _realName.text.trim(), ); EasyLoading.dismiss(); if (!r.isSuccess) { Toast.error(r.message ?? '提现失败'); return; } Toast.success('提现申请已提交'); if (mounted) context.pop(true); } catch (e) { EasyLoading.dismiss(); Toast.error('提现异常:$e'); } finally { if (mounted) setState(() => _loading = false); } } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar(title: const Text('提现')), body: SingleChildScrollView( padding: const EdgeInsets.all(16), child: Column( crossAxisAlignment: CrossAxisAlignment.stretch, children: [ Container( padding: const EdgeInsets.all(16), decoration: BoxDecoration( gradient: LinearGradient( colors: [Colors.red.shade400, Colors.red.shade700], ), borderRadius: BorderRadius.circular(8), ), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ const Text( '可提现余额(元)', style: TextStyle(color: Colors.white70), ), const SizedBox(height: 4), Text( '¥${_balance.toStringAsFixed(2)}', style: const TextStyle( color: Colors.white, fontSize: 32, fontWeight: FontWeight.bold, ), ), ], ), ), const SizedBox(height: 24), TextField( controller: _amount, keyboardType: const TextInputType.numberWithOptions(decimal: true), inputFormatters: [ FilteringTextInputFormatter.allow(RegExp(r'[0-9.]')), ], decoration: const InputDecoration( labelText: '提现金额', prefixText: '¥ ', border: OutlineInputBorder(), ), style: const TextStyle( fontSize: 24, color: Colors.red, fontWeight: FontWeight.bold, ), ), const SizedBox(height: 4), Align( alignment: Alignment.centerRight, child: TextButton( onPressed: () => _amount.text = _balance.toStringAsFixed(2), child: const Text('全部提现'), ), ), const SizedBox(height: 12), TextField( controller: _realName, decoration: const InputDecoration( labelText: '收款人姓名', border: OutlineInputBorder(), ), ), const SizedBox(height: 12), TextField( controller: _bankAccount, keyboardType: TextInputType.number, decoration: const InputDecoration( labelText: '银行卡号', border: OutlineInputBorder(), ), ), const SizedBox(height: 24), ElevatedButton( onPressed: _loading ? null : _submit, style: ElevatedButton.styleFrom( backgroundColor: Colors.red, minimumSize: const Size.fromHeight(48), ), child: Text(_loading ? '提交中…' : '确认提现'), ), const SizedBox(height: 12), const Text( '• 提现申请提交后,财务将在 1-3 个工作日内处理\n' '• 单笔最低 1 元,最高 50000 元\n' '• 如有问题请联系客服', style: TextStyle(fontSize: 12, color: Colors.grey), ), ], ), ), ); } }