Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in / Register
Toggle navigation
F
flutter_mdd_simulator
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Commits
Issue Boards
Open sidebar
open_share
flutter_mdd_simulator
Commits
5867701e
Commit
5867701e
authored
Oct 09, 2023
by
Gandha Ryanto
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Update to lib null safety
parent
58351685
Hide whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
180 additions
and
100 deletions
+180
-100
build.gradle
android/app/build.gradle
+5
-2
AndroidManifest.xml
android/app/src/debug/AndroidManifest.xml
+1
-2
AndroidManifest.xml
android/app/src/main/AndroidManifest.xml
+3
-2
network_security_config.xml
android/app/src/main/res/xml/network_security_config.xml
+6
-0
AndroidManifest.xml
android/app/src/profile/AndroidManifest.xml
+1
-2
build.gradle
android/build.gradle
+21
-3
gradle-wrapper.properties
android/gradle/wrapper/gradle-wrapper.properties
+1
-1
main.dart
lib/main.dart
+121
-68
TapCard.dart
lib/screen/TapCard.dart
+3
-11
pubspec.yaml
pubspec.yaml
+18
-9
No files found.
android/app/build.gradle
View file @
5867701e
...
...
@@ -26,7 +26,7 @@ apply plugin: 'kotlin-android'
apply
from:
"$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
android
{
compileSdkVersion
3
0
compileSdkVersion
3
3
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
3
0
targetSdkVersion
3
3
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"
}
android/app/src/debug/AndroidManifest.xml
View file @
5867701e
<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.
-->
...
...
android/app/src/main/AndroidManifest.xml
View file @
5867701e
<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"
...
...
android/app/src/main/res/xml/network_security_config.xml
0 → 100644
View file @
5867701e
<?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
android/app/src/profile/AndroidManifest.xml
View file @
5867701e
<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.
-->
...
...
android/build.gradle
View file @
5867701e
buildscript
{
ext
.
kotlin_version
=
'1.
3.5
0'
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
)
{
task
s
.
register
(
"clean"
,
Delete
)
{
delete
rootProject
.
buildDir
}
android/gradle/wrapper/gradle-wrapper.properties
View file @
5867701e
...
...
@@ -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
lib/main.dart
View file @
5867701e
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
(
"4
9df5f81d59fae23ec6f542372fc9497
"
/*"1234567abc"*/
,
1
);
"4
dd9063acfc04848b801288f23c6eeff
"
/*"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
,
),
);
}
}
lib/screen/TapCard.dart
View file @
5867701e
import
'package:flutter/material.dart'
;
import
'package:flutter_gif
image/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
,
),
...
...
pubspec.yaml
View file @
5867701e
...
...
@@ -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
:
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment