Commit 5867701e authored by Gandha Ryanto's avatar Gandha Ryanto

Update to lib null safety

parent 58351685
......@@ -26,7 +26,7 @@ apply plugin: 'kotlin-android'
apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
android {
compileSdkVersion 30
compileSdkVersion 33
sourceSets {
main.java.srcDirs += 'src/main/kotlin'
......@@ -36,7 +36,7 @@ android {
// TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
applicationId "com.mdd.flutter_mdd_simulator"
minSdkVersion 22
targetSdkVersion 30
targetSdkVersion 33
versionCode flutterVersionCode.toInteger()
versionName flutterVersionName
}
......@@ -48,6 +48,8 @@ android {
signingConfig signingConfigs.debug
}
}
namespace 'com.mdd.flutter_mdd_simulator'
}
flutter {
......@@ -56,4 +58,5 @@ flutter {
dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
implementation "androidx.core:core-ktx:1.6.10"
}
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.mdd.flutter_mdd_simulator">
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<!-- Flutter needs it to communicate with the running application
to allow setting breakpoints, to provide hot reload, etc.
-->
......
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.mdd.flutter_mdd_simulator">
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<application
android:icon="@mipmap/ic_launcher"
android:label="flutter_mdd_simulator"
android:networkSecurityConfig="@xml/network_security_config"
android:preserveLegacyExternalStorage="true"
android:requestLegacyExternalStorage="true">
<activity
android:name=".MainActivity"
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
android:exported="true"
android:hardwareAccelerated="true"
android:launchMode="singleTop"
android:theme="@style/LaunchTheme"
......
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<domain-config cleartextTrafficPermitted="true">
<domain includeSubdomains="true">apidev.mdd.co.id</domain>
</domain-config>
</network-security-config>
\ No newline at end of file
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.mdd.flutter_mdd_simulator">
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<!-- Flutter needs it to communicate with the running application
to allow setting breakpoints, to provide hot reload, etc.
-->
......
buildscript {
ext.kotlin_version = '1.3.50'
ext.kotlin_version = '1.8.0'
repositories {
google()
jcenter()
mavenCentral()
maven {
url "https://mobile-repo.mdd.co.id:8081/artifactory/android-library/"
allowInsecureProtocol(true)
credentials {
username = "admin"
password = "Mddcoid*123#"
}
}
}
dependencies {
classpath 'com.android.tools.build:gradle:4.1.0'
classpath 'com.android.tools.build:gradle:7.4.2'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
}
}
......@@ -15,6 +24,15 @@ allprojects {
repositories {
google()
jcenter()
mavenCentral()
maven {
url "https://mobile-repo.mdd.co.id:8081/artifactory/android-library/"
allowInsecureProtocol(true)
credentials {
username = "admin"
password = "Mddcoid*123#"
}
}
}
}
......@@ -26,6 +44,6 @@ subprojects {
project.evaluationDependsOn(':app')
}
task clean(type: Delete) {
tasks.register("clean", Delete) {
delete rootProject.buildDir
}
......@@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-6.7-all.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.1-all.zip
import 'dart:convert';
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:flutter/painting.dart';
import 'package:flutter_mdd_simulator/screen/TapCard.dart';
import 'package:prepaid_lib_flutter/unik_lib_flutter.dart';
import 'package:intl/intl.dart';
import 'package:prepaid_lib_flutter_null_safety/unik_lib_flutter.dart';
void main() {
WidgetsFlutterBinding.ensureInitialized();
......@@ -21,7 +23,7 @@ class MyApp extends StatelessWidget {
}
class NfcScan extends StatefulWidget {
NfcScan({Key key}) : super(key: key);
NfcScan({Key? key}) : super(key: key);
@override
_MyAppState createState() => _MyAppState();
......@@ -31,10 +33,11 @@ class _MyAppState extends State<NfcScan> {
String _balance = "0", _cardNumber = "000000000000000", _status = "Unknown";
String _bgCard = "images/mandiri_bg.png";
bool _isLoading = false;
String paidAmount;
String? paidAmount;
String _identifier = 'Unknown';
String _bankName;
bool isSuccessInit;
String? _bankName;
bool? isSuccessInit;
List<dynamic>? listHistory;
@override
void initState() {
......@@ -44,16 +47,19 @@ class _MyAppState extends State<NfcScan> {
void initLibrary() async {
isSuccessInit = await UnikLibFlutter.initUnikLib(
"49df5f81d59fae23ec6f542372fc9497" /*"1234567abc"*/, 1);
"4dd9063acfc04848b801288f23c6eeff" /*"1234567abc"*/, 1);
print("isSuccessInit $isSuccessInit");
}
void getCardInfo() async {
_setStateDefault();
/// optional you can use List<String> varName = List<String>.filled(1, "");
List<String> cardUid = List(1);
List<String> cardNumber = List(1);
List<String> balance = List(1);
List<String> bankName = List(1);
List<String> cardUid = [''];
List<String> cardNumber = [''];
List<String> balance = [''];
List<String> bankName = [''];
List<String> history = [''];
bool isSuccess = await UnikLibFlutter.getCardInfo(
cardUid, cardNumber, balance, bankName,
......@@ -64,59 +70,99 @@ class _MyAppState extends State<NfcScan> {
print(
"isSuccess $isSuccess, cardNumber ${cardNumber[0]}, balance ${balance[0]}, bankName ${bankName[0]}");
_setStateCard(isSuccess, cardNumber[0], balance[0], bankName[0]);
bool jsonHistory = await UnikLibFlutter.getHistory(history);
print("jsonHistory ${history[0]}");
this.setState(() {
listHistory = jsonDecode(history[0]);
});
UnikLibFlutter.stopReader(messageSuccess: "Cek saldo berhasil");
_setStateCard(true, cardNumber[0], balance[0], bankName[0]);
// bool historyStatus = await UnikLibFlutter.getHistory(history);
//
// print("History Transaction ${jsonEncode(historyStatus)}");
}
void updateBalance() async {
List<String> status = [null];
List<String> cardNumber = [null];
List<String> balance = [null];
List<String> bankName = [null];
List<String> beforeBalance = [null];
if (isSuccessInit) {
bool isSuccess = await UnikLibFlutter.updateBalance(
status,
cardNumber,
balance,
bankName,
beforeBalance,
"085735442829",
"developer@mdd.co.id",
callbackState: (String stateOperation) =>
(stateOperation == UnikLibFlutter.WAITING_STATUS)
? print("state operation WAITING")
: print("state operation DONE"),
callbackTimeout: (bool isTimeout) => print("timeout $isTimeout"),
errorNfc: (bool value) => print("error nfc $value"));
print("isSuccess $isSuccess");
print("status update ${status[0]}");
_setStateDefault();
List<String> status = [''];
List<String> cardNumber = [''];
List<String> balance = [''];
List<String> bankName = [''];
List<String> beforeBalance = [''];
// if (isSuccessInit) {
bool isSuccess = await UnikLibFlutter.updateBalance(status, cardNumber,
balance, bankName, beforeBalance, "085735442829", "developer@mdd.co.id",
callbackState: (String stateOperation) =>
(stateOperation == UnikLibFlutter.WAITING_STATUS)
? UnikLibFlutter.setIosMessage(
"Mohon tunggu, jangan lepaskan kartu")
: print("state operation DONE"),
callbackTimeout: (bool isTimeout) => print("timeout $isTimeout"),
errorNfc: (bool value) => print("error nfc $value"));
print("isSuccess $isSuccess");
print("status update ${status[0]}");
print("cardNumber ${cardNumber[0]}");
this.setState(() {
_status = status[0];
});
_setStateCard(isSuccess, cardNumber[0], balance[0], bankName[0]);
this.setState(() {
_status = status[0];
});
if (isSuccess) {
UnikLibFlutter.stopReader(messageSuccess: "Update balance berhasil");
_setStateCard(true, cardNumber[0], balance[0], bankName[0]);
} else {
print("Terjadi kesalahan");
UnikLibFlutter.stopReader(messageError: "Update balance gagal");
_setStateCard(false, cardNumber[0], balance[0], bankName[0]);
// Navigator.of(context).pop();
}
// }
}
void _setStateCard(
bool isSuccess, String cardNumber, String balance, String bankName) {
if (isSuccess) {
this.setState(() {
_cardNumber = cardNumber ?? "0000000000000000";
_balance = balance ?? "0";
_bgCard =
(bankName == "BNI") ? "images/bni_bg.png" : "images/mandiri_bg.png";
_bankName = bankName;
});
} else {
print("Something went wrong");
this.setState(() {
_bgCard =
(bankName == "BNI") ? "images/bni_bg.png" : "images/mandiri_bg.png";
_bankName = bankName;
});
}
Navigator.pop(context);
this.setState(() {
_cardNumber = cardNumber;
_balance = balance;
_bgCard =
(bankName == "BNI") ? "images/bni_bg.png" : "images/mandiri_bg.png";
_bankName = bankName;
});
if (Platform.isAndroid) Navigator.pop(context);
}
void _setStateDefault() {
this.setState(() {
_cardNumber = "0000000000000000";
_balance = "0";
_bgCard = "images/mandiri_bg.png";
listHistory = null;
_status = "Unknown";
});
}
Widget listViewBuilder(List<dynamic> list) {
return Container(
height: 300,
child: ListView.builder(
itemBuilder: (context, index) {
return Column(
children: [
Text("amount : ${list[index]["amount"]}"),
Text("date : ${list[index]["date"]}"),
Text("type : ${list[index]["type"]}"),
SizedBox(
height: 10,
)
],
);
},
itemCount: list.length,
),
);
}
@override
......@@ -200,8 +246,7 @@ class _MyAppState extends State<NfcScan> {
(match) => "${match.group(0)} "),
style: TextStyle(
color: Colors.white,
fontSize: 18) ??
"0000000000000000"),
fontSize: 18)),
SizedBox(
height: 17,
),
......@@ -215,7 +260,7 @@ class _MyAppState extends State<NfcScan> {
Text(
NumberFormat.simpleCurrency(
locale: 'id_ID')
.format(int.parse(_balance) ?? "0"),
.format(int.parse(_balance)),
style: TextStyle(color: Colors.white)),
],
))
......@@ -233,7 +278,8 @@ class _MyAppState extends State<NfcScan> {
icon: Icon(Icons.update_rounded),
onPressed: () {
updateBalance();
_showBottomSheet(TapCard(), 0.50);
if (Platform.isAndroid)
_showBottomSheet(TapCard(), 0.50);
},
)),
SizedBox(
......@@ -243,24 +289,31 @@ class _MyAppState extends State<NfcScan> {
alignment: Alignment.center,
child: _isLoading
? CircularProgressIndicator()
: Text(_status ?? "Unknown"),
: Text(_status),
),
SizedBox(
height: 10,
),
(listHistory != null)
? listViewBuilder(listHistory!)
: SizedBox(
width: 1,
)
],
),
)),
floatingActionButton: FloatingActionButton(
onPressed: () {
if (isSuccessInit) {
getCardInfo();
_showBottomSheet(TapCard(), 0.50);
} else {
print("Init Failed");
}
onPressed: () async {
// if (isSuccessInit) {
getCardInfo();
if (Platform.isAndroid) _showBottomSheet(TapCard(), 0.50);
// } else {
// print("Init Failed");
// }
},
child: const Icon(Icons.cached),
backgroundColor: Colors.blue,
),
);
}
}
import 'package:flutter/material.dart';
import 'package:flutter_gifimage/flutter_gifimage.dart';
import 'package:flutter_gif/flutter_gif.dart';
class TapCard extends StatefulWidget {
@override
_TapCardState createState() => _TapCardState();
}
class _TapCardState extends State<TapCard> with TickerProviderStateMixin {
GifController controller;
class _TapCardState extends State<TapCard>{
@override
void initState() {
controller = GifController(vsync: this);
WidgetsBinding.instance.addPostFrameCallback((_) {
controller.repeat(min: 0, max: 10, period: Duration(seconds: 3));
});
super.initState();
}
@override
dispose() {
controller.dispose();
super.dispose();
}
......@@ -31,8 +24,7 @@ class _TapCardState extends State<TapCard> with TickerProviderStateMixin {
return Container(
padding: EdgeInsets.all(30),
child: Column(mainAxisAlignment: MainAxisAlignment.start, children: [
GifImage(
controller: controller,
Image(
image: AssetImage("images/gif_tap_card.gif"),
width: 280,
),
......
......@@ -18,7 +18,9 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev
version: 1.0.0+1
environment:
sdk: ">=2.7.0 <3.0.0"
sdk: ">=2.12.0 <3.0.0"
flutter: ">=1.20.0"
dependencies:
flutter:
......@@ -27,15 +29,22 @@ dependencies:
# The following adds the Cupertino Icons font to your application.
# Use with the CupertinoIcons class for iOS style icons.
cupertino_icons: ^1.0.2
flutter_nfc_kit: ^2.2.1
flutter_gifimage: ^1.0.1
intl: ^0.16.1
prepaid_lib_flutter:
cupertino_icons: ^1.0.6
intl: ^0.18.1
prepaid_lib_flutter_null_safety:
hosted:
name: prepaid_lib_flutter
url: http://202.158.132.228:4000
version: 0.0.6
name: prepaid_lib_flutter_null_safety
url: https://pub.dev
version: ^0.0.25-nullsafety
flutter_encrypt_lib:
hosted:
name: flutter_encrypt_lib
url: https://pub-dev.multidaya.id
version: 0.0.10
flutter_gif: ^0.0.4
dev_dependencies:
flutter_test:
......
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