diff --git a/lib/app/modules/home/controllers/home_controller.dart b/lib/app/modules/home/controllers/home_controller.dart index b12cbfc0..e1c6cbdf 100644 --- a/lib/app/modules/home/controllers/home_controller.dart +++ b/lib/app/modules/home/controllers/home_controller.dart @@ -187,6 +187,9 @@ class HomeController extends GetxController { // Controller for formKey final formKey = GlobalKey(); + // Index for tabbar + var selectedIndex = 0.obs; + // Bunch of controllers for textfield var uid = TextEditingController(); var setPassword = TextEditingController(); diff --git a/lib/app/modules/home/widget/home_history_and_submission.dart b/lib/app/modules/home/widget/home_history_and_submission.dart index 4958245d..b6560eb9 100644 --- a/lib/app/modules/home/widget/home_history_and_submission.dart +++ b/lib/app/modules/home/widget/home_history_and_submission.dart @@ -1,8 +1,11 @@ // 🐦 Flutter imports: +import 'package:akm/app/common/style.dart'; import 'package:akm/app/modules/home/controllers/home_controller.dart'; import 'package:akm/app/modules/home/widget/components/home_history_and_submission.dart/empty_history_and_submission.dart'; import 'package:akm/app/modules/home/widget/components/home_history_and_submission.dart/list_riwayat_input.dart'; import 'package:akm/app/modules/home/widget/components/home_history_and_submission.dart/list_riwayat_pengajuan.dart'; +import 'package:akm/app/routes/app_pages.dart'; +import 'package:avatar_glow/avatar_glow.dart'; import 'package:bootstrap_alert/bootstrap_alert.dart'; import 'package:flutter/material.dart'; @@ -10,7 +13,7 @@ import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:scaffold_gradient_background/scaffold_gradient_background.dart'; -class HomeHistoryAndSubmission extends StatelessWidget { +class HomeHistoryAndSubmission extends StatefulWidget { final HomeController controller; const HomeHistoryAndSubmission({ @@ -18,13 +21,19 @@ class HomeHistoryAndSubmission extends StatelessWidget { required this.controller, }); + @override + State createState() => + _HomeHistoryAndSubmissionState(); +} + +class _HomeHistoryAndSubmissionState extends State { final bool _showAlert = true; - final int selectedIndex = 0; + + int selectedIndex = 0; @override Widget build(BuildContext context) { return DefaultTabController( - initialIndex: selectedIndex, length: 2, child: ScaffoldGradientBackground( gradient: LinearGradient( @@ -37,10 +46,15 @@ class HomeHistoryAndSubmission extends StatelessWidget { ), body: Column( children: [ - const TabBar( - physics: NeverScrollableScrollPhysics(), + TabBar( + onTap: (index) { + setState(() { + selectedIndex = index; + }); + }, + physics: const NeverScrollableScrollPhysics(), indicatorColor: Colors.white, - tabs: [ + tabs: const [ Tab( text: 'Riwayat Penginputan', icon: Icon(Icons.history), @@ -56,12 +70,12 @@ class HomeHistoryAndSubmission extends StatelessWidget { physics: const NeverScrollableScrollPhysics(), children: [ Obx(() { - if (controller.isMyInputProcessing.value) { + if (widget.controller.isMyInputProcessing.value) { return const Center( child: CircularProgressIndicator(), ); } else { - if (controller.listMyInput.isNotEmpty) { + if (widget.controller.listMyInput.isNotEmpty) { return Column( children: [ BootstrapAlert( @@ -105,29 +119,29 @@ class HomeHistoryAndSubmission extends StatelessWidget { ), Expanded( child: ListRiwayatInput( - controller: controller, + controller: widget.controller, ), ), ], ); } else { return EmptyHistoryAndSubmission( - controller: controller, + controller: widget.controller, text: 'Belum ada riwayat penginputan', onPressed: () { - controller.refreshInputtan(); + widget.controller.refreshInputtan(); }, ); } } }), Obx(() { - if (controller.isMySubmissionProcessing.value) { + if (widget.controller.isMySubmissionProcessing.value) { return const Center( child: CircularProgressIndicator(), ); } else { - if (controller.listMySubmission.isNotEmpty) { + if (widget.controller.listMySubmission.isNotEmpty) { return Column( children: [ BootstrapAlert( @@ -145,17 +159,17 @@ class HomeHistoryAndSubmission extends StatelessWidget { ), Expanded( child: ListRiwayatPengajuan( - controller: controller, + controller: widget.controller, ), ), ], ); } else { return EmptyHistoryAndSubmission( - controller: controller, + controller: widget.controller, text: 'Belum ada riwayat pengajuan', onPressed: () { - controller.refreshPengajuan(); + widget.controller.refreshPengajuan(); }, ); } @@ -167,13 +181,20 @@ class HomeHistoryAndSubmission extends StatelessWidget { ], ), floatingActionButton: selectedIndex == 0 - ? FloatingActionButton( - onPressed: () { - Get.toNamed('/home/input'); - }, - child: const Icon(Icons.add), + ? AvatarGlow( + endRadius: 50, + child: FloatingActionButton( + backgroundColor: primaryColor, + elevation: 10, + onPressed: () { + Get.toNamed(Routes.LIST_DEBITUR); + }, + child: const Icon( + Icons.search_outlined, + ), + ), ) - : null, + : const SizedBox.shrink(), ), ); } diff --git a/lib/app/modules/list_debitur/widget/components/list_debitur_filter_fab/label_text.dart b/lib/app/modules/list_debitur/widget/components/list_debitur_filter_fab/label_text.dart new file mode 100644 index 00000000..76e32fde --- /dev/null +++ b/lib/app/modules/list_debitur/widget/components/list_debitur_filter_fab/label_text.dart @@ -0,0 +1,24 @@ +import 'package:flutter/material.dart'; + +class FilterLabel extends StatelessWidget { + final String text; + + const FilterLabel({super.key, required this.text}); + + @override + Widget build(BuildContext context) { + return Align( + alignment: Alignment.topLeft, + child: Padding( + padding: const EdgeInsets.only(left: 48), + child: Text( + text, + style: const TextStyle( + fontSize: 16, + fontWeight: FontWeight.w600, + ), + ), + ), + ); + } +} diff --git a/lib/app/modules/list_debitur/widget/list_debitur_filter_fab.dart b/lib/app/modules/list_debitur/widget/list_debitur_filter_fab.dart index 5df11fe3..fed3e068 100644 --- a/lib/app/modules/list_debitur/widget/list_debitur_filter_fab.dart +++ b/lib/app/modules/list_debitur/widget/list_debitur_filter_fab.dart @@ -1,4 +1,5 @@ // 🐦 Flutter imports: +import 'package:akm/app/modules/list_debitur/widget/components/list_debitur_filter_fab/label_text.dart'; import 'package:flutter/material.dart'; // 📦 Package imports: @@ -37,8 +38,13 @@ class ListDebiturFilterFab extends StatelessWidget { showMaterialModalBottomSheet( context: context, builder: (context) { - return SafeArea( - child: Container( + return Scaffold( + resizeToAvoidBottomInset: false, + appBar: AppBar( + title: const Text('Filter'), + leading: const SizedBox.shrink(), + ), + body: Container( padding: const EdgeInsets.all(16), child: Column( mainAxisAlignment: MainAxisAlignment.spaceBetween, @@ -50,17 +56,8 @@ class ListDebiturFilterFab extends StatelessWidget { child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - const Align( - alignment: Alignment.topLeft, - child: Text( - 'Umur', - style: TextStyle( - fontSize: 16, - fontWeight: FontWeight.w600, - ), - ), - ), - const SizedBox(height: 10), + const FilterLabel(text: 'Filter berdasarkan Umur'), + const SizedBox(height: 16), Obx( () => Row( children: [ @@ -98,14 +95,22 @@ class ListDebiturFilterFab extends StatelessWidget { ]), keyboardType: TextInputType.number, controller: controller.filterUmurInput, - decoration: const InputDecoration( - prefixIcon: - Icon(FontAwesomeIcons.odnoklassniki), - hintText: 'Filter berdasarkan Umur', - border: OutlineInputBorder( - borderRadius: BorderRadius.all( - Radius.circular(10), - ), + decoration: InputDecoration( + hintText: 'Masukkan umur', + filled: true, + suffixText: 'Tahun', + suffixStyle: const TextStyle( + fontSize: 16, + ), + fillColor: Colors.grey.shade400, + focusedBorder: OutlineInputBorder( + borderSide: BorderSide( + color: + Theme.of(context).primaryColor), + ), + enabledBorder: const OutlineInputBorder( + borderSide: + BorderSide(color: Colors.grey), ), ), enabled: @@ -127,17 +132,9 @@ class ListDebiturFilterFab extends StatelessWidget { ], ), ), - const SizedBox(height: 10), - const Align( - alignment: Alignment.topLeft, - child: Text( - 'Domisili', - style: TextStyle( - fontSize: 16, - fontWeight: FontWeight.w600, - ), - ), - ), + const SizedBox(height: 16), + const FilterLabel( + text: 'Filter berdasarkan Domisili'), const SizedBox(height: 10), Obx( () => Row( @@ -204,17 +201,10 @@ class ListDebiturFilterFab extends StatelessWidget { ], ), ), - const SizedBox(height: 10), - const Align( - alignment: Alignment.topLeft, - child: Text( - 'Tanggal', - style: TextStyle( - fontSize: 16, - fontWeight: FontWeight.w600, - ), - ), - ), + const SizedBox(height: 16), + const FilterLabel( + text: + 'Filter berdasarkan Jarak Tanggal Penginputan'), const SizedBox(height: 10), Obx( () => Row( @@ -280,17 +270,9 @@ class ListDebiturFilterFab extends StatelessWidget { ], ), ), - const SizedBox(height: 10), - const Align( - alignment: Alignment.topLeft, - child: Text( - 'Jenis Usaha', - style: TextStyle( - fontSize: 16, - fontWeight: FontWeight.w600, - ), - ), - ), + const SizedBox(height: 16), + const FilterLabel( + text: 'Filter berdasarkan Jenis Usaha'), const SizedBox(height: 10), Obx( () => Row( @@ -358,17 +340,8 @@ class ListDebiturFilterFab extends StatelessWidget { ], ), ), - const SizedBox(height: 10), - const Align( - alignment: Alignment.topLeft, - child: Text( - 'Plafond', - style: TextStyle( - fontSize: 16, - fontWeight: FontWeight.w600, - ), - ), - ), + const SizedBox(height: 16), + const FilterLabel(text: 'Filter berdasarkan Plafond'), const SizedBox(height: 10), Obx( () => Column( diff --git a/lib/app/widget/form/text_field.dart b/lib/app/widget/form/text_field.dart index 77c741de..0f2db00d 100644 --- a/lib/app/widget/form/text_field.dart +++ b/lib/app/widget/form/text_field.dart @@ -15,6 +15,8 @@ class FleetimeTextField extends StatelessWidget { final bool? alignLabelWithHint; final bool? readOnly; final String? suffixText; + final bool? enabled; + final void Function(String)? onSaved; const FleetimeTextField({ Key? key, @@ -31,6 +33,8 @@ class FleetimeTextField extends StatelessWidget { this.alignLabelWithHint, this.readOnly, this.suffixText, + this.enabled, + this.onSaved, }) : super(key: key); @override