cashumit/lib/services/account_dialog_service.dart

107 lines
3.4 KiB
Dart

import 'package:flutter/material.dart';
class AccountDialogService {
/// Menampilkan dialog untuk memilih akun sumber (revenue)
static Future<Map<String, dynamic>?> showSourceAccountDialog(
BuildContext context,
List<Map<String, dynamic>> 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<Map<String, dynamic>?>(
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<Map<String, dynamic>?> showDestinationAccountDialog(
BuildContext context,
List<Map<String, dynamic>> 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<Map<String, dynamic>?>(
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),
);
},
),
),
);
},
);
}
}