Perbarui dependensi dan logika di JadwalSectionWidget serta hapus KonfirmasiPenerimaView. Modifikasi JadwalSectionWidget untuk menangani ID penyaluran dengan lebih baik dan menampilkan pesan kesalahan jika ID tidak ditemukan. Tambahkan rute baru untuk detail penyaluran dan perbarui rute aplikasi untuk mencerminkan perubahan ini.

This commit is contained in:
Khafidh Fuadi
2025-03-15 19:07:00 +07:00
parent 5ec18720af
commit da06611c3a
13 changed files with 1923 additions and 697 deletions

View File

@ -0,0 +1,54 @@
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:penyaluran_app/app/theme/app_theme.dart';
class CustomAppBar extends StatelessWidget implements PreferredSizeWidget {
final String title;
final bool showBackButton;
final List<Widget>? actions;
final Widget? leading;
final bool centerTitle;
final double elevation;
final Color? backgroundColor;
final Color? foregroundColor;
const CustomAppBar({
Key? key,
required this.title,
this.showBackButton = false,
this.actions,
this.leading,
this.centerTitle = true,
this.elevation = 0,
this.backgroundColor,
this.foregroundColor,
}) : super(key: key);
@override
Widget build(BuildContext context) {
return AppBar(
title: Text(
title,
style: TextStyle(
fontSize: 18,
fontWeight: FontWeight.bold,
color: foregroundColor ?? Colors.white,
),
),
centerTitle: centerTitle,
elevation: elevation,
backgroundColor: backgroundColor ?? AppTheme.primaryColor,
foregroundColor: foregroundColor ?? Colors.white,
leading: showBackButton
? IconButton(
icon: const Icon(Icons.arrow_back, color: Colors.white),
onPressed: () => Get.back(),
)
: leading,
actions: actions,
);
}
@override
Size get preferredSize => const Size.fromHeight(kToolbarHeight);
}

View File

@ -0,0 +1,48 @@
import 'package:flutter/material.dart';
import 'package:penyaluran_app/app/theme/app_colors.dart';
class LoadingIndicator extends StatelessWidget {
final String? message;
final Color? color;
final double size;
const LoadingIndicator({
Key? key,
this.message,
this.color,
this.size = 40.0,
}) : super(key: key);
@override
Widget build(BuildContext context) {
return Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
SizedBox(
width: size,
height: size,
child: CircularProgressIndicator(
valueColor: AlwaysStoppedAnimation<Color>(
color ?? AppColors.primary,
),
strokeWidth: 3.0,
),
),
if (message != null) ...[
const SizedBox(height: 16),
Text(
message!,
style: TextStyle(
fontSize: 16,
color: Colors.grey[700],
),
textAlign: TextAlign.center,
),
],
],
),
);
}
}