diff --git a/.env b/.env index 2a3fa28..4d94932 100644 --- a/.env +++ b/.env @@ -1,5 +1,5 @@ -# BACKEND_URL='http://10.0.2.2:4320' -BACKEND_URL='https://ocboapps.davaocity.gov.ph/esign-server' +BACKEND_URL='http://10.0.2.2:4320' +# BACKEND_SERVER='https://ocboapps.davaocity.gov.ph/esign-server' HEAD=ARCH. KHASHAYAR L. TOGHYANI PESO=₱ diff --git a/.metadata b/.metadata index e874deb..51028d7 100644 --- a/.metadata +++ b/.metadata @@ -4,7 +4,7 @@ # This file should be version controlled and should not be manually edited. version: - revision: "19074d12f7eaf6a8180cd4036a430c1d76de904e" + revision: "adc901062556672b4138e18a4dc62a4be8f4b3c2" channel: "stable" project_type: app @@ -13,11 +13,14 @@ project_type: app migration: platforms: - platform: root - create_revision: 19074d12f7eaf6a8180cd4036a430c1d76de904e - base_revision: 19074d12f7eaf6a8180cd4036a430c1d76de904e - - platform: linux - create_revision: 19074d12f7eaf6a8180cd4036a430c1d76de904e - base_revision: 19074d12f7eaf6a8180cd4036a430c1d76de904e + create_revision: adc901062556672b4138e18a4dc62a4be8f4b3c2 + base_revision: adc901062556672b4138e18a4dc62a4be8f4b3c2 + - platform: android + create_revision: adc901062556672b4138e18a4dc62a4be8f4b3c2 + base_revision: adc901062556672b4138e18a4dc62a4be8f4b3c2 + - platform: ios + create_revision: adc901062556672b4138e18a4dc62a4be8f4b3c2 + base_revision: adc901062556672b4138e18a4dc62a4be8f4b3c2 # User provided section diff --git a/assets/logo.webp b/assets/logo.webp index 8252d89..d6cf72f 100644 Binary files a/assets/logo.webp and b/assets/logo.webp differ diff --git a/lib/main.dart b/lib/main.dart index ca91559..c0df62f 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -6,8 +6,8 @@ import 'package:ocbo_esign_mobile/blocs/user/user_bloc.dart'; import 'package:ocbo_esign_mobile/pages/approval_page.dart'; import 'package:ocbo_esign_mobile/pages/index_page.dart'; import 'package:ocbo_esign_mobile/pages/login_page.dart'; -import 'package:ocbo_esign_mobile/pages/validate_detail_page.dart'; import 'package:ocbo_esign_mobile/pages/validate_page.dart'; +import 'package:ocbo_esign_mobile/pages/validation_result_page.dart'; Future main() async { await dotenv.load(fileName: ".env"); @@ -50,22 +50,7 @@ final _router = GoRouter( ), ), // GoRoute(name: 'validate', path: '/validate', builder: (context, state) => const ValidatePage()), - // GoRoute(name: 'details', path: '/details', builder: (context, state) => const ValidateDetailPage()), - GoRoute( - name: 'details', - path: '/details', - builder: (context, state) => const ValidateDetailPage(), - pageBuilder: (BuildContext context, GoRouterState state) => CustomTransitionPage( - key: state.pageKey, - child: const ValidateDetailPage(), - transitionsBuilder: (context, animation, secondaryAnimation, child) { - return SlideTransition( - position: Tween(begin: Offset(0.0, 1.0), end: Offset.zero).animate(animation), - child: child, - ); - }, - ), - ), + GoRoute(name: 'result', path: '/result', builder: (context, state) => const ValidationResultPage()), ], ); diff --git a/lib/pages/index_page.dart b/lib/pages/index_page.dart index 7a84d23..7b447e8 100644 --- a/lib/pages/index_page.dart +++ b/lib/pages/index_page.dart @@ -83,9 +83,9 @@ class IndexPage extends StatelessWidget { ], ), const MaxGap(516), - const Opacity( + Opacity( opacity: 0.7, - child: ImageWidget(imagePath: 'assets/pat-alcala.webp', size: 74, measureByHeight: false), + child: const ImageWidget(imagePath: 'assets/pat-alcala.webp', size: 74, measureByHeight: false), ), const Gap(4), const TextWidget( diff --git a/lib/pages/login_page.dart b/lib/pages/login_page.dart index dfa7526..041cdfb 100644 --- a/lib/pages/login_page.dart +++ b/lib/pages/login_page.dart @@ -34,23 +34,23 @@ class _LoginPageState extends State { }); } - // Future _checkConnection() async { - // try { - // final connection = await getApi('check-connection', null, null); - // return connection["result"]; - // } catch (e) { - // return false; - // } - // } + Future _checkConnection() async { + try { + final connection = await getApi('check-connection', null, null); + return connection["result"]; + } catch (e) { + return false; + } + } - // Future _getPassword(String employeeid) async { - // try { - // final response = await getApi('get-password', employeeid, null); - // return (response["result"]); - // } catch (e) { - // return "0"; - // } - // } + Future _getPassword(String employeeid) async { + try { + final response = await getApi('get-password', employeeid, null); + return (response["result"]); + } catch (e) { + return "0"; + } + } Future _securePassword(String password) async { final firstHash = sha1.string(password); @@ -60,23 +60,23 @@ class _LoginPageState extends State { return thirdHash.toString(); } - // void _login() async { - // final connected = await _checkConnection(); + void _login() async { + final connected = await _checkConnection(); - // if (connected) { - // final employeeid = _approverId; - // final dbpassword = await _getPassword(employeeid); - // final hashPassword = await _securePassword(_passwordController.text); + if (connected) { + final employeeid = _approverId; + final dbpassword = await _getPassword(employeeid); + final hashPassword = await _securePassword(_passwordController.text); - // if (context.mounted) { - // if (dbpassword == hashPassword) { - // _setLogin(); - // } else { - // _showDialog(); - // } - // } - // } - // } + if (context.mounted) { + if (dbpassword == hashPassword) { + _setLogin(); + } else { + _showDialog(); + } + } + } + } void _setLogin() { blocSetUser(context, _approver); @@ -134,16 +134,16 @@ class _LoginPageState extends State { const Gap(8), InputWidget(controller: _passwordController, password: true), const Gap(24), - // ValueListenableBuilder( - // valueListenable: passwordNotifier, - // builder: (context, password, child) { - // return ButtonWidget( - // text: password.isNotEmpty ? 'Login' : 'Required password', - // onPressed: password.isNotEmpty ? _login : _ignoreButton, - // disabled: password.isEmpty, - // ); - // }, - // ), + ValueListenableBuilder( + valueListenable: passwordNotifier, + builder: (context, password, child) { + return ButtonWidget( + text: password.isNotEmpty ? 'Login' : 'Required password', + onPressed: password.isNotEmpty ? _login : _ignoreButton, + disabled: password.isEmpty, + ); + }, + ), ], ), ), diff --git a/lib/pages/validate_detail_page.dart b/lib/pages/validate_detail_page.dart deleted file mode 100644 index 2fddca8..0000000 --- a/lib/pages/validate_detail_page.dart +++ /dev/null @@ -1,29 +0,0 @@ -import 'package:flutter/material.dart'; - -class ValidateDetailPage extends StatelessWidget { - const ValidateDetailPage({super.key}); - - @override - Widget build(BuildContext context) { - return Scaffold( - resizeToAvoidBottomInset: false, - body: Container( - alignment: Alignment.center, - height: MediaQuery.of(context).size.height, - decoration: const BoxDecoration( - gradient: LinearGradient( - begin: Alignment.topCenter, - end: Alignment.bottomCenter, - colors: [ - Color.fromRGBO(37, 25, 44, 1), - Color.fromRGBO(22, 33, 44, 1), - Color.fromRGBO(22, 33, 44, 1), - Color.fromRGBO(22, 33, 44, 1), - Color.fromRGBO(25, 46, 41, 1), - ], - ), - ), - ), - ); - } -} diff --git a/lib/pages/validate_page.dart b/lib/pages/validate_page.dart index 04942b6..ad8909e 100644 --- a/lib/pages/validate_page.dart +++ b/lib/pages/validate_page.dart @@ -1,9 +1,9 @@ import 'package:flutter/material.dart'; +import 'package:flutter_dotenv/flutter_dotenv.dart'; import 'package:gap/gap.dart'; -import 'package:go_router/go_router.dart'; import 'package:mobile_scanner/mobile_scanner.dart'; import 'package:ocbo_esign_mobile/functions/get_api.dart'; -import 'package:ocbo_esign_mobile/widgets/button_widget.dart'; +import 'package:ocbo_esign_mobile/widgets/box_widget.dart'; import 'package:ocbo_esign_mobile/widgets/text_widget.dart'; import 'package:vibration/vibration.dart'; @@ -25,74 +25,24 @@ class BarcodeScannerScreen extends StatefulWidget { class _BarcodeScannerScreenState extends State { late String qrResult = ''; - late String qrResultSub = ''; - final Color redColorShade = const Color.fromARGB(26, 225, 82, 103); - final Color redColor = const Color.fromARGB(255, 229, 89, 115); - final Color greenColorShade = const Color.fromRGBO(69, 191, 73, 0.1); - final Color greenColor = const Color.fromRGBO(76, 206, 81, 1); void readQr(String value) async { if (value.contains('OCBO e-Sign')) { - final qr = value.substring(35); - final response = await getApi('check-qr', qr, null); - final result = response["result"].toString(); + final response = await getApi('check-qr', value, null); + final result = response["result"]; if (result != '') { setState(() { qrResult = result; }); - } else { - setState(() { - qrResult = 'non-exist'; - }); } } else { setState(() { qrResult = 'invalid'; }); - - Future.delayed(Duration(seconds: 3), () { - setState(() { - qrResult = ''; - }); - }); } } - // void tryQR() async { - // final value = "Use OCBO e-Sign Validator - scanid=0918d59e"; - - // if (value.contains('OCBO e-Sign')) { - // final qr = value.substring(35); - // final response = await getApi('check-qr', qr, null); - // final result = response["result"].toString(); - - // if (result != '') { - // setState(() { - // qrResult = result; - // }); - // } else { - // setState(() { - // qrResult = 'result'; - // }); - // } - // } else { - // setState(() { - // qrResult = 'invalid'; - // }); - - // Future.delayed(Duration(seconds: 3), () { - // setState(() { - // qrResult = ''; - // }); - // }); - // } - // } - - void gotoDetails() { - context.push('/details'); - } - @override Widget build(BuildContext context) { return Scaffold( @@ -164,109 +114,91 @@ class _BarcodeScannerScreenState extends State { ), ), const Gap(24), - // ButtonWidget(text: 'Try API', disabled: false, onPressed: tryQR), if (qrResult.isNotEmpty) Column( children: [ - if (qrResult == 'invalid') - Column( - crossAxisAlignment: CrossAxisAlignment.center, + if (qrResult != 'invalid') + Row( children: [ Container( - width: MediaQuery.of(context).size.width - 160, - padding: const EdgeInsets.fromLTRB(8, 16, 8, 26), + padding: EdgeInsets.all(0), + width: 90, + height: 90, decoration: BoxDecoration( - border: BoxBorder.all(color: redColor), - color: redColorShade, - borderRadius: BorderRadius.circular(12), + color: const Color.fromRGBO(69, 191, 73, 0.1), + border: Border.all(color: const Color.fromRGBO(69, 191, 73, 1), width: 2), + borderRadius: BorderRadius.circular(99), // Optional: rounded corners ), - child: Column( + child: Icon(Icons.check, color: const Color.fromRGBO(69, 191, 73, 1), size: 48), + ), + const Gap(24), + + Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + const TextWidget( + text: 'Valid', + bold: true, + size: 22, + color: Color.fromRGBO(69, 191, 73, 1), + ), + const Gap(16), + const TextWidget( + text: 'QR is a valid OCBO e-Sign', + bold: false, + size: 14, + color: Color.fromRGBO(69, 191, 73, 1), + ), + ], + ), + const Gap(24), + BoxWidget( + title: '', + content: Column( + crossAxisAlignment: CrossAxisAlignment.start, children: [ - TextWidget(text: 'Invalid', bold: true, size: 24, color: redColor), - const Gap(16), - Container( - width: 90, - height: 90, - decoration: BoxDecoration( - color: redColorShade, - border: Border.all(color: redColor, width: 2), - borderRadius: BorderRadius.circular(99), - ), - child: Icon(Icons.close, color: redColor, size: 48), - ), + const TextWidget(text: 'Name', bold: true, size: 14), + const Gap(8), + TextWidget(text: qrResult, bold: false, size: 14), ], ), ), - const Gap(16), - TextWidget(text: 'Not valid OCBO e-Sign QR', bold: true, size: 20, color: redColor), - ], - ) - else if (qrResult != 'non-exist') - Column( - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - Container( - width: MediaQuery.of(context).size.width - 160, - padding: const EdgeInsets.fromLTRB(8, 16, 8, 26), - decoration: BoxDecoration( - border: BoxBorder.all(color: redColor), - color: redColorShade, - borderRadius: BorderRadius.circular(12), - ), - child: Column( - children: [ - TextWidget(text: 'Unregistered', bold: true, size: 24, color: redColor), - const Gap(16), - Container( - width: 90, - height: 90, - decoration: BoxDecoration( - color: redColorShade, - border: Border.all(color: redColor, width: 2), - borderRadius: BorderRadius.circular(99), - ), - child: Icon(Icons.close, color: redColor, size: 48), - ), - ], - ), - ), - const Gap(16), - TextWidget(text: 'OCBO e-Sign QR is not registered', bold: true, size: 20, color: redColor), ], ) else - Column( + Row( children: [ Container( - width: MediaQuery.of(context).size.width - 160, - padding: const EdgeInsets.fromLTRB(8, 16, 8, 26), + padding: EdgeInsets.all(0), + width: 90, + height: 90, decoration: BoxDecoration( - border: BoxBorder.all(color: greenColor), - color: greenColorShade, - borderRadius: BorderRadius.circular(12), - ), - child: Column( - children: [ - TextWidget(text: 'Valid', bold: true, size: 24, color: greenColor), - const Gap(16), - Container( - padding: EdgeInsets.all(0), - width: 90, - height: 90, - decoration: BoxDecoration( - color: greenColorShade, - border: Border.all(color: greenColor, width: 2), - borderRadius: BorderRadius.circular(99), - ), - child: Icon(Icons.check, color: greenColor, size: 48), - ), - ], + color: const Color.fromRGBO(206, 74, 77, 0.1), + border: Border.all(color: const Color.fromRGBO(206, 74, 77, 1), width: 2), + borderRadius: BorderRadius.circular(99), ), + child: Icon(Icons.close, color: const Color.fromRGBO(206, 74, 77, 1), size: 48), ), const Gap(24), - TextWidget(text: qrResult, bold: true, size: 20, color: greenColor), - const Gap(24), - ButtonWidget(text: "Show Details", disabled: false, onPressed: gotoDetails), + + Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + const TextWidget( + text: 'Invalid', + bold: true, + size: 22, + color: Color.fromRGBO(206, 74, 77, 1), + ), + const Gap(16), + const TextWidget( + text: 'QR is a not valid OCBO e-Sign', + bold: false, + size: 14, + color: Color.fromRGBO(206, 74, 77, 1), + ), + ], + ), ], ), ], diff --git a/lib/pages/validation_result_page.dart b/lib/pages/validation_result_page.dart new file mode 100644 index 0000000..5660806 --- /dev/null +++ b/lib/pages/validation_result_page.dart @@ -0,0 +1,10 @@ +import 'package:flutter/material.dart'; + +class ValidationResultPage extends StatelessWidget { + const ValidationResultPage({super.key}); + + @override + Widget build(BuildContext context) { + return Scaffold(); + } +}