import 'package:flutter/material.dart'; class AccountDialogService { /// Menampilkan dialog untuk memilih akun sumber (revenue) static Future?> showSourceAccountDialog( BuildContext context, List> accounts, ) async { if (accounts.isEmpty) { ScaffoldMessenger.of(context).showSnackBar( const SnackBar( content: Text( 'Daftar akun kosong. Pastikan kredensial sudah diatur dan akun telah dimuat. Klik "Muat Ulang Akun" untuk mencoba lagi.')), ); return null; } // Filter akun sumber (revenue) final revenueAccounts = accounts.where((account) => account['type'] == 'revenue').toList(); if (revenueAccounts.isEmpty) { ScaffoldMessenger.of(context).showSnackBar( const SnackBar( content: Text( 'Tidak ada akun sumber (revenue) yang ditemukan. Klik "Muat Ulang Akun" untuk mencoba lagi atau periksa akun Anda di Firefly III.')), ); return null; } return await showDialog?>( context: context, builder: (context) { return AlertDialog( title: const Text('Pilih Akun Sumber'), content: SizedBox( width: double.maxFinite, child: ListView.builder( shrinkWrap: true, itemCount: revenueAccounts.length, itemBuilder: (context, index) { final account = revenueAccounts[index]; return ListTile( title: Text(account['name']), subtitle: Text(account['type']), onTap: () => Navigator.of(context).pop(account), ); }, ), ), ); }, ); } /// Menampilkan dialog untuk memilih akun tujuan (asset) static Future?> showDestinationAccountDialog( BuildContext context, List> accounts, ) async { if (accounts.isEmpty) { ScaffoldMessenger.of(context).showSnackBar( const SnackBar( content: Text( 'Daftar akun kosong. Pastikan kredensial sudah diatur dan akun telah dimuat. Klik "Muat Ulang Akun" untuk mencoba lagi.')), ); return null; } // Filter akun tujuan (asset) final assetAccounts = accounts.where((account) => account['type'] == 'asset').toList(); if (assetAccounts.isEmpty) { ScaffoldMessenger.of(context).showSnackBar( const SnackBar( content: Text( 'Tidak ada akun tujuan (asset) yang ditemukan. Klik "Muat Ulang Akun" untuk mencoba lagi atau periksa akun Anda di Firefly III.')), ); return null; } return await showDialog?>( context: context, builder: (context) { return AlertDialog( title: const Text('Pilih Akun Tujuan'), content: SizedBox( width: double.maxFinite, child: ListView.builder( shrinkWrap: true, itemCount: assetAccounts.length, itemBuilder: (context, index) { final account = assetAccounts[index]; return ListTile( title: Text(account['name']), subtitle: Text(account['type']), onTap: () => Navigator.of(context).pop(account), ); }, ), ), ); }, ); } }