Fakultas Ilmu Komputer UI

Commit ec765b0f authored by wibias fuad's avatar wibias fuad
Browse files

Merge branch '14-section-1-biodata' into 'staging'

Resolve "Section 1: Biodata"

See merge request !60
parents 91daa656 08566918
Pipeline #82905 passed with stages
in 7 minutes and 10 seconds
This diff is collapsed.
This diff is collapsed.
2.0.1
\ No newline at end of file
2.0.3
\ No newline at end of file
# This is a generated file; do not edit or check into version control.
flutter_keyboard_visibility=/Users/ferdisungkar/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_keyboard_visibility-5.0.0/
flutter_keyboard_visibility_web=/Users/ferdisungkar/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_keyboard_visibility_web-2.0.0/
flutter_plugin_android_lifecycle=/Users/ferdisungkar/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_plugin_android_lifecycle-2.0.1/
flutter_secure_storage=/Users/ferdisungkar/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_secure_storage-3.3.5/
image_picker=/Users/ferdisungkar/flutter/.pub-cache/hosted/pub.dartlang.org/image_picker-0.7.4/
image_picker_for_web=/Users/ferdisungkar/flutter/.pub-cache/hosted/pub.dartlang.org/image_picker_for_web-2.0.0/
path_provider=/Users/ferdisungkar/flutter/.pub-cache/hosted/pub.dartlang.org/path_provider-2.0.1/
path_provider_linux=/Users/ferdisungkar/flutter/.pub-cache/hosted/pub.dartlang.org/path_provider_linux-2.0.0/
path_provider_macos=/Users/ferdisungkar/flutter/.pub-cache/hosted/pub.dartlang.org/path_provider_macos-2.0.0/
path_provider_windows=/Users/ferdisungkar/flutter/.pub-cache/hosted/pub.dartlang.org/path_provider_windows-2.0.0/
flutter_keyboard_visibility=C:\\flutter\\flutter\\.pub-cache\\hosted\\pub.dartlang.org\\flutter_keyboard_visibility-5.0.0\\
flutter_keyboard_visibility_web=C:\\flutter\\flutter\\.pub-cache\\hosted\\pub.dartlang.org\\flutter_keyboard_visibility_web-2.0.0\\
flutter_plugin_android_lifecycle=C:\\flutter\\flutter\\.pub-cache\\hosted\\pub.dartlang.org\\flutter_plugin_android_lifecycle-2.0.1\\
flutter_secure_storage=C:\\flutter\\flutter\\.pub-cache\\hosted\\pub.dartlang.org\\flutter_secure_storage-3.3.5\\
image_picker=C:\\flutter\\flutter\\.pub-cache\\hosted\\pub.dartlang.org\\image_picker-0.7.4\\
image_picker_for_web=C:\\flutter\\flutter\\.pub-cache\\hosted\\pub.dartlang.org\\image_picker_for_web-2.0.0\\
path_provider=C:\\flutter\\flutter\\.pub-cache\\hosted\\pub.dartlang.org\\path_provider-2.0.1\\
path_provider_linux=C:\\flutter\\flutter\\.pub-cache\\hosted\\pub.dartlang.org\\path_provider_linux-2.0.0\\
path_provider_macos=C:\\flutter\\flutter\\.pub-cache\\hosted\\pub.dartlang.org\\path_provider_macos-2.0.0\\
path_provider_windows=C:\\flutter\\flutter\\.pub-cache\\hosted\\pub.dartlang.org\\path_provider_windows-2.0.0\\
{"info":"This is a generated file; do not edit or check into version control.","plugins":{"ios":[{"name":"flutter_keyboard_visibility","path":"/Users/ferdisungkar/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_keyboard_visibility-5.0.0/","dependencies":[]},{"name":"flutter_secure_storage","path":"/Users/ferdisungkar/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_secure_storage-3.3.5/","dependencies":[]},{"name":"image_picker","path":"/Users/ferdisungkar/flutter/.pub-cache/hosted/pub.dartlang.org/image_picker-0.7.4/","dependencies":[]},{"name":"path_provider","path":"/Users/ferdisungkar/flutter/.pub-cache/hosted/pub.dartlang.org/path_provider-2.0.1/","dependencies":[]}],"android":[{"name":"flutter_keyboard_visibility","path":"/Users/ferdisungkar/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_keyboard_visibility-5.0.0/","dependencies":[]},{"name":"flutter_plugin_android_lifecycle","path":"/Users/ferdisungkar/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_plugin_android_lifecycle-2.0.1/","dependencies":[]},{"name":"flutter_secure_storage","path":"/Users/ferdisungkar/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_secure_storage-3.3.5/","dependencies":[]},{"name":"image_picker","path":"/Users/ferdisungkar/flutter/.pub-cache/hosted/pub.dartlang.org/image_picker-0.7.4/","dependencies":["flutter_plugin_android_lifecycle"]},{"name":"path_provider","path":"/Users/ferdisungkar/flutter/.pub-cache/hosted/pub.dartlang.org/path_provider-2.0.1/","dependencies":[]}],"macos":[{"name":"path_provider_macos","path":"/Users/ferdisungkar/flutter/.pub-cache/hosted/pub.dartlang.org/path_provider_macos-2.0.0/","dependencies":[]}],"linux":[{"name":"path_provider_linux","path":"/Users/ferdisungkar/flutter/.pub-cache/hosted/pub.dartlang.org/path_provider_linux-2.0.0/","dependencies":[]}],"windows":[{"name":"path_provider_windows","path":"/Users/ferdisungkar/flutter/.pub-cache/hosted/pub.dartlang.org/path_provider_windows-2.0.0/","dependencies":[]}],"web":[{"name":"flutter_keyboard_visibility_web","path":"/Users/ferdisungkar/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_keyboard_visibility_web-2.0.0/","dependencies":[]},{"name":"image_picker_for_web","path":"/Users/ferdisungkar/flutter/.pub-cache/hosted/pub.dartlang.org/image_picker_for_web-2.0.0/","dependencies":[]}]},"dependencyGraph":[{"name":"flutter_keyboard_visibility","dependencies":["flutter_keyboard_visibility_web"]},{"name":"flutter_keyboard_visibility_web","dependencies":[]},{"name":"flutter_plugin_android_lifecycle","dependencies":[]},{"name":"flutter_secure_storage","dependencies":[]},{"name":"image_picker","dependencies":["flutter_plugin_android_lifecycle","image_picker_for_web"]},{"name":"image_picker_for_web","dependencies":[]},{"name":"path_provider","dependencies":["path_provider_macos","path_provider_linux","path_provider_windows"]},{"name":"path_provider_linux","dependencies":[]},{"name":"path_provider_macos","dependencies":[]},{"name":"path_provider_windows","dependencies":[]}],"date_created":"2021-06-09 19:06:40.547699","version":"2.0.1"}
\ No newline at end of file
{"info":"This is a generated file; do not edit or check into version control.","plugins":{"ios":[{"name":"flutter_keyboard_visibility","path":"C:\\\\flutter\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\flutter_keyboard_visibility-5.0.0\\\\","dependencies":[]},{"name":"flutter_secure_storage","path":"C:\\\\flutter\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\flutter_secure_storage-3.3.5\\\\","dependencies":[]},{"name":"image_picker","path":"C:\\\\flutter\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\image_picker-0.7.4\\\\","dependencies":[]},{"name":"path_provider","path":"C:\\\\flutter\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\path_provider-2.0.1\\\\","dependencies":[]}],"android":[{"name":"flutter_keyboard_visibility","path":"C:\\\\flutter\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\flutter_keyboard_visibility-5.0.0\\\\","dependencies":[]},{"name":"flutter_plugin_android_lifecycle","path":"C:\\\\flutter\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\flutter_plugin_android_lifecycle-2.0.1\\\\","dependencies":[]},{"name":"flutter_secure_storage","path":"C:\\\\flutter\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\flutter_secure_storage-3.3.5\\\\","dependencies":[]},{"name":"image_picker","path":"C:\\\\flutter\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\image_picker-0.7.4\\\\","dependencies":["flutter_plugin_android_lifecycle"]},{"name":"path_provider","path":"C:\\\\flutter\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\path_provider-2.0.1\\\\","dependencies":[]}],"macos":[{"name":"path_provider_macos","path":"C:\\\\flutter\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\path_provider_macos-2.0.0\\\\","dependencies":[]}],"linux":[{"name":"path_provider_linux","path":"C:\\\\flutter\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\path_provider_linux-2.0.0\\\\","dependencies":[]}],"windows":[{"name":"path_provider_windows","path":"C:\\\\flutter\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\path_provider_windows-2.0.0\\\\","dependencies":[]}],"web":[{"name":"flutter_keyboard_visibility_web","path":"C:\\\\flutter\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\flutter_keyboard_visibility_web-2.0.0\\\\","dependencies":[]},{"name":"image_picker_for_web","path":"C:\\\\flutter\\\\flutter\\\\.pub-cache\\\\hosted\\\\pub.dartlang.org\\\\image_picker_for_web-2.0.0\\\\","dependencies":[]}]},"dependencyGraph":[{"name":"flutter_keyboard_visibility","dependencies":["flutter_keyboard_visibility_web"]},{"name":"flutter_keyboard_visibility_web","dependencies":[]},{"name":"flutter_plugin_android_lifecycle","dependencies":[]},{"name":"flutter_secure_storage","dependencies":[]},{"name":"image_picker","dependencies":["flutter_plugin_android_lifecycle","image_picker_for_web"]},{"name":"image_picker_for_web","dependencies":[]},{"name":"path_provider","dependencies":["path_provider_macos","path_provider_linux","path_provider_windows"]},{"name":"path_provider_linux","dependencies":[]},{"name":"path_provider_macos","dependencies":[]},{"name":"path_provider_windows","dependencies":[]}],"date_created":"2021-06-09 20:03:50.030829","version":"2.0.3"}
\ No newline at end of file
This diff is collapsed.
sdk.dir=/Users/ferdisungkar/Library/Android/sdk
flutter.sdk=/Users/ferdisungkar/flutter
sdk.dir=C:\\Users\\Acer\\AppData\\Local\\Android\\sdk
flutter.sdk=C:\\flutter\\flutter
=======
flutter.buildMode=debug
flutter.versionName=1.0.0
......
// This is a generated file; do not edit or check into version control.
FLUTTER_ROOT=/Users/ferdisungkar/flutter
FLUTTER_APPLICATION_PATH=/Users/ferdisungkar/Desktop/Files/Universitas-Indonesia/Semester-6/PPL/Project/ppl2021-d-slhape
FLUTTER_TARGET=/Users/ferdisungkar/Desktop/Files/Universitas-Indonesia/Semester-6/PPL/Project/ppl2021-d-slhape/lib/main.dart
FLUTTER_ROOT=C:\flutter\flutter
FLUTTER_APPLICATION_PATH=E:\Fasilkom\Semester 6\Proyek Perangkat Lunak\biodata2\ppl2021-d-slhape
FLUTTER_TARGET=lib\main.dart
FLUTTER_BUILD_DIR=build
SYMROOT=${SOURCE_ROOT}/../build/ios
SYMROOT=${SOURCE_ROOT}/../build\ios
FLUTTER_BUILD_NAME=1.0.0
FLUTTER_BUILD_NUMBER=1
DART_DEFINES=flutter.inspector.structuredErrors%3Dtrue
DART_OBFUSCATION=false
TRACK_WIDGET_CREATION=true
TRACK_WIDGET_CREATION=false
TREE_SHAKE_ICONS=false
PACKAGE_CONFIG=/Users/ferdisungkar/Desktop/Files/Universitas-Indonesia/Semester-6/PPL/Project/ppl2021-d-slhape/.dart_tool/package_config.json
PACKAGE_CONFIG=.packages
#!/bin/sh
# This is a generated file; do not edit or check into version control.
export "FLUTTER_ROOT=/Users/ferdisungkar/flutter"
export "FLUTTER_APPLICATION_PATH=/Users/ferdisungkar/Desktop/Files/Universitas-Indonesia/Semester-6/PPL/Project/ppl2021-d-slhape"
export "FLUTTER_TARGET=/Users/ferdisungkar/Desktop/Files/Universitas-Indonesia/Semester-6/PPL/Project/ppl2021-d-slhape/lib/main.dart"
export "FLUTTER_ROOT=C:\flutter\flutter"
export "FLUTTER_APPLICATION_PATH=E:\Fasilkom\Semester 6\Proyek Perangkat Lunak\biodata2\ppl2021-d-slhape"
export "FLUTTER_TARGET=lib\main.dart"
export "FLUTTER_BUILD_DIR=build"
export "SYMROOT=${SOURCE_ROOT}/../build/ios"
export "SYMROOT=${SOURCE_ROOT}/../build\ios"
export "FLUTTER_BUILD_NAME=1.0.0"
export "FLUTTER_BUILD_NUMBER=1"
export "DART_DEFINES=flutter.inspector.structuredErrors%3Dtrue"
export "DART_OBFUSCATION=false"
export "TRACK_WIDGET_CREATION=true"
export "TRACK_WIDGET_CREATION=false"
export "TREE_SHAKE_ICONS=false"
export "PACKAGE_CONFIG=/Users/ferdisungkar/Desktop/Files/Universitas-Indonesia/Semester-6/PPL/Project/ppl2021-d-slhape/.dart_tool/package_config.json"
export "PACKAGE_CONFIG=.packages"
......@@ -15,6 +15,7 @@ class Api {
var headers = {'Content-type': 'application/json'};
var apiResult = await client.post(apiURL, headers: headers, body: body);
if (apiResult.statusCode == 200) {
print("login masuk");
var jsonObject = json.decode(apiResult.body);
var jsonData = (jsonObject as Map<String, dynamic>)['data'];
var token = jsonData['token'];
......@@ -46,7 +47,9 @@ class Api {
Uri.parse('https://canary.fundex.id/api/v1.1/auth/otp-login-request');
var body = jsonEncode({'token': token});
var headers = {'Content-type': 'application/json'};
await client.post(apiURL, headers: headers, body: body);
var apiResult = await client.post(apiURL, headers: headers, body: body);
print(apiResult.statusCode);
print(apiResult.body);
}
Future otpInput(String token, String otp) async {
......@@ -93,6 +96,10 @@ class Api {
{'name': name, 'address_id': addressId, 'phone': phone}));
if (apiResult.statusCode == 200) {
print('Patch member berhasil');
print("nama : $name");
print("addressId : $addressId");
print("phone : $phone");
print(apiResult.statusCode);
print(apiResult.body);
} else {
......@@ -259,6 +266,8 @@ class Api {
var jsonObject = json.decode(apiResult.body);
var jsonData = (jsonObject as Map<String, dynamic>)['data'];
var jsonMember = (jsonData as Map<String, dynamic>)['member'];
print(apiResult.reasonPhrase);
print(apiResult.request);
return jsonMember;
} else {
throw Exception('Get Failed');
......@@ -422,12 +431,6 @@ class Api {
print('kyc_progress berhasil');
print(apiResult.statusCode);
print(apiResult.body);
// var jsonObject = json.decode(apiResult.body);
// var jsonData = (jsonObject as Map<String, dynamic>)['data'];
// var idMemberAttributeGender = jsonData['id'];
// await secureStorage.writeSecureData(
// 'idMemberAttributeGender', idMemberAttributeGender.toString());
// print(await secureStorage.readSecureData('idMemberAttributeGender'));
} else {
print('kyc_progress ' + apiResult.statusCode.toString());
print(apiResult.reasonPhrase);
......
......@@ -2,6 +2,7 @@ import 'package:flutter/material.dart';
import 'package:fundex_app/api/api.dart';
import 'package:fundex_app/assets/colors.dart';
import 'package:flutter_typeahead/flutter_typeahead.dart';
import 'package:fundex_app/pages/business/homekycUnregsitered.dart';
import 'package:fundex_app/pages/kyc/alamat_body.dart';
import 'package:fundex_app/pages/kyc/design.dart';
import 'package:intl/intl.dart';
......@@ -18,10 +19,9 @@ class ValidasiTanggal {
}
}
String kota;
class ValidasiTempat {
static String validate(String value) {
return value.isEmpty ? 'Tempat lahir harus di isi' : kota = value;
return value.isEmpty ? 'Tempat lahir harus di isi' : null;
}
}
......@@ -58,6 +58,7 @@ class BiodataBody extends StatefulWidget {
class _BiodataBodyState extends State<BiodataBody> {
// ignore: unused_field
String _namaLengkap;
String kota;
// ignore: unused_field
String _email;
// ignore: unused_field
......@@ -68,16 +69,27 @@ class _BiodataBodyState extends State<BiodataBody> {
String _selectedCity;
final GlobalKey<FormState> _formkey = GlobalKey<FormState>();
final TextEditingController _typeAheadController = TextEditingController();
TextEditingController _typeAheadController = TextEditingController();
TextEditingController _textEditingController = TextEditingController();
TextEditingController _formNamaLengkap = TextEditingController();
TextEditingController _formPhone = TextEditingController(text: "+62-");
// TextEditingController _textController = TextEditingController();
int id;
String email;
String name;
int addressId;
String phone;
List<String> city;
double opacityRadio = 0;
int idGender;
String valGender;
int idbirthplace;
int idbirthdate;
int idKYC;
bool alreadyFilledSection = false;
DateTime date;
String strDate;
double opacityRadio = 0;
void initState() {
super.initState();
selectedRadio = 0;
......@@ -106,20 +118,67 @@ class _BiodataBodyState extends State<BiodataBody> {
Future init() async {
final Map<String, dynamic> json = await Api().getMember();
final List<String> jsonCity = await Api().getRefCity();
final List<dynamic> jsonMemberAttribute = await Api().getMemberAttribute();
for (var i = 0; i < jsonMemberAttribute.length; i++) {
if (jsonMemberAttribute[i]['attribute_name'] == 'gender') {
idGender = jsonMemberAttribute[i]['id'];
valGender = jsonMemberAttribute[i]['attribute_value'];
if (valGender == "male") {
print("already filled this section before. Male");
validateRadioButton(1);
} else {
validateRadioButton(2);
}
} else if (jsonMemberAttribute[i]['attribute_name'] == 'birthdate') {
idbirthdate = jsonMemberAttribute[i]['id'];
strDate = jsonMemberAttribute[i]['attribute_value'];
print("already filled this section before. birthdate = $strDate");
} else if (jsonMemberAttribute[i]['attribute_name'] == 'birthplace') {
idbirthplace = jsonMemberAttribute[i]['id'];
kota = jsonMemberAttribute[i]['attribute_value'];
print("already filled this section before. birthplace = $kota");
} else if (jsonMemberAttribute[i]['attribute_name'] == 'kyc_progress') {
var map = (jsonMemberAttribute[i] as Map<String, dynamic>);
idKYC = map['id'];
var val = (map)['attribute_value'];
var str = val.substring(1, val.length - 1);
var step1 = str.split(",")[0];
var value = step1.substring(8);
if (value == "true") {
setState(() {
alreadyFilledSection = true;
});
}
}
}
print("json : $json");
id = json['id'];
email = json['email'];
addressId = json['address_id'];
name = json['name'];
var name = json['name'];
phone = json['phone'];
city = jsonCity;
setState(() {
this.id = id;
this.email = email;
this.name = name;
this._namaLengkap = name;
this.addressId = addressId;
this.phone = phone;
this.city = city;
this.idGender = idGender;
this.valGender = valGender;
this.idbirthdate = idbirthdate;
this.idbirthplace = idbirthplace;
this.strDate = strDate;
this.kota = kota;
if (alreadyFilledSection) {
_typeAheadController.text = kota;
_textEditingController.text = strDate;
_formPhone.text = phone;
_formNamaLengkap.text = name;
}
});
}
......@@ -136,9 +195,6 @@ class _BiodataBodyState extends State<BiodataBody> {
});
}
DateTime date;
String strDate;
Future<void> _selectDate(BuildContext context) async {
final now = DateTime.now();
final DateTime picked = await showDatePicker(
......@@ -174,7 +230,9 @@ class _BiodataBodyState extends State<BiodataBody> {
color: primary,
),
onPressed: () {
Navigator.pop(context);
Navigator.push(context, MaterialPageRoute(builder: (context) {
return HomeKYCUnregistered();
}));
},
),
Text(
......@@ -420,12 +478,14 @@ class _BiodataBodyState extends State<BiodataBody> {
),
Container(
width: 343,
// height: 40,
margin:
EdgeInsets.fromLTRB(0, 4, 0, 0),
child: TextFormField(
key: Key('nama'),
controller: _formNamaLengkap,
keyboardType: TextInputType.text,
// controller: _textController,
decoration: formInputDecoration(),
validator: ValidasiNama.validate,
onChanged: (String value) {
......@@ -526,6 +586,7 @@ class _BiodataBodyState extends State<BiodataBody> {
width: 343,
child: TypeAheadFormField(
key: Key('typeahead'),
textFieldConfiguration:
TextFieldConfiguration(
controller: this._typeAheadController,
......@@ -546,11 +607,11 @@ class _BiodataBodyState extends State<BiodataBody> {
onSuggestionSelected: (suggestion) {
this._typeAheadController.text =
suggestion;
this.kota = suggestion;
},
// ignore: missing_return
validator: ValidasiTempat.validate,
onSaved: (value) =>
this._selectedCity = value,
// onSaved: (value) => this.kota = value,
),
),
......@@ -667,11 +728,12 @@ class _BiodataBodyState extends State<BiodataBody> {
EdgeInsets.fromLTRB(0, 4, 0, 0),
child: TextFormField(
key: Key('nomor'),
controller: _formPhone,
keyboardType: TextInputType.phone,
decoration: formInputDecoration(),
validator: ValidasiNomor.validate,
onSaved: (String nomor) {
_nomorHandphone = nomor;
onChanged: (String nomor) {
phone = nomor;
},
),
),
......@@ -706,17 +768,27 @@ class _BiodataBodyState extends State<BiodataBody> {
return;
}
Api().patchMember(_namaLengkap,
addressId, _nomorHandphone);
Api().patchMember(
_namaLengkap, addressId, phone);
// print(_namaLengkap + addressId.toString() +_nomorHandphone);
Api().gender(jenisKelamin);
// print(jenisKelamin);
Api().birthplace(kota);
// print(kota);
Api().birthdate(strDate);
// print(date);
// Api().kyc_progress();
if (alreadyFilledSection == true) {
print(
"button Selanjutnya masuk PUTMEMBER");
Api().putMemberAttribute(
idGender, 'gender', jenisKelamin);
Api().putMemberAttribute(idbirthdate,
'birthdate', strDate);
Api().putMemberAttribute(
idbirthplace, 'birthplace', kota);
} else {
print(
"button Selanjutnya masuk POST");
Api().gender(jenisKelamin);
Api().birthplace(kota);
Api().birthdate(strDate);
Api().kyc_progress(
true, false, false, false, false);
}
Navigator.push(context,
MaterialPageRoute(
......
......@@ -103,7 +103,7 @@ void main() {
});
test('Field Tempat Lahir diisi', () {
var tes = ValidasiTempat.validate('DKI Jakarta');
expect(tes, 'DKI Jakarta');
expect(tes, null);
});
testWidgets('DatePicker berhasil', (WidgetTester tester) async {
......
Supports Markdown
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