계정 정보 다이얼로그 추가 및 전체 목록 페치 개선

This commit is contained in:
JiWoong Sul
2025-10-22 01:05:47 +09:00
parent 6b58effc83
commit f4dc83d441
44 changed files with 1636 additions and 362 deletions

View File

@@ -122,9 +122,10 @@ class _WarehouseEnabledPageState extends State<_WarehouseEnabledPage> {
final error = _controller.errorMessage;
if (error != null && error != _lastError && mounted) {
_lastError = error;
ScaffoldMessenger.of(
context,
).showSnackBar(SnackBar(content: Text(error)));
final messenger = ScaffoldMessenger.maybeOf(context);
if (messenger != null) {
messenger.showSnackBar(SnackBar(content: Text(error)));
}
_controller.clearError();
}
}
@@ -151,7 +152,7 @@ class _WarehouseEnabledPageState extends State<_WarehouseEnabledPage> {
final currentPage = result?.page ?? 1;
final totalPages = result == null || result.pageSize == 0
? 1
: (result.total / result.pageSize).ceil().clamp(1, 9999);
: (result.total / result.pageSize).ceil().clamp(1, 9999) as int;
final hasNext = result == null
? false
: (result.page * result.pageSize) < result.total;
@@ -255,6 +256,14 @@ class _WarehouseEnabledPageState extends State<_WarehouseEnabledPage> {
),
Row(
children: [
ShadButton.outline(
size: ShadButtonSize.sm,
onPressed: _controller.isLoading || currentPage <= 1
? null
: () => _goToPage(1),
child: const Text('처음'),
),
const SizedBox(width: 8),
ShadButton.outline(
size: ShadButtonSize.sm,
onPressed: _controller.isLoading || currentPage <= 1
@@ -270,6 +279,15 @@ class _WarehouseEnabledPageState extends State<_WarehouseEnabledPage> {
: () => _goToPage(currentPage + 1),
child: const Text('다음'),
),
const SizedBox(width: 8),
ShadButton.outline(
size: ShadButtonSize.sm,
onPressed:
_controller.isLoading || currentPage >= totalPages
? null
: () => _goToPage(totalPages),
child: const Text('마지막'),
),
],
),
],
@@ -341,8 +359,18 @@ class _WarehouseEnabledPageState extends State<_WarehouseEnabledPage> {
}
void _goToPage(int page) {
final result = _controller.result;
final int totalPages;
if (result == null || result.pageSize == 0) {
totalPages = 1;
} else {
final calculated = (result.total / result.pageSize).ceil();
totalPages = calculated < 1 ? 1 : calculated;
}
if (page < 1) {
page = 1;
} else if (page > totalPages) {
page = totalPages;
}
_updateRoute(page: page);
}
@@ -522,7 +550,10 @@ class _WarehouseEnabledPageState extends State<_WarehouseEnabledPage> {
isActive: isActiveNotifier.value,
note: note.isEmpty ? null : note,
);
final navigator = Navigator.of(context);
final navigator = Navigator.of(
context,
rootNavigator: true,
);
final response = isEdit
? await _controller.update(warehouseId!, input)
: await _controller.create(input);
@@ -545,7 +576,8 @@ class _WarehouseEnabledPageState extends State<_WarehouseEnabledPage> {
return ShadButton.ghost(
onPressed: isSaving
? null
: () => Navigator.of(context).pop(false),
: () =>
Navigator.of(context, rootNavigator: true).pop(false),
child: const Text('취소'),
);
},
@@ -812,11 +844,13 @@ class _WarehouseEnabledPageState extends State<_WarehouseEnabledPage> {
description: '"${warehouse.warehouseName}" 창고를 삭제하시겠습니까?',
actions: [
ShadButton.ghost(
onPressed: () => Navigator.of(context).pop(false),
onPressed: () =>
Navigator.of(context, rootNavigator: true).pop(false),
child: const Text('취소'),
),
ShadButton(
onPressed: () => Navigator.of(context).pop(true),
onPressed: () =>
Navigator.of(context, rootNavigator: true).pop(true),
child: const Text('삭제'),
),
],
@@ -840,10 +874,14 @@ class _WarehouseEnabledPageState extends State<_WarehouseEnabledPage> {
}
void _showSnack(String message) {
if (!mounted) return;
ScaffoldMessenger.of(
context,
).showSnackBar(SnackBar(content: Text(message)));
if (!mounted) {
return;
}
final messenger = ScaffoldMessenger.maybeOf(context);
if (messenger == null) {
return;
}
messenger.showSnackBar(SnackBar(content: Text(message)));
}
String _formatDateTime(DateTime? value) {