feat(mobile-app): add DST network support to deposit page

- Add DST to NetworkType enum
- Add dstAddress field to DepositAddressResponse
- Update deposit_service to fetch and cache DST address
- Add DST network button in deposit page UI

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
hailin 2025-12-08 19:25:29 -08:00
parent c6c4a75984
commit e8be584336
2 changed files with 33 additions and 7 deletions

View File

@ -7,12 +7,14 @@ import '../storage/storage_keys.dart';
class DepositAddressResponse { class DepositAddressResponse {
final String? kavaAddress; final String? kavaAddress;
final String? bscAddress; final String? bscAddress;
final String? dstAddress;
final bool isValid; final bool isValid;
final String? message; final String? message;
DepositAddressResponse({ DepositAddressResponse({
this.kavaAddress, this.kavaAddress,
this.bscAddress, this.bscAddress,
this.dstAddress,
required this.isValid, required this.isValid,
this.message, this.message,
}); });
@ -21,6 +23,7 @@ class DepositAddressResponse {
return DepositAddressResponse( return DepositAddressResponse(
kavaAddress: json['kavaAddress'], kavaAddress: json['kavaAddress'],
bscAddress: json['bscAddress'], bscAddress: json['bscAddress'],
dstAddress: json['dstAddress'],
isValid: json['isValid'] ?? false, isValid: json['isValid'] ?? false,
message: json['message'], message: json['message'],
); );
@ -96,13 +99,16 @@ class DepositService {
// //
final kavaAddress = await _secureStorage.read(key: StorageKeys.walletAddressKava); final kavaAddress = await _secureStorage.read(key: StorageKeys.walletAddressKava);
final bscAddress = await _secureStorage.read(key: StorageKeys.walletAddressBsc); final bscAddress = await _secureStorage.read(key: StorageKeys.walletAddressBsc);
final dstAddress = await _secureStorage.read(key: StorageKeys.walletAddressDst);
if (kavaAddress != null && kavaAddress.isNotEmpty && if (kavaAddress != null && kavaAddress.isNotEmpty &&
bscAddress != null && bscAddress.isNotEmpty) { bscAddress != null && bscAddress.isNotEmpty &&
debugPrint('从本地存储获取充值地址: kava=$kavaAddress, bsc=$bscAddress'); dstAddress != null && dstAddress.isNotEmpty) {
debugPrint('从本地存储获取充值地址: kava=$kavaAddress, bsc=$bscAddress, dst=$dstAddress');
return DepositAddressResponse( return DepositAddressResponse(
kavaAddress: kavaAddress, kavaAddress: kavaAddress,
bscAddress: bscAddress, bscAddress: bscAddress,
dstAddress: dstAddress,
isValid: true, isValid: true,
); );
} }
@ -120,8 +126,9 @@ class DepositService {
if (addresses != null) { if (addresses != null) {
final kava = addresses['kava'] as String?; final kava = addresses['kava'] as String?;
final bsc = addresses['bsc'] as String?; final bsc = addresses['bsc'] as String?;
final dst = addresses['dst'] as String?;
debugPrint('从服务器获取充值地址成功: kava=$kava, bsc=$bsc'); debugPrint('从服务器获取充值地址成功: kava=$kava, bsc=$bsc, dst=$dst');
// //
if (kava != null && kava.isNotEmpty) { if (kava != null && kava.isNotEmpty) {
@ -130,12 +137,16 @@ class DepositService {
if (bsc != null && bsc.isNotEmpty) { if (bsc != null && bsc.isNotEmpty) {
await _secureStorage.write(key: StorageKeys.walletAddressBsc, value: bsc); await _secureStorage.write(key: StorageKeys.walletAddressBsc, value: bsc);
} }
if (dst != null && dst.isNotEmpty) {
await _secureStorage.write(key: StorageKeys.walletAddressDst, value: dst);
}
return DepositAddressResponse( return DepositAddressResponse(
kavaAddress: kava, kavaAddress: kava,
bscAddress: bsc, bscAddress: bsc,
isValid: kava != null && bsc != null, dstAddress: dst,
message: (kava == null || bsc == null) ? '部分地址未生成' : null, isValid: kava != null && bsc != null && dst != null,
message: (kava == null || bsc == null || dst == null) ? '部分地址未生成' : null,
); );
} }
} else if (data != null && data['status'] == 'generating') { } else if (data != null && data['status'] == 'generating') {

View File

@ -9,6 +9,7 @@ import '../../../../core/di/injection_container.dart';
enum NetworkType { enum NetworkType {
kava, kava,
bsc, bsc,
dst,
} }
/// USDT /// USDT
@ -36,6 +37,9 @@ class _DepositUsdtPageState extends ConsumerState<DepositUsdtPage> {
/// BSC /// BSC
String? _bscAddress; String? _bscAddress;
/// DST
String? _dstAddress;
@override @override
void initState() { void initState() {
super.initState(); super.initState();
@ -71,6 +75,7 @@ class _DepositUsdtPageState extends ConsumerState<DepositUsdtPage> {
_kavaAddress = addressResponse.kavaAddress; _kavaAddress = addressResponse.kavaAddress;
_bscAddress = addressResponse.bscAddress; _bscAddress = addressResponse.bscAddress;
_dstAddress = addressResponse.dstAddress;
// //
try { try {
@ -115,6 +120,8 @@ class _DepositUsdtPageState extends ConsumerState<DepositUsdtPage> {
return _kavaAddress ?? ''; return _kavaAddress ?? '';
case NetworkType.bsc: case NetworkType.bsc:
return _bscAddress ?? ''; return _bscAddress ?? '';
case NetworkType.dst:
return _dstAddress ?? '';
} }
} }
@ -287,7 +294,7 @@ class _DepositUsdtPageState extends ConsumerState<DepositUsdtPage> {
// KAVA // KAVA
Expanded( Expanded(
child: _buildNetworkButton( child: _buildNetworkButton(
label: 'KAVA 网络', label: 'KAVA',
network: NetworkType.kava, network: NetworkType.kava,
isSelected: _selectedNetwork == NetworkType.kava, isSelected: _selectedNetwork == NetworkType.kava,
), ),
@ -295,11 +302,19 @@ class _DepositUsdtPageState extends ConsumerState<DepositUsdtPage> {
// BSC // BSC
Expanded( Expanded(
child: _buildNetworkButton( child: _buildNetworkButton(
label: 'BSC 网络', label: 'BSC',
network: NetworkType.bsc, network: NetworkType.bsc,
isSelected: _selectedNetwork == NetworkType.bsc, isSelected: _selectedNetwork == NetworkType.bsc,
), ),
), ),
// DST
Expanded(
child: _buildNetworkButton(
label: 'DST',
network: NetworkType.dst,
isSelected: _selectedNetwork == NetworkType.dst,
),
),
], ],
), ),
), ),