Commit 52f12f5e authored by Faizol's avatar Faizol

phase 1

parent 27b799c0
<?xml version="1.0" encoding="UTF-8"?>
<project version="4"> <project version="4">
<component name="ProjectRootManager" version="2" languageLevel="JDK_11" default="true" project-jdk-name="11" project-jdk-type="JavaSDK" /> <component name="ProjectRootManager" version="2" languageLevel="JDK_17" default="true" project-jdk-name="11" project-jdk-type="JavaSDK" />
<component name="ProjectType">
<option name="id" value="io.flutter" />
</component>
</project> </project>
\ No newline at end of file
...@@ -6,3 +6,19 @@ A new Flutter project Self Service. ...@@ -6,3 +6,19 @@ A new Flutter project Self Service.
This project is a starting point for a Flutter application. This project is a starting point for a Flutter application.
## Version App Change Log 1.6.10
** Added mode by config topup dan check balance ✅
** Added wording title following the selected mode ✅
** Added Logo following app version prefix & default no merchant logo ✅
** Added Timer can be set in config ✅
** Adjust Funtion Timer to ui ✅
** Added Home Page Check Balance ✅
** Added Card history endpoint ticket & balance ✅
** Added UI Card history endpoint ticket & balance ✅
** Adjust Ui check balance ✅
** Added function print card history
** Added Ui print card history
** Update mifare mdd lib to version version: 0.1.36 ✅
** Added isCheckHistory to getcardinfo ✅
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<project version="4"> <project version="4">
<component name="CompilerConfiguration"> <component name="CompilerConfiguration">
<bytecodeTargetLevel target="11" /> <bytecodeTargetLevel target="17" />
</component> </component>
</project> </project>
\ No newline at end of file
...@@ -41,5 +41,10 @@ ...@@ -41,5 +41,10 @@
<option name="name" value="maven" /> <option name="name" value="maven" />
<option name="url" value="https://mobile-repo.mdd.co.id:8081/artifactory/android-library/" /> <option name="url" value="https://mobile-repo.mdd.co.id:8081/artifactory/android-library/" />
</remote-repository> </remote-repository>
<remote-repository>
<option name="id" value="maven" />
<option name="name" value="maven" />
<option name="url" value="https://mobile-repo.mdd.co.id/artifactory/android-library/" />
</remote-repository>
</component> </component>
</project> </project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4"> <project version="4">
<component name="ExternalStorageConfigurationManager" enabled="true" /> <component name="ExternalStorageConfigurationManager" enabled="true" />
<component name="ProjectRootManager" version="2" languageLevel="JDK_11" default="true" project-jdk-name="Android Studio default JDK" project-jdk-type="JavaSDK"> <component name="ProjectRootManager" version="2" languageLevel="JDK_17" default="true" project-jdk-name="jbr-17" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/build/classes" /> <output url="file://$PROJECT_DIR$/build/classes" />
</component> </component>
<component name="ProjectType"> <component name="ProjectType">
......
...@@ -12,7 +12,7 @@ ...@@ -12,7 +12,7 @@
"filters": [], "filters": [],
"attributes": [], "attributes": [],
"versionCode": 1, "versionCode": 1,
"versionName": "1.0.0", "versionName": "SS.23.1.WWW.SB",
"outputFile": "app-debug.apk" "outputFile": "app-debug.apk"
} }
], ],
......
...@@ -12,7 +12,7 @@ ...@@ -12,7 +12,7 @@
"filters": [], "filters": [],
"attributes": [], "attributes": [],
"versionCode": 1, "versionCode": 1,
"versionName": "1.0.0", "versionName": "SS.23.1.WWW.SB",
"outputFile": "app-profile.apk" "outputFile": "app-profile.apk"
} }
], ],
......
...@@ -11,8 +11,8 @@ ...@@ -11,8 +11,8 @@
"type": "SINGLE", "type": "SINGLE",
"filters": [], "filters": [],
"attributes": [], "attributes": [],
"versionCode": 1, "versionCode": 16,
"versionName": "SS.3.WHO", "versionName": "SS.23.1.WWW.SB",
"outputFile": "app-release.apk" "outputFile": "app-release.apk"
} }
], ],
......
...@@ -17,42 +17,42 @@ public final class GeneratedPluginRegistrant { ...@@ -17,42 +17,42 @@ public final class GeneratedPluginRegistrant {
public static void registerWith(@NonNull FlutterEngine flutterEngine) { public static void registerWith(@NonNull FlutterEngine flutterEngine) {
try { try {
flutterEngine.getPlugins().add(new dev.fluttercommunity.plus.connectivity.ConnectivityPlugin()); flutterEngine.getPlugins().add(new dev.fluttercommunity.plus.connectivity.ConnectivityPlugin());
} catch(Exception e) { } catch (Exception e) {
Log.e(TAG, "Error registering plugin connectivity_plus, dev.fluttercommunity.plus.connectivity.ConnectivityPlugin", e); Log.e(TAG, "Error registering plugin connectivity_plus, dev.fluttercommunity.plus.connectivity.ConnectivityPlugin", e);
} }
try { try {
flutterEngine.getPlugins().add(new dev.fluttercommunity.plus.device_info.DeviceInfoPlusPlugin()); flutterEngine.getPlugins().add(new dev.fluttercommunity.plus.device_info.DeviceInfoPlusPlugin());
} catch(Exception e) { } catch (Exception e) {
Log.e(TAG, "Error registering plugin device_info_plus, dev.fluttercommunity.plus.device_info.DeviceInfoPlusPlugin", e); Log.e(TAG, "Error registering plugin device_info_plus, dev.fluttercommunity.plus.device_info.DeviceInfoPlusPlugin", e);
} }
try { try {
flutterEngine.getPlugins().add(new dev.fluttercommunity.plus.packageinfo.PackageInfoPlugin()); flutterEngine.getPlugins().add(new dev.fluttercommunity.plus.packageinfo.PackageInfoPlugin());
} catch(Exception e) { } catch (Exception e) {
Log.e(TAG, "Error registering plugin package_info_plus, dev.fluttercommunity.plus.packageinfo.PackageInfoPlugin", e); Log.e(TAG, "Error registering plugin package_info_plus, dev.fluttercommunity.plus.packageinfo.PackageInfoPlugin", e);
} }
try { try {
flutterEngine.getPlugins().add(new io.flutter.plugins.pathprovider.PathProviderPlugin()); flutterEngine.getPlugins().add(new io.flutter.plugins.pathprovider.PathProviderPlugin());
} catch(Exception e) { } catch (Exception e) {
Log.e(TAG, "Error registering plugin path_provider_android, io.flutter.plugins.pathprovider.PathProviderPlugin", e); Log.e(TAG, "Error registering plugin path_provider_android, io.flutter.plugins.pathprovider.PathProviderPlugin", e);
} }
try { try {
flutterEngine.getPlugins().add(new com.baseflow.permissionhandler.PermissionHandlerPlugin()); flutterEngine.getPlugins().add(new com.baseflow.permissionhandler.PermissionHandlerPlugin());
} catch(Exception e) { } catch (Exception e) {
Log.e(TAG, "Error registering plugin permission_handler_android, com.baseflow.permissionhandler.PermissionHandlerPlugin", e); Log.e(TAG, "Error registering plugin permission_handler_android, com.baseflow.permissionhandler.PermissionHandlerPlugin", e);
} }
try { try {
flutterEngine.getPlugins().add(new io.sentry.flutter.SentryFlutterPlugin()); flutterEngine.getPlugins().add(new io.sentry.flutter.SentryFlutterPlugin());
} catch(Exception e) { } catch (Exception e) {
Log.e(TAG, "Error registering plugin sentry_flutter, io.sentry.flutter.SentryFlutterPlugin", e); Log.e(TAG, "Error registering plugin sentry_flutter, io.sentry.flutter.SentryFlutterPlugin", e);
} }
try { try {
flutterEngine.getPlugins().add(new io.flutter.plugins.sharedpreferences.SharedPreferencesPlugin()); flutterEngine.getPlugins().add(new io.flutter.plugins.sharedpreferences.SharedPreferencesPlugin());
} catch(Exception e) { } catch (Exception e) {
Log.e(TAG, "Error registering plugin shared_preferences_android, io.flutter.plugins.sharedpreferences.SharedPreferencesPlugin", e); Log.e(TAG, "Error registering plugin shared_preferences_android, io.flutter.plugins.sharedpreferences.SharedPreferencesPlugin", e);
} }
try { try {
flutterEngine.getPlugins().add(new com.tekartik.sqflite.SqflitePlugin()); flutterEngine.getPlugins().add(new com.tekartik.sqflite.SqflitePlugin());
} catch(Exception e) { } catch (Exception e) {
Log.e(TAG, "Error registering plugin sqflite, com.tekartik.sqflite.SqflitePlugin", e); Log.e(TAG, "Error registering plugin sqflite, com.tekartik.sqflite.SqflitePlugin", e);
} }
} }
......
...@@ -168,7 +168,8 @@ class MainActivity : MethodChannel.MethodCallHandler, FlutterActivity(), MifareT ...@@ -168,7 +168,8 @@ class MainActivity : MethodChannel.MethodCallHandler, FlutterActivity(), MifareT
mifareTicketingV3.getCardInfo( mifareTicketingV3.getCardInfo(
isSync = true, isSync = true,
isCheckValidation = false, isCheckValidation = false,
isCheckMin = true isCheckMin = true,
isCheckListHistory = true
) )
} }
} }
......
...@@ -44,6 +44,6 @@ subprojects { ...@@ -44,6 +44,6 @@ subprojects {
project.evaluationDependsOn(':app') project.evaluationDependsOn(':app')
} }
task clean(type: Delete) { tasks.register("clean", Delete) {
delete rootProject.buildDir delete rootProject.buildDir
} }
// This is a generated file; do not edit or check into version control. // This is a generated file; do not edit or check into version control.
FLUTTER_ROOT=/Users/macbookpro/Developments/flutter FLUTTER_ROOT=C:\Users\MDD HP\flutter
FLUTTER_APPLICATION_PATH=/Users/macbookpro/Desktop/MDD Project /flutter app/dolan-selfservice-topup FLUTTER_APPLICATION_PATH=C:\Users\MDD HP\Documents\dolan-selfservice-topup
COCOAPODS_PARALLEL_CODE_SIGN=true COCOAPODS_PARALLEL_CODE_SIGN=true
FLUTTER_TARGET=lib/main.dart FLUTTER_TARGET=lib\main.dart
FLUTTER_BUILD_DIR=build FLUTTER_BUILD_DIR=build
FLUTTER_BUILD_NAME=1.0.0 FLUTTER_BUILD_NAME=1.0.0
FLUTTER_BUILD_NUMBER=1 FLUTTER_BUILD_NUMBER=1
......
#!/bin/sh #!/bin/sh
# This is a generated file; do not edit or check into version control. # This is a generated file; do not edit or check into version control.
export "FLUTTER_ROOT=/Users/macbookpro/Developments/flutter" export "FLUTTER_ROOT=C:\Users\MDD HP\flutter"
export "FLUTTER_APPLICATION_PATH=/Users/macbookpro/Desktop/MDD Project /flutter app/dolan-selfservice-topup" export "FLUTTER_APPLICATION_PATH=C:\Users\MDD HP\Documents\dolan-selfservice-topup"
export "COCOAPODS_PARALLEL_CODE_SIGN=true" export "COCOAPODS_PARALLEL_CODE_SIGN=true"
export "FLUTTER_TARGET=lib/main.dart" export "FLUTTER_TARGET=lib\main.dart"
export "FLUTTER_BUILD_DIR=build" export "FLUTTER_BUILD_DIR=build"
export "FLUTTER_BUILD_NAME=1.0.0" export "FLUTTER_BUILD_NAME=1.0.0"
export "FLUTTER_BUILD_NUMBER=1" export "FLUTTER_BUILD_NUMBER=1"
......
...@@ -18,3 +18,9 @@ TextEditingController maxTapController = TextEditingController(text: Preferences ...@@ -18,3 +18,9 @@ TextEditingController maxTapController = TextEditingController(text: Preferences
TextEditingController validate = TextEditingController(text: PreferencesHelper.getString(kUserData)); TextEditingController validate = TextEditingController(text: PreferencesHelper.getString(kUserData));
TextEditingController? amountController = TextEditingController(text: ''); TextEditingController? amountController = TextEditingController(text: '');
TextEditingController outletName = TextEditingController(text: ''); TextEditingController outletName = TextEditingController(text: '');
// text Controller check balance
TextEditingController urlDolanCheckBalanceController = TextEditingController(text: PreferencesHelper.getString(kUrlDolanCheckBalance));
TextEditingController urlCloseLoopCheckBalanceController = TextEditingController(text: PreferencesHelper.getString(kUrlCloseLoopCheckBalance));
TextEditingController urlPrepaidCheckBalanceController = TextEditingController(text: PreferencesHelper.getString(kUrlPrePaidCheckBalance));
TextEditingController idleCheckBalanceController = TextEditingController(text: PreferencesHelper.getString(kIdleCheckBalance));
...@@ -11,6 +11,7 @@ import 'dart:convert'; ...@@ -11,6 +11,7 @@ import 'dart:convert';
import 'package:flutter/foundation.dart'; import 'package:flutter/foundation.dart';
import 'package:logging/logging.dart'; import 'package:logging/logging.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'package:self_service_3/ui/pages/home_page_check_balance.dart';
import 'package:self_service_3/ui/pages/topup/top_up_page.dart'; import 'package:self_service_3/ui/pages/topup/top_up_page.dart';
import 'package:self_service_3/ui/pages/home_page.dart'; import 'package:self_service_3/ui/pages/home_page.dart';
...@@ -106,6 +107,7 @@ class _MyAppState extends State<MyApp> { ...@@ -106,6 +107,7 @@ class _MyAppState extends State<MyApp> {
'/set-merchant': (context) => const SetMerchant(), '/set-merchant': (context) => const SetMerchant(),
'/input-url': (context) => const Dialog(), '/input-url': (context) => const Dialog(),
'/home': (context) => const HomePage(), '/home': (context) => const HomePage(),
'/home-check-balance': (context) => const HomePageCheckBalance(),
'/tap-card': (context) => const TapCard(), '/tap-card': (context) => const TapCard(),
'/tap-card-aktivasi': (context) => const TapCardAktivasi(), '/tap-card-aktivasi': (context) => const TapCardAktivasi(),
// '/top-up': (context) => const TopUpPage(), // '/top-up': (context) => const TopUpPage(),
......
...@@ -13,6 +13,7 @@ import '../shared/preferences_helper.dart'; ...@@ -13,6 +13,7 @@ import '../shared/preferences_helper.dart';
import 'exception_service.dart'; import 'exception_service.dart';
class ServiceApi { class ServiceApi {
Future<Map<String, dynamic>> getMultiOutlet( Future<Map<String, dynamic>> getMultiOutlet(
String url, String url,
String companyName, String companyName,
...@@ -69,8 +70,6 @@ class ServiceApi { ...@@ -69,8 +70,6 @@ class ServiceApi {
} }
} }
static String _getBaseUrl() { static String _getBaseUrl() {
String _protocol = PreferencesHelper.getString(kProtocol); String _protocol = PreferencesHelper.getString(kProtocol);
String _host = PreferencesHelper.getString(kHost); String _host = PreferencesHelper.getString(kHost);
...@@ -257,4 +256,30 @@ class ServiceApi { ...@@ -257,4 +256,30 @@ class ServiceApi {
print("${response.body.toString()}"); print("${response.body.toString()}");
return json.decode(response.body.toString()); return json.decode(response.body.toString());
} }
static Future<Map<String, dynamic>> fetchAuditHistory(String cardUid, String regDb, String type) async {
print("fetchAuditHistory dipanggil dengan cardUid: $cardUid, regDb: $regDb, type: $type");
final String baseUrlAudit = "https://oss.dev.dolanapp.com/library/v1/audit-history";
final url = Uri.parse(baseUrlAudit);
final body = {
"card_uid": cardUid,
"reg_db": regDb,
"type": type,
};
final response = await http.post(
url,
headers: <String, String>{
'Content-Type': 'application/json; charset=UTF-8',
},
body: jsonEncode(body),
).timeout(Duration(seconds: 10));
if (response.statusCode == 200) {
return jsonDecode(response.body);
} else {
throw Exception('Gagal mengambil data dari API: ${response.statusCode}');
}
}
} }
// ignore_for_file: unnecessary_nullable_for_final_variable_declarations // ignore_for_file: unnecessary_nullable_for_final_variable_declarations
const kUrlDolan = "url_dolan"; const kUrlDolan = "url_dolan";
const kMode = "mode";
const kIsHashMode = "is_hash_mode";
const kUrlDolanCheckBalance = "url_dolan_check_balance";
const kTerminalId = "terminal_id"; const kTerminalId = "terminal_id";
const kUrlCorePayment = "core_payment"; const kUrlCorePayment = "core_payment";
// const kUrlStatusQr = "url_status_qr"; // const kUrlStatusQr = "url_status_qr";
const kUrlCloseLoop = "url_close_loop"; const kUrlCloseLoop = "url_close_loop";
const kUrlCloseLoopCheckBalance = "url_close_loop_check_balance";
const kMerchantName = "merchant_name"; const kMerchantName = "merchant_name";
const kUserName = "user_name"; const kUserName = "user_name";
const kUserData = "user_data"; const kUserData = "user_data";
const kUrlPrePaid = "url_prepaid"; const kUrlPrePaid = "url_prepaid";
const kUrlPrePaidCheckBalance = "url_prepaid_check_balance";
const kVersionApp = "version_app"; const kVersionApp = "version_app";
const kMax = "max"; const kMax = "max";
const kMin = "min"; const kMin = "min";
const kIdle ="idle"; const kIdle ="idle";
const kIdleCheckBalance ="idle_check_balance";
const kMaxTap = "maxTap"; const kMaxTap = "maxTap";
const kMultiOutletName = "multioutletname"; const kMultiOutletName = "multioutletname";
const kMultiOutletServiceCharge = "multioutletservicecharge"; const kMultiOutletServiceCharge = "multioutletservicecharge";
...@@ -37,6 +43,7 @@ const kUrlTopup = "url_topup"; ...@@ -37,6 +43,7 @@ const kUrlTopup = "url_topup";
const kIsDoneActivation = "is_done_activation"; const kIsDoneActivation = "is_done_activation";
const kIsDoneConfig = "is_done_config"; const kIsDoneConfig = "is_done_config";
const kIsDoneConfigCheckBalance = "is_done_config_check_balance";
const kIsTap = "is_tap_config"; const kIsTap = "is_tap_config";
const kIsLoad = "is_load_config"; const kIsLoad = "is_load_config";
const kIsGetOutlet = "is_get_outlet"; const kIsGetOutlet = "is_get_outlet";
......
...@@ -18,6 +18,7 @@ import 'package:flutter/material.dart'; ...@@ -18,6 +18,7 @@ import 'package:flutter/material.dart';
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';
import 'package:lottie/lottie.dart'; import 'package:lottie/lottie.dart';
import 'package:package_info_plus/package_info_plus.dart';
import 'package:self_service_3/blocs/api_bloc.dart'; import 'package:self_service_3/blocs/api_bloc.dart';
import 'package:self_service_3/database/database_helper.dart'; import 'package:self_service_3/database/database_helper.dart';
...@@ -103,25 +104,11 @@ class _HomePageState extends State<HomePage> implements AlertDialogCallback { ...@@ -103,25 +104,11 @@ class _HomePageState extends State<HomePage> implements AlertDialogCallback {
late Timer timerPageHome; late Timer timerPageHome;
var infoCard, var infoCard, prevInfoCard, balance, cardExpirity,
prevInfoCard, cardType, deposit, cardNumber, name,
balance, lastBalance, approvalCode, trxId,
cardExpirity, amount, report, infoM, dateTimeCardExpirity,
cardType, infoMulti, companyAddress, num, reffNo,
deposit,
cardNumber,
name,
lastBalance,
approvalCode,
trxId,
amount,
report,
infoM,
dateTimeCardExpirity,
infoMulti,
companyAddress,
num,
reffNo,
plainCardExpirity; plainCardExpirity;
Map<String, dynamic>? dataQris; Map<String, dynamic>? dataQris;
...@@ -133,9 +120,12 @@ class _HomePageState extends State<HomePage> implements AlertDialogCallback { ...@@ -133,9 +120,12 @@ class _HomePageState extends State<HomePage> implements AlertDialogCallback {
var message = "Silakan Letakkan Wristband Anda Di Reader"; var message = "Silakan Letakkan Wristband Anda Di Reader";
var success = "Tempel dan tahan wristband anda di reader"; var success = "Tempel dan tahan wristband anda di reader";
var wordingTap = "Mesin Isi Ulang Wristband Dengan Pembayaran "; // var wordingTap = "Mesin Isi Ulang Wristband Dengan Pembayaran ";
late String wordingTap;
late String imageLogoShowTap;
Timer? timerCheckStatus; Timer? timerCheckStatus;
// String idle = PreferencesHelper.getString("idle");
String idle = PreferencesHelper.getString("idle"); String idle = PreferencesHelper.getString("idle");
bool isHitApi = false; bool isHitApi = false;
bool _isLoading = false; bool _isLoading = false;
...@@ -940,14 +930,10 @@ class _HomePageState extends State<HomePage> implements AlertDialogCallback { ...@@ -940,14 +930,10 @@ class _HomePageState extends State<HomePage> implements AlertDialogCallback {
2, 2,
); );
// NOTE merubah tanggal // NOTE merubah tanggal
var change = DateTime.fromMillisecondsSinceEpoch( var change = DateTime.fromMillisecondsSinceEpoch(int.parse(infoMap['cardExpirity']) * 1000);
int.parse(infoMap['cardExpirity']) * 1000);
final DateFormat formatter = DateFormat('dd-MMM-yyyy'); final DateFormat formatter = DateFormat('dd-MMM-yyyy');
cardExpirity = formatter.format(change); cardExpirity = formatter.format(change);
deposit = CurrencyFormat.convertToIdr( deposit = CurrencyFormat.convertToIdr(infoMap["deposit"], 2,);
infoMap["deposit"],
2,
);
cardNumber = infoMap["cardNumber"]; cardNumber = infoMap["cardNumber"];
String cardNo = cardNumber.toString(); String cardNo = cardNumber.toString();
String targetMasked = cardNo.substring(0, 12); String targetMasked = cardNo.substring(0, 12);
...@@ -987,6 +973,7 @@ class _HomePageState extends State<HomePage> implements AlertDialogCallback { ...@@ -987,6 +973,7 @@ class _HomePageState extends State<HomePage> implements AlertDialogCallback {
} }
// ValueNotifier<int> idleDuration = ValueNotifier<int>(0); // buat ValueNotifier untuk idleDuration // ValueNotifier<int> idleDuration = ValueNotifier<int>(0); // buat ValueNotifier untuk idleDuration
// int _maxDuration = int.parse(PreferencesHelper.getString("idle"));
int _maxDuration = int.parse(PreferencesHelper.getString("idle")); int _maxDuration = int.parse(PreferencesHelper.getString("idle"));
int _minDuration = 3; int _minDuration = 3;
late ValueNotifier<int> idleDuration; late ValueNotifier<int> idleDuration;
...@@ -1309,7 +1296,37 @@ class _HomePageState extends State<HomePage> implements AlertDialogCallback { ...@@ -1309,7 +1296,37 @@ class _HomePageState extends State<HomePage> implements AlertDialogCallback {
}); });
} }
Future<void> _showTap() { Future<String> _getSelectMode() async {
String selectMode = await PreferencesHelper.getString(kMode);
return selectMode;
}
Future<String> _getImageLogoShowTap() async {
PackageInfo packageInfo = await PackageInfo.fromPlatform();
String appVersion = packageInfo.version;
print('APP VERSION SELFSERVICE: $appVersion');
RegExp regExp = RegExp(r'www', caseSensitive: false);
String imageLogoShowTap = regExp.hasMatch(appVersion) ? 'assets/wahoo.png' : '';
print('imageLogoShowTap: $imageLogoShowTap');
return imageLogoShowTap;
}
Future<String> _getWordingTap(String selectMode) async {
if (selectMode == "topup") {
return "Mesin Isi Ulang Wristband Dengan Pembayaran";
} else if (selectMode == "checkbalance") {
return "Customer Balance Check";
} else {
return "Default Wording";
}
}
Future<void> _showTap() async {
String imageLogoShowTap =await _getImageLogoShowTap();
String selectMode = await _getSelectMode();
String wordingTap = await _getWordingTap(selectMode);
print('imageLogoShowTap before _showTap: $imageLogoShowTap');
return showDialog<void>( return showDialog<void>(
context: context, context: context,
barrierDismissible: false, // user must tap button! barrierDismissible: false, // user must tap button!
...@@ -1341,14 +1358,20 @@ class _HomePageState extends State<HomePage> implements AlertDialogCallback { ...@@ -1341,14 +1358,20 @@ class _HomePageState extends State<HomePage> implements AlertDialogCallback {
width: 120, width: 120,
// fit:, // fit:,
), ),
SizedBox( Visibility(
visible: imageLogoShowTap.isNotEmpty,
child: SizedBox(
width: 90, width: 90,
), ),
Image.asset( ),
"assets/wahoo.png", Visibility(
visible: imageLogoShowTap.isNotEmpty,
child: Image.asset(
imageLogoShowTap,
height: 90, height: 90,
width: 115, width: 115,
), ),
),
], ],
), ),
Row( Row(
...@@ -1363,17 +1386,22 @@ class _HomePageState extends State<HomePage> implements AlertDialogCallback { ...@@ -1363,17 +1386,22 @@ class _HomePageState extends State<HomePage> implements AlertDialogCallback {
), ),
textAlign: TextAlign.center, textAlign: TextAlign.center,
), ),
Image.asset( Visibility(
visible: selectMode != "checkbalance",
child: Image.asset(
"assets/qris.png", "assets/qris.png",
width: 60, width: 60,
height: 60, height: 60,
), ),
),
], ],
), ),
Row( Row(
mainAxisAlignment: MainAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.center,
children: [ children: [
Text( Visibility(
visible: selectMode != "checkbalance",
child: Text(
"wristband topup machine with qr payment", "wristband topup machine with qr payment",
style: greyTextStyle.copyWith( style: greyTextStyle.copyWith(
fontSize: 15, fontSize: 15,
...@@ -1382,6 +1410,7 @@ class _HomePageState extends State<HomePage> implements AlertDialogCallback { ...@@ -1382,6 +1410,7 @@ class _HomePageState extends State<HomePage> implements AlertDialogCallback {
), ),
textAlign: TextAlign.center, textAlign: TextAlign.center,
), ),
),
]), ]),
Column( Column(
mainAxisAlignment: MainAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.center,
...@@ -2614,7 +2643,8 @@ class _HomePageState extends State<HomePage> implements AlertDialogCallback { ...@@ -2614,7 +2643,8 @@ class _HomePageState extends State<HomePage> implements AlertDialogCallback {
), ),
], ],
); );
}), },
),
SizedBox(height: 2), SizedBox(height: 2),
Text( Text(
"${getDate()}", "${getDate()}",
......
This diff is collapsed.
This diff is collapsed.
...@@ -125,11 +125,14 @@ class _SplashPageState extends State<SplashPage> with TickerProviderStateMixin{ ...@@ -125,11 +125,14 @@ class _SplashPageState extends State<SplashPage> with TickerProviderStateMixin{
} }
void checkActivation() { void checkActivation() {
bool isDoneConfig = PreferencesHelper.getBool(kIsDoneConfig); // bool isDoneConfig = PreferencesHelper.getBool(kIsDoneConfig);
// bool isDoneConfigCheckBalance = PreferencesHelper.getBool(kIsDoneConfigCheckBalance);
bool isTapConfig = PreferencesHelper.getBool(kIsTap); bool isTapConfig = PreferencesHelper.getBool(kIsTap);
String isMode = PreferencesHelper.getString(kMode);
bool isHasMode = PreferencesHelper.getBool(kIsHashMode);
if (isDoneConfig) { if (isHasMode) {
if (isTapConfig && isDoneConfig) { if (isTapConfig) {
navigationToActivation(); navigationToActivation();
} else { } else {
navigationToGetOutlet(); navigationToGetOutlet();
......
import 'dart:ui';
import 'package:flutter/material.dart';
class GlassMorphism extends StatelessWidget {
final Widget child;
final double start;
final double end;
const GlassMorphism({
Key? key,
required this.child,
required this.start,
required this.end,
}) : super(key: key);
@override
Widget build(BuildContext context) {
return ClipRRect(
child: BackdropFilter(
filter: ImageFilter.blur(sigmaX: 3, sigmaY: 3),
child: Container(
decoration: BoxDecoration(
gradient: LinearGradient(
colors: [
Colors.blue.withOpacity(start),
Colors.blue.withOpacity(end),
],
begin: AlignmentDirectional.topStart,
end: AlignmentDirectional.bottomEnd,
),
borderRadius: BorderRadius.all(Radius.circular(10)),
border: Border.all(
width: 1.5,
color: Colors.white.withOpacity(0.2),
),
),
child: child,
),
),
);
}
}
\ No newline at end of file
...@@ -11,6 +11,7 @@ import 'package:self_service_3/services/api_helpert.dart'; ...@@ -11,6 +11,7 @@ import 'package:self_service_3/services/api_helpert.dart';
import 'package:self_service_3/shared/theme.dart'; import 'package:self_service_3/shared/theme.dart';
import 'package:self_service_3/ui/widgets/buttons.dart'; import 'package:self_service_3/ui/widgets/buttons.dart';
import 'package:self_service_3/ui/widgets/glassmorphism.dart'; import 'package:self_service_3/ui/widgets/glassmorphism.dart';
import '../../shared/preference_constant.dart';
import '../../shared/theme.dart'; import '../../shared/theme.dart';
import '../../shared/preferences_helper.dart'; import '../../shared/preferences_helper.dart';
import 'forms.dart'; import 'forms.dart';
...@@ -29,7 +30,6 @@ class TapCardAktivasi extends StatefulWidget { ...@@ -29,7 +30,6 @@ class TapCardAktivasi extends StatefulWidget {
class _TapCardAktivasiState extends State<TapCardAktivasi> class _TapCardAktivasiState extends State<TapCardAktivasi>
with TickerProviderStateMixin { with TickerProviderStateMixin {
String newRouteName = '/home';
ServiceApi service = ServiceApi(); ServiceApi service = ServiceApi();
bool isDoneActivateKey = bool isDoneActivateKey =
PreferencesHelper.getBool("IS_DONE_ACTIVATE_WORKING_KEY"); PreferencesHelper.getBool("IS_DONE_ACTIVATE_WORKING_KEY");
...@@ -140,6 +140,16 @@ class _TapCardAktivasiState extends State<TapCardAktivasi> ...@@ -140,6 +140,16 @@ class _TapCardAktivasiState extends State<TapCardAktivasi>
} }
Future<void> _showDialSuccess() async { Future<void> _showDialSuccess() async {
String mode = PreferencesHelper.getString(kMode); // Mengambil mode dari Shared Preferences
String newRouteName;
if (mode == 'topup') {
newRouteName = '/home';
} else if (mode == 'checkbalance') {
newRouteName = '/home-check-balance';
} else {
// Mode default jika tidak sesuai dengan 'topup' atau 'checkbalance'
newRouteName = '/default-route'; // Ganti dengan rute default yang sesuai
}
return showDialog<void>( return showDialog<void>(
context: context, context: context,
barrierDismissible: false, // user must tap button! barrierDismissible: false, // user must tap button!
......
/Users/macbookpro/.pub-cache/hosted/pub.dev/connectivity_plus-3.0.3/ C:/Users/MDD HP/AppData/Local/Pub/Cache/hosted/pub.dev/connectivity_plus-3.0.3/
\ No newline at end of file \ No newline at end of file
/Users/macbookpro/.pub-cache/hosted/pub.dev/device_info_plus-8.1.0/ C:/Users/MDD HP/AppData/Local/Pub/Cache/hosted/pub.dev/device_info_plus-8.1.0/
\ No newline at end of file \ No newline at end of file
/Users/macbookpro/.pub-cache/hosted/pub.dev/package_info_plus-3.0.3/ C:/Users/MDD HP/AppData/Local/Pub/Cache/hosted/pub.dev/package_info_plus-3.0.3/
\ No newline at end of file \ No newline at end of file
/Users/macbookpro/.pub-cache/hosted/pub.dev/path_provider_linux-2.1.10/ C:/Users/MDD HP/AppData/Local/Pub/Cache/hosted/pub.dev/path_provider_linux-2.1.10/
\ No newline at end of file \ No newline at end of file
/Users/macbookpro/.pub-cache/hosted/pub.dev/sentry_flutter-7.2.0/ C:/Users/MDD HP/AppData/Local/Pub/Cache/hosted/pub.dev/sentry_flutter-7.10.1/
\ No newline at end of file \ No newline at end of file
/Users/macbookpro/.pub-cache/hosted/pub.dev/shared_preferences_linux-2.1.5/ C:/Users/MDD HP/AppData/Local/Pub/Cache/hosted/pub.dev/shared_preferences_linux-2.1.5/
\ No newline at end of file \ No newline at end of file
...@@ -45,10 +45,10 @@ packages: ...@@ -45,10 +45,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: async name: async
sha256: bfe67ef28df125b7dddcea62755991f807aa39a2492a23e1550161692950bbe0 sha256: "947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.10.0" version: "2.11.0"
awesome_dialog: awesome_dialog:
dependency: "direct main" dependency: "direct main"
description: description:
...@@ -149,10 +149,10 @@ packages: ...@@ -149,10 +149,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: characters name: characters
sha256: e6a326c8af69605aec75ed6c187d06b349707a27fbff8222ca9cc2cff167975c sha256: "04a925763edad70e8443c99234dc3328f442e811f1d8fd1a72f1c8ad0f69a605"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.2.1" version: "1.3.0"
checked_yaml: checked_yaml:
dependency: transitive dependency: transitive
description: description:
...@@ -197,10 +197,10 @@ packages: ...@@ -197,10 +197,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: collection name: collection
sha256: cfc915e6923fe5ce6e153b0723c753045de46de1b4d63771530504004a45fae0 sha256: f092b211a4319e98e5ff58223576de6c2803db36221657b46c82574721240687
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.17.0" version: "1.17.2"
connectivity_plus: connectivity_plus:
dependency: "direct main" dependency: "direct main"
description: description:
...@@ -386,10 +386,10 @@ packages: ...@@ -386,10 +386,10 @@ packages:
dependency: "direct main" dependency: "direct main"
description: description:
name: flutter_layout_grid name: flutter_layout_grid
sha256: "1df27a2e9cd34faa0c0a33148c8bb9d9259e87cc5b934c989a59a77e1a4c0d6b" sha256: "3529b7aa7ed2cb9861a0bbaa5c14d4be2beaf5a070ce0176077159f80c5de094"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.0.1" version: "2.0.5"
flutter_localizations: flutter_localizations:
dependency: "direct main" dependency: "direct main"
description: flutter description: flutter
...@@ -497,10 +497,10 @@ packages: ...@@ -497,10 +497,10 @@ packages:
dependency: "direct main" dependency: "direct main"
description: description:
name: intl name: intl
sha256: "910f85bce16fb5c6f614e117efa303e85a1731bb0081edf3604a2ae6e9a3cc91" sha256: "3bc132a9dbce73a7e4a21a17d06e1878839ffbf975568bc875c60537824b0c4d"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "0.17.0" version: "0.18.1"
io: io:
dependency: transitive dependency: transitive
description: description:
...@@ -513,10 +513,10 @@ packages: ...@@ -513,10 +513,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: js name: js
sha256: "5528c2f391ededb7775ec1daa69e65a2d61276f7552de2b5f7b8d34ee9fd4ab7" sha256: f2c445dce49627136094980615a031419f7f3eb393237e4ecd97ac15dea343f3
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "0.6.5" version: "0.6.7"
json_annotation: json_annotation:
dependency: transitive dependency: transitive
description: description:
...@@ -553,26 +553,26 @@ packages: ...@@ -553,26 +553,26 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: matcher name: matcher
sha256: "16db949ceee371e9b99d22f88fa3a73c4e59fd0afed0bd25fc336eb76c198b72" sha256: "1803e76e6653768d64ed8ff2e1e67bea3ad4b923eb5c56a295c3e634bad5960e"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "0.12.13" version: "0.12.16"
material_color_utilities: material_color_utilities:
dependency: transitive dependency: transitive
description: description:
name: material_color_utilities name: material_color_utilities
sha256: d92141dc6fe1dad30722f9aa826c7fbc896d021d792f80678280601aff8cf724 sha256: "9528f2f296073ff54cb9fee677df673ace1218163c3bc7628093e7eed5203d41"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "0.2.0" version: "0.5.0"
meta: meta:
dependency: transitive dependency: transitive
description: description:
name: meta name: meta
sha256: "6c268b42ed578a53088d834796959e4a1814b5e9e164f147f580a386e5decf42" sha256: "3c74dbf8763d36539f114c799d8a2d87343b5067e9d796ca22b5eb8437090ee3"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.8.0" version: "1.9.1"
mime: mime:
dependency: transitive dependency: transitive
description: description:
...@@ -641,10 +641,10 @@ packages: ...@@ -641,10 +641,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: path name: path
sha256: db9d4f58c908a4ba5953fcee2ae317c94889433e5024c27ce74a37f94267945b sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.8.2" version: "1.8.3"
path_parsing: path_parsing:
dependency: transitive dependency: transitive
description: description:
...@@ -857,18 +857,18 @@ packages: ...@@ -857,18 +857,18 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: sentry name: sentry
sha256: faecda9087cd6d1c2b95bd5e16cce0adeef2e9aa34b8016b150b314be7b5c642 sha256: "830667eadc0398fea3a3424ed1b74568e2db603a42758d0922e2f2974ce55a60"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "7.2.0" version: "7.10.1"
sentry_flutter: sentry_flutter:
dependency: "direct main" dependency: "direct main"
description: description:
name: sentry_flutter name: sentry_flutter
sha256: "038607c578d2601c63ced78a503c23d7b25f24bd3c24492cadfc47bc9cbb6636" sha256: "6730f41b304c6fb0fa590dacccaf73ba11082fc64b274cfe8a79776f2b95309c"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "7.2.0" version: "7.10.1"
shared_preferences: shared_preferences:
dependency: "direct main" dependency: "direct main"
description: description:
...@@ -966,10 +966,10 @@ packages: ...@@ -966,10 +966,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: source_span name: source_span
sha256: dd904f795d4b4f3b870833847c461801f6750a9fa8e61ea5ac53f9422b31f250 sha256: "53e943d4206a5e30df338fd4c6e7a077e02254531b138a15aec3bd143c1a8b3c"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.9.1" version: "1.10.0"
sqflite: sqflite:
dependency: "direct main" dependency: "direct main"
description: description:
...@@ -1062,10 +1062,10 @@ packages: ...@@ -1062,10 +1062,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: test_api name: test_api
sha256: ad540f65f92caa91bf21dfc8ffb8c589d6e4dc0c2267818b4cc2792857706206 sha256: "75760ffd7786fffdfb9597c35c5b27eaeec82be8edfb6d71d32651128ed7aab8"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "0.4.16" version: "0.6.0"
timer_builder: timer_builder:
dependency: "direct main" dependency: "direct main"
description: description:
...@@ -1170,6 +1170,14 @@ packages: ...@@ -1170,6 +1170,14 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "1.0.2" version: "1.0.2"
web:
dependency: transitive
description:
name: web
sha256: dc8ccd225a2005c1be616fe02951e2e342092edf968cf0844220383757ef8f10
url: "https://pub.dev"
source: hosted
version: "0.1.4-beta"
web_socket_channel: web_socket_channel:
dependency: transitive dependency: transitive
description: description:
...@@ -1211,5 +1219,5 @@ packages: ...@@ -1211,5 +1219,5 @@ packages:
source: hosted source: hosted
version: "3.1.1" version: "3.1.1"
sdks: sdks:
dart: ">=2.19.0 <3.0.0" dart: ">=3.1.0-185.0.dev <4.0.0"
flutter: ">=3.7.0-0" flutter: ">=3.7.0-0"
...@@ -55,7 +55,7 @@ dependencies: ...@@ -55,7 +55,7 @@ dependencies:
flutter_spinkit: ^5.1.0 flutter_spinkit: ^5.1.0
simple_animations: ^5.0.0+2 simple_animations: ^5.0.0+2
flutter_svg: ^2.0.4 flutter_svg: ^2.0.4
flutter_layout_grid: ^2.0.1 flutter_layout_grid: ^2.0.5
flutter_staggered_grid_view: ^0.6.2 flutter_staggered_grid_view: ^0.6.2
timer_count_down: ^2.2.1 timer_count_down: ^2.2.1
easy_localization: ^3.0.0 easy_localization: ^3.0.0
...@@ -70,7 +70,7 @@ dependencies: ...@@ -70,7 +70,7 @@ dependencies:
package_info_plus: ^3.0.3 package_info_plus: ^3.0.3
otp_text_field: ^1.1.3 otp_text_field: ^1.1.3
timer_builder: ^2.0.0 timer_builder: ^2.0.0
sentry_flutter: ^7.2.0 sentry_flutter: ^7.10.1
dev_dependencies: dev_dependencies:
...@@ -108,6 +108,7 @@ flutter: ...@@ -108,6 +108,7 @@ flutter:
assets: assets:
- assets/ - assets/
- assets/translate/ - assets/translate/
- assets/wahoo.png
# An image asset can refer to one or more resolution-specific "variants", see # An image asset can refer to one or more resolution-specific "variants", see
# https://flutter.dev/assets-and-images/#resolution-aware # https://flutter.dev/assets-and-images/#resolution-aware
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment