From 088c18f536fd2386c1945319af84778c22ab098f Mon Sep 17 00:00:00 2001 From: sindhu Date: Tue, 16 Jan 2024 08:03:25 +0700 Subject: [PATCH] step 14 : fix userid transaksi post, typography, login, drawer --- app_petty_cash/fonts/PublicSans-Bold.ttf | Bin 0 -> 60264 bytes app_petty_cash/lib/main.dart | 4 +- .../lib/screen/home/home_screen.dart | 9 +- .../lib/screen/login/login_form.dart | 528 +++++++++--------- .../lib/screen/login/login_screen.dart | 2 +- .../lib/screen/report/report_screen.dart | 9 +- .../screen/transaksi/transaksi_screen.dart | 93 ++- .../lib/screen/user/user_screen.dart | 9 +- app_petty_cash/lib/widget/custom_drawer.dart | 63 ++- app_petty_cash/pubspec.yaml | 4 +- 10 files changed, 388 insertions(+), 333 deletions(-) create mode 100644 app_petty_cash/fonts/PublicSans-Bold.ttf diff --git a/app_petty_cash/fonts/PublicSans-Bold.ttf b/app_petty_cash/fonts/PublicSans-Bold.ttf new file mode 100644 index 0000000000000000000000000000000000000000..7a14109efbdd90b6eed35c3a06ad976fdd0de86a GIT binary patch literal 60264 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 literal 0 HcmV?d00001 diff --git a/app_petty_cash/lib/main.dart b/app_petty_cash/lib/main.dart index 175c9fe..f3acc47 100644 --- a/app_petty_cash/lib/main.dart +++ b/app_petty_cash/lib/main.dart @@ -38,9 +38,9 @@ class MyApp extends StatelessWidget { }, ), debugShowCheckedModeBanner: false, - // initialRoute: loginRoute, + initialRoute: loginRoute, // initialRoute: splashScreen, - initialRoute: transaksiRoute, + // initialRoute: transaksiRoute, // initialRoute: reportRoute, // initialRoute: testFilePickerRoute, onGenerateRoute: AppRoute.generateRoute, diff --git a/app_petty_cash/lib/screen/home/home_screen.dart b/app_petty_cash/lib/screen/home/home_screen.dart index 606c5b2..b279317 100644 --- a/app_petty_cash/lib/screen/home/home_screen.dart +++ b/app_petty_cash/lib/screen/home/home_screen.dart @@ -33,7 +33,14 @@ class HomeScreen extends HookConsumerWidget { ), child: Scaffold( appBar: AppBar( - title: Text('Home Screen'), + title: Text( + 'Home Screen', + style: TextStyle(color: Constant.textWhite), + ), + backgroundColor: Constant.pcBtnBackgroundColor, + iconTheme: IconThemeData( + color: Constant.textWhite, + ), ), drawer: CustomDrawer(), body: SafeArea( diff --git a/app_petty_cash/lib/screen/login/login_form.dart b/app_petty_cash/lib/screen/login/login_form.dart index 8b1713b..e064e82 100644 --- a/app_petty_cash/lib/screen/login/login_form.dart +++ b/app_petty_cash/lib/screen/login/login_form.dart @@ -2,6 +2,7 @@ import 'dart:async'; +import 'package:app_petty_cash/widget/sankbar_widget.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_hooks/flutter_hooks.dart'; @@ -71,10 +72,11 @@ class LoginFormScreen extends HookConsumerWidget { isLoading.value = true; } else if (next is LoginStateError) { isLoading.value = false; - errorMessage.value = next.message; - Timer(const Duration(seconds: 3), () { - errorMessage.value = ""; - }); + // errorMessage.value = next.message; + // Timer(const Duration(seconds: 3), () { + // errorMessage.value = ""; + // }); + SanckbarWidget(context, next.message, snackbarType.warning); } else if (next is LoginStateDone) { isLoading.value = false; isSuccess.value = true; @@ -92,295 +94,297 @@ class LoginFormScreen extends HookConsumerWidget { } }); - return Scaffold( - body: SafeArea( - child: SingleChildScrollView( - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - mainAxisAlignment: MainAxisAlignment.start, - children: [ - Container( - width: Constant.getActualXPhone(context: context, x: 390), - height: Constant.getActualYPhone(context: context, y: 359), - // decoration: BoxDecoration(color: Colors.grey), - child: Image.asset( - "images/login_top_bg.png", - fit: BoxFit.fill, - // scale: 1, - ), + final obscureText = useState(true); + + return ListView( + children: [ + Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisAlignment: MainAxisAlignment.start, + children: [ + Container( + width: Constant.getActualXPhone(context: context, x: 390), + height: Constant.getActualYPhone(context: context, y: 359), + // decoration: BoxDecoration(color: Colors.grey), + child: Image.asset( + "images/login_top_bg.png", + fit: BoxFit.fill, + // scale: 1, ), - Container( - width: Constant.getActualXPhone(context: context, x: 390), - height: Constant.getActualYPhone(context: context, y: 485), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - mainAxisAlignment: MainAxisAlignment.start, - children: [ - Padding( - padding: EdgeInsets.only( - top: Constant.getActualYPhone(context: context, y: 63), - left: Constant.getActualXPhone(context: context, x: 20), - right: - Constant.getActualXPhone(context: context, x: 113), - ), - child: Text( - 'Selamat Datang', - style: Constant.titleH1Login_SelamatDatang( - context: context) - .copyWith( - fontWeight: FontWeight.w600, - color: Constant.textBlack), - ), + ), + Container( + width: Constant.getActualXPhone(context: context, x: 390), + height: Constant.getActualYPhone(context: context, y: 485), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisAlignment: MainAxisAlignment.start, + children: [ + Padding( + padding: EdgeInsets.only( + top: Constant.getActualYPhone(context: context, y: 63), + left: Constant.getActualXPhone(context: context, x: 20), + right: Constant.getActualXPhone(context: context, x: 113), ), - Padding( - padding: EdgeInsets.only( - // top: Constant.getActualYPhone(context: context, y: 63), - left: Constant.getActualXPhone(context: context, x: 20), - right: - Constant.getActualXPhone(context: context, x: 48), - ), - child: Text( - 'Silahkan masuk untuk mengakses akun Anda', - style: Constant.body1(context: context).copyWith( - fontWeight: FontWeight.w600, - color: Constant.textGreyv2), - ), + child: Text( + 'Selamat Datang', + style: + Constant.titleH1Login_SelamatDatang(context: context) + .copyWith( + fontWeight: FontWeight.w600, + color: Constant.textBlack), ), - SizedBox( - height: Constant.getActualYPhone(context: context, y: 39), + ), + Padding( + padding: EdgeInsets.only( + // top: Constant.getActualYPhone(context: context, y: 63), + left: Constant.getActualXPhone(context: context, x: 20), + right: Constant.getActualXPhone(context: context, x: 48), ), + child: Text( + 'Silahkan masuk untuk mengakses akun Anda', + style: Constant.body1(context: context).copyWith( + fontWeight: FontWeight.w600, + color: Constant.textGreyv2), + ), + ), + SizedBox( + height: Constant.getActualYPhone(context: context, y: 39), + ), - // inputan email - Padding( - padding: EdgeInsets.only( - // top: Constant.getActualYPhone(context: context, y: 63), - left: Constant.getActualXPhone(context: context, x: 20), - right: - Constant.getActualXPhone(context: context, x: 20), - ), - child: Text( - 'Email', - style: Constant.body1_400_dibulan(context: context) - .copyWith( - fontWeight: FontWeight.w600, - color: Constant.textBlack), + // inputan email + Padding( + padding: EdgeInsets.only( + // top: Constant.getActualYPhone(context: context, y: 63), + left: Constant.getActualXPhone(context: context, x: 20), + right: Constant.getActualXPhone(context: context, x: 20), + ), + child: Text( + 'Email', + style: Constant.body1_400_dibulan(context: context) + .copyWith( + fontWeight: FontWeight.w600, + color: Constant.textBlack), + ), + ), + SizedBox( + height: Constant.getActualYPhone(context: context, y: 4), + ), + Padding( + padding: EdgeInsets.only( + top: Constant.getActualYPhone(context: context, y: 5), + left: Constant.getActualXPhone(context: context, x: 20), + right: Constant.getActualXPhone(context: context, x: 20), + ), + child: TextField( + controller: ctrlEmail, + decoration: InputDecoration( + hintStyle: + Constant.body2_400(context: context).copyWith( + color: Constant.textGreyv2, + ), + labelStyle: + Constant.body2_400(context: context).copyWith( + color: Constant.textGreyv2, + ), + border: OutlineInputBorder( + borderSide: BorderSide( + color: Colors.orange, + width: 1, + ), + ), + focusedBorder: OutlineInputBorder( + borderSide: BorderSide( + color: Constant.textGreyv2, + width: 1, + ), + ), + labelText: "Email", + hintText: 'Email', ), ), - SizedBox( - height: Constant.getActualYPhone(context: context, y: 4), + ), + + SizedBox( + height: Constant.getActualYPhone(context: context, y: 21), + ), + + // password + Padding( + padding: EdgeInsets.only( + // top: Constant.getActualYPhone(context: context, y: 63), + left: Constant.getActualXPhone(context: context, x: 20), + right: Constant.getActualXPhone(context: context, x: 20), ), - Padding( - padding: EdgeInsets.only( - // top: Constant.getActualYPhone(context: context, y: 63), - left: Constant.getActualXPhone(context: context, x: 20), - right: - Constant.getActualXPhone(context: context, x: 20), - ), - child: TextField( - controller: ctrlEmail, - decoration: InputDecoration( - hintStyle: - Constant.body2_400(context: context).copyWith( + child: Text( + 'Password', + style: Constant.body1_400_dibulan(context: context) + .copyWith( + fontWeight: FontWeight.w600, + color: Constant.textBlack), + ), + ), + SizedBox( + height: Constant.getActualYPhone(context: context, y: 4), + ), + Padding( + padding: EdgeInsets.only( + top: Constant.getActualYPhone(context: context, y: 5), + left: Constant.getActualXPhone(context: context, x: 20), + right: Constant.getActualXPhone(context: context, x: 20), + ), + child: TextField( + obscureText: obscureText.value, + controller: ctrlPassword, + decoration: InputDecoration( + suffixIcon: IconButton( + icon: Icon( + obscureText.value + ? Icons.visibility + : Icons.visibility_off, color: Constant.textGreyv2, ), - labelStyle: - Constant.body2_400(context: context).copyWith( + onPressed: () { + obscureText.value = !obscureText.value; + }, + ), + hintStyle: + Constant.body2_400(context: context).copyWith( + color: Constant.textGreyv2, + ), + labelStyle: + Constant.body2_400(context: context).copyWith( + color: Constant.textGreyv2, + ), + border: OutlineInputBorder( + borderSide: BorderSide( + color: Colors.orange, + width: 1, + ), + ), + focusedBorder: OutlineInputBorder( + borderSide: BorderSide( color: Constant.textGreyv2, + width: 1, ), - border: OutlineInputBorder( - borderSide: BorderSide( - color: Colors.orange, - width: 1, - ), - ), - focusedBorder: OutlineInputBorder( - borderSide: BorderSide( - color: Constant.textGreyv2, - width: 1, - ), - ), - // labelText: "Masukkan Email", - // hintText: 'Nama Pengirim', ), + labelText: "Password", + hintText: 'Password', ), ), + ), - SizedBox( - height: Constant.getActualYPhone(context: context, y: 21), - ), + // if (errorMessage.value != "") ...[ + // SizedBox( + // height: Constant.getActualYPhone(context: context, y: 10), + // ), + // Center( + // child: Text( + // "Peringatan : ${errorMessage.value}", + // style: Constant.titleH7_700(context: context) + // .copyWith(color: Constant.textRedProblemMaketing), + // ), + // ), + // ], - // password - Padding( - padding: EdgeInsets.only( - // top: Constant.getActualYPhone(context: context, y: 63), - left: Constant.getActualXPhone(context: context, x: 20), - right: - Constant.getActualXPhone(context: context, x: 20), - ), - child: Text( - 'Password', - style: Constant.body1_400_dibulan(context: context) - .copyWith( - fontWeight: FontWeight.w600, - color: Constant.textBlack), - ), + SizedBox( + height: Constant.getActualYPhone(context: context, y: 40), + ), + Padding( + padding: EdgeInsets.only( + left: Constant.getActualXPhone(context: context, x: 20), + right: Constant.getActualXPhone(context: context, x: 20), ), - SizedBox( - height: Constant.getActualYPhone(context: context, y: 4), - ), - Padding( - padding: EdgeInsets.only( - // top: Constant.getActualYPhone(context: context, y: 63), - left: Constant.getActualXPhone(context: context, x: 20), - right: - Constant.getActualXPhone(context: context, x: 20), - ), - child: TextField( - controller: ctrlPassword, - decoration: InputDecoration( - hintStyle: - Constant.body2_400(context: context).copyWith( - color: Colors.orange, - ), - labelStyle: - Constant.body2_400(context: context).copyWith( - color: Colors.orange, - ), - border: OutlineInputBorder( - borderSide: BorderSide( - color: Colors.orange, - width: 1, - ), - ), - focusedBorder: OutlineInputBorder( - borderSide: BorderSide( - color: Colors.orange, - width: 1, - ), - ), - // labelText: "Nama Pengirim", - // hintText: 'Nama Pengirim', - ), - ), - ), - - if (errorMessage.value != "") ...[ - SizedBox( - height: - Constant.getActualYPhone(context: context, y: 10), - ), - Center( - child: Text( - "Peringatan : ${errorMessage.value}", - style: Constant.titleH7_700(context: context) - .copyWith(color: Constant.textRedProblemMaketing), - ), - ), - ], - - SizedBox( - height: Constant.getActualYPhone(context: context, y: 40), - ), - Padding( - padding: EdgeInsets.only( - left: Constant.getActualXPhone(context: context, x: 20), - right: - Constant.getActualXPhone(context: context, x: 20), - ), - child: SizedBox( - width: - Constant.getActualXPhone(context: context, x: 390), - height: - Constant.getActualYPhone(context: context, y: 50), - child: ElevatedButton( - // onPressed: () { - // Navigator.of(context).pushNamed(homeRoute); - // }, - onPressed: (isSuccess.value == true) - ? () {} - : () { - if (ctrlEmail.text.isEmpty || - ctrlPassword.text.isEmpty) { - isLoading.value = true; - errorMessage.value = 'Inputan harus diisi'; - Timer(const Duration(seconds: 3), () { - isLoading.value = false; - errorMessage.value = ""; - }); - } else { - ref.read(loginProvider.notifier).login( - email: ctrlEmail.text, - password: ctrlPassword.text, - ); - } - }, - style: ButtonStyle( - backgroundColor: MaterialStateColor.resolveWith( - (st) => (isSuccess.value == true) - ? Constant.textGrey - : Constant.pcBtnBackgroundColor), - shape: MaterialStateProperty.all< - RoundedRectangleBorder>( - RoundedRectangleBorder( - borderRadius: BorderRadius.circular(8), - side: BorderSide( - color: Constant.pcBtnBackgroundColor, - ), + child: SizedBox( + width: Constant.getActualXPhone(context: context, x: 390), + height: Constant.getActualYPhone(context: context, y: 50), + child: ElevatedButton( + // onPressed: () { + // Navigator.of(context).pushNamed(homeRoute); + // }, + onPressed: (isSuccess.value == true) + ? () {} + : () { + if (ctrlEmail.text.isEmpty || + ctrlPassword.text.isEmpty) { + isLoading.value = true; + errorMessage.value = 'Inputan harus diisi'; + Timer(const Duration(seconds: 3), () { + isLoading.value = false; + errorMessage.value = ""; + }); + } else { + ref.read(loginProvider.notifier).login( + email: ctrlEmail.text, + password: ctrlPassword.text, + ); + } + }, + style: ButtonStyle( + backgroundColor: MaterialStateColor.resolveWith( + (st) => (isSuccess.value == true) + ? Constant.textGrey + : Constant.pcBtnBackgroundColor), + shape: + MaterialStateProperty.all( + RoundedRectangleBorder( + borderRadius: BorderRadius.circular(8), + side: BorderSide( + color: Constant.pcBtnBackgroundColor, ), ), - shadowColor: - MaterialStateProperty.all(Color(0xffff48423d)), - elevation: MaterialStateProperty.all(4.0), ), - child: Stack( - children: [ - (isLoading.value) - ? SizedBox( - width: Constant.getActualXPhone( - context: context, x: 24), - height: Constant.getActualYPhone( - context: context, y: 32), - child: Center( - child: CircularProgressIndicator( - color: Colors.white, - ), - ), - ) - : Align( - alignment: Alignment.center, - child: Text( - 'Login', - style: Constant.titleH3_700( - context: context) - .copyWith( - color: Constant.textLoginColor), + shadowColor: + MaterialStateProperty.all(Color(0xffff48423d)), + elevation: MaterialStateProperty.all(4.0), + ), + child: Stack( + children: [ + (isLoading.value) + ? SizedBox( + width: Constant.getActualXPhone( + context: context, x: 24), + height: Constant.getActualYPhone( + context: context, y: 32), + child: Center( + child: CircularProgressIndicator( + color: Colors.white, ), ), - ], - ), + ) + : Align( + alignment: Alignment.center, + child: Text( + 'Login', + style: Constant.titleH3_700( + context: context) + .copyWith( + color: Constant.textLoginColor), + ), + ), + ], ), ), ), + ), - SizedBox( - height: Constant.getActualYPhone(context: context, y: 10), - ), + SizedBox( + height: Constant.getActualYPhone(context: context, y: 10), + ), - Align( - alignment: Alignment.center, - child: Text( - 'Versi ${Constant.version}', - style: Constant.titleH4Login(context: context) - .copyWith(color: Constant.textGrey), - ), + Align( + alignment: Alignment.center, + child: Text( + 'Versi ${Constant.version}', + style: Constant.titleH4Login(context: context) + .copyWith(color: Constant.textGrey), ), - ], - ), + ), + ], ), - ], - ), + ), + ], ), - ), + ], ); } } diff --git a/app_petty_cash/lib/screen/login/login_screen.dart b/app_petty_cash/lib/screen/login/login_screen.dart index e71f394..3feb10c 100644 --- a/app_petty_cash/lib/screen/login/login_screen.dart +++ b/app_petty_cash/lib/screen/login/login_screen.dart @@ -39,7 +39,7 @@ class LoginScreen extends HookConsumerWidget { ); ref.read(currentUserProvider.notifier).state = authModel; - // ref.read(currentPageProvider.state).update((state) => 0); + ref.read(currentPageProvider.state).update((state) => 0); Navigator.of(context).pushNamedAndRemoveUntil( homeRoute, diff --git a/app_petty_cash/lib/screen/report/report_screen.dart b/app_petty_cash/lib/screen/report/report_screen.dart index 6fa2e5c..75318aa 100644 --- a/app_petty_cash/lib/screen/report/report_screen.dart +++ b/app_petty_cash/lib/screen/report/report_screen.dart @@ -47,7 +47,14 @@ class ReportScreen extends HookConsumerWidget { ), child: Scaffold( appBar: AppBar( - title: Text('Report'), + title: Text( + 'Report', + style: TextStyle(color: Constant.textWhite), + ), + backgroundColor: Constant.pcBtnBackgroundColor, + iconTheme: IconThemeData( + color: Constant.textWhite, + ), ), drawer: CustomDrawer(), body: SafeArea( diff --git a/app_petty_cash/lib/screen/transaksi/transaksi_screen.dart b/app_petty_cash/lib/screen/transaksi/transaksi_screen.dart index f2c6375..3dfedab 100644 --- a/app_petty_cash/lib/screen/transaksi/transaksi_screen.dart +++ b/app_petty_cash/lib/screen/transaksi/transaksi_screen.dart @@ -176,6 +176,8 @@ class TransaksiScreen extends HookConsumerWidget { // print('Height : ${sbHeight}'); + final userIDLogin = ref.read(currentUserProvider)?.model.M_UserID ?? "0"; + return Padding( padding: EdgeInsets.only( top: Constant.getActualYPhone(context: context, y: 30), @@ -183,7 +185,14 @@ class TransaksiScreen extends HookConsumerWidget { child: Scaffold( appBar: AppBar( // centerTitle: true, - title: Text('Transaksi'), + title: Text( + 'Transaksi', + style: TextStyle(color: Constant.textWhite), + ), + backgroundColor: Constant.pcBtnBackgroundColor, + iconTheme: IconThemeData( + color: Constant.textWhite, + ), ), drawer: CustomDrawer(), body: SafeArea( @@ -210,11 +219,11 @@ class TransaksiScreen extends HookConsumerWidget { decoration: InputDecoration( hintStyle: Constant.body2_400(context: context).copyWith( - color: Colors.orange, + color: Constant.textGreyv2, ), labelStyle: Constant.body2_400(context: context).copyWith( - color: Colors.orange, + color: Constant.textGreyv2, ), border: OutlineInputBorder( borderSide: BorderSide( @@ -224,12 +233,12 @@ class TransaksiScreen extends HookConsumerWidget { ), focusedBorder: OutlineInputBorder( borderSide: BorderSide( - color: Colors.orange, + color: Constant.textGreyv2, width: 1, ), ), // labelText: "Tanggal Awal", - hintText: 'Tanggal Awal', + hintText: 'Tanggal Transaksi', // suffixIcon: isLoadingFilterScope.value // ? SizedBox( // width: Constant.getActualXPhone( @@ -288,9 +297,9 @@ class TransaksiScreen extends HookConsumerWidget { height: Constant.getActualYPhone(context: context, y: 20), ), - // jenis + // tipe transaksi Text( - 'Jenis', + 'Tipe Transaksi', style: Constant.body1(context: context).copyWith( fontWeight: FontWeight.w600, color: Constant.textBlack), ), @@ -521,11 +530,11 @@ class TransaksiScreen extends HookConsumerWidget { decoration: InputDecoration( hintStyle: Constant.body2_400(context: context).copyWith( - color: Colors.orange, + color: Constant.textGreyv2, ), labelStyle: Constant.body2_400(context: context).copyWith( - color: Colors.orange, + color: Constant.textGreyv2, ), border: OutlineInputBorder( borderSide: BorderSide( @@ -535,26 +544,15 @@ class TransaksiScreen extends HookConsumerWidget { ), focusedBorder: OutlineInputBorder( borderSide: BorderSide( - color: Colors.orange, + color: Constant.textGreyv2, width: 1, ), ), - // labelText: "Nama Pengirim", - // hintText: 'Nama Pengirim', + labelText: "Nama Pengirim", + hintText: 'Nama Pengirim', ), ), ], - // CustomTextField( - // isNumber: false, - // isReadOnly: false, - // ctrl: ctrlNamaPengirim, - // isPassword: false, - // isMaxLine: false, - // hintText: "Nama Pengirim", - // labelText: "Nama Pengirim", - // // onChange: (String searchResult) {}, - // isPrefix: false, - // ), SizedBox( height: Constant.getActualYPhone(context: context, y: 20), ), @@ -573,10 +571,10 @@ class TransaksiScreen extends HookConsumerWidget { keyboardType: TextInputType.number, decoration: InputDecoration( hintStyle: Constant.body2_400(context: context).copyWith( - color: Colors.orange, + color: Constant.textGreyv2, ), labelStyle: Constant.body2_400(context: context).copyWith( - color: Colors.orange, + color: Constant.textGreyv2, ), border: OutlineInputBorder( borderSide: BorderSide( @@ -586,25 +584,14 @@ class TransaksiScreen extends HookConsumerWidget { ), focusedBorder: OutlineInputBorder( borderSide: BorderSide( - color: Colors.orange, + color: Constant.textGreyv2, width: 1, ), ), - // labelText: "Jumlah", - // hintText: 'Jumlah', + labelText: "Jumlah", + hintText: 'Jumlah', ), ), - // CustomTextField( - // isNumber: true, - // isReadOnly: false, - // ctrl: ctrlJumlah, - // isPassword: false, - // isMaxLine: false, - // hintText: "Jumlah", - // labelText: "Jumlah", - // // onChange: (String searchResult) {}, - // isPrefix: false, - // ), SizedBox( height: Constant.getActualYPhone(context: context, y: 20), @@ -625,10 +612,10 @@ class TransaksiScreen extends HookConsumerWidget { maxLines: 4, decoration: InputDecoration( hintStyle: Constant.body2_400(context: context).copyWith( - color: Colors.orange, + color: Constant.textGreyv2, ), labelStyle: Constant.body2_400(context: context).copyWith( - color: Colors.orange, + color: Constant.textGreyv2, ), border: OutlineInputBorder( borderSide: BorderSide( @@ -638,26 +625,14 @@ class TransaksiScreen extends HookConsumerWidget { ), focusedBorder: OutlineInputBorder( borderSide: BorderSide( - color: Colors.orange, + color: Constant.textGreyv2, width: 1, ), ), - // labelText: "Catatan", - // hintText: 'Catatan', + labelText: "Catatan", + hintText: 'Catatan', ), ), - // CustomTextField( - // isNumber: false, - // isReadOnly: false, - // ctrl: ctrlCatatan, - // isPassword: false, - // isMaxLine: true, - // isTextArea: true, - // hintText: "Catatan", - // labelText: "Catatan", - // // onChange: (String searchResult) {}, - // isPrefix: false, - // ), SizedBox( height: Constant.getActualYPhone(context: context, y: 20), @@ -762,7 +737,8 @@ class TransaksiScreen extends HookConsumerWidget { selectedListCategory.value.categoryid.toString(), "jumlah": ctrlJumlah.value.text.toString(), "catatan": ctrlCatatan.value.text.toString(), - "userid": "1", + // "userid": "1", + "userid": userIDLogin, "namapengirim": ctrlNamaPengirim.value.text.toString(), "url": "", }; @@ -773,7 +749,8 @@ class TransaksiScreen extends HookConsumerWidget { selectedListCategory.value.categoryid.toString(), ctrlJumlah.value.text.toString(), ctrlCatatan.value.text.toString(), - "1", + // "1", + userIDLogin, ctrlNamaPengirim.value.text.toString(), "", ); diff --git a/app_petty_cash/lib/screen/user/user_screen.dart b/app_petty_cash/lib/screen/user/user_screen.dart index 3f48330..9939327 100644 --- a/app_petty_cash/lib/screen/user/user_screen.dart +++ b/app_petty_cash/lib/screen/user/user_screen.dart @@ -32,7 +32,14 @@ class UserScreen extends HookConsumerWidget { ), child: Scaffold( appBar: AppBar( - title: Text('User'), + title: Text( + 'User', + style: TextStyle(color: Constant.textWhite), + ), + backgroundColor: Constant.pcBtnBackgroundColor, + iconTheme: IconThemeData( + color: Constant.textWhite, + ), ), drawer: CustomDrawer(), body: SafeArea( diff --git a/app_petty_cash/lib/widget/custom_drawer.dart b/app_petty_cash/lib/widget/custom_drawer.dart index d25b359..2c352b6 100644 --- a/app_petty_cash/lib/widget/custom_drawer.dart +++ b/app_petty_cash/lib/widget/custom_drawer.dart @@ -7,6 +7,7 @@ import 'package:shared_preferences/shared_preferences.dart'; import '../app/constant.dart'; import '../app/route.dart'; +import '../provider/current_menu_provider.dart'; import '../provider/current_user_provider.dart'; import '../screen/login/logout_provider.dart'; @@ -64,6 +65,9 @@ class CustomDrawer extends HookConsumerWidget { }); } }); + + final currentMenu = ref.read(currentPageProvider); + return Drawer( child: ListView( padding: EdgeInsets.only( @@ -83,40 +87,89 @@ class CustomDrawer extends HookConsumerWidget { // ), // ), ListTile( - title: Text('Home'), + title: Text( + 'Home', + style: TextStyle( + color: (currentMenu == 0) + ? Constant.textWhite + : Constant.textBlack, + ), + ), + tileColor: (currentMenu == 0) + ? Constant.pcBtnBackgroundColor + : Colors.transparent, onTap: () { // Handle navigation to Home screen Navigator.pop(context); + ref.read(currentPageProvider.state).update((state) => 0); Navigator.pushNamed(context, homeRoute); }, ), ListTile( - title: Text('Transaksi'), + title: Text( + 'Transaksi', + style: TextStyle( + color: (currentMenu == 1) + ? Constant.textWhite + : Constant.textBlack, + ), + ), + tileColor: (currentMenu == 1) + ? Constant.pcBtnBackgroundColor + : Colors.transparent, onTap: () { // Handle navigation to Transaksi screen Navigator.pop(context); + ref.read(currentPageProvider.state).update((state) => 1); Navigator.pushNamed(context, transaksiRoute); }, ), ListTile( - title: Text('Report'), + title: Text( + 'Report', + style: TextStyle( + color: (currentMenu == 2) + ? Constant.textWhite + : Constant.textBlack, + ), + ), + tileColor: (currentMenu == 2) + ? Constant.pcBtnBackgroundColor + : Colors.transparent, onTap: () { // Handle navigation to Transaksi screen Navigator.pop(context); + ref.read(currentPageProvider.state).update((state) => 2); Navigator.pushNamed(context, reportRoute); }, ), ListTile( - title: Text('User'), + title: Text( + 'User', + style: TextStyle( + color: (currentMenu == 3) + ? Constant.textWhite + : Constant.textBlack, + ), + ), + tileColor: (currentMenu == 3) + ? Constant.pcBtnBackgroundColor + : Colors.transparent, onTap: () { // Handle navigation to User screen Navigator.pop(context); + ref.read(currentPageProvider.state).update((state) => 3); Navigator.pushNamed(context, userRoute); }, ), ListTile( - title: Text('Logout'), + title: Text( + 'Logout', + // style: TextStyle(color: Constant.textWhite), + ), onTap: () { + // di set ke 0 lagi + ref.read(currentPageProvider.state).update((state) => 0); ref.read(logoutProvider.notifier).logout( M_UserID: selectedUser?.model.M_UserID ?? "", M_UserUsername: selectedUser?.model.M_UserUsername ?? "", diff --git a/app_petty_cash/pubspec.yaml b/app_petty_cash/pubspec.yaml index 44d74ea..93edb0c 100644 --- a/app_petty_cash/pubspec.yaml +++ b/app_petty_cash/pubspec.yaml @@ -90,9 +90,9 @@ flutter: # list giving the asset and other descriptors for the font. For # example: fonts: - - family: Inter + - family: PublicSans fonts: - - asset: fonts/Inter-Bold.ttf + - asset: fonts/PublicSans-Bold.ttf # - asset: fonts/Schyler-Italic.ttf # style: italic # - family: Trajan Pro