Initial commit: Penyerahan final Source code Tugas Akhir

This commit is contained in:
ferdiakhh
2025-07-10 19:15:14 +07:00
commit e1f2206b8a
687 changed files with 80132 additions and 0 deletions

View File

@ -0,0 +1,317 @@
import 'package:flutter/material.dart';
import 'package:initial_folder/size_config.dart';
import 'package:initial_folder/theme.dart';
import 'package:styled_text/styled_text.dart';
class ATMBNI extends StatelessWidget {
final TextStyle baris = thirdTextStyle.copyWith(
fontWeight: reguler,
fontSize: getProportionateScreenWidth(14),
letterSpacing: 0.5,
);
@override
Widget build(BuildContext context) {
return Padding(
padding:
EdgeInsets.symmetric(horizontal: getProportionateScreenWidth(12)),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
StyledText(
// text: '1. Open the <bold>BNI Mobile Banking</bold> app and login',
text: '1. Masukkan kartu anda',
style: baris,
tags: {
'bold': StyledTextTag(style: TextStyle(fontWeight: bold)),
},
),
Divider(color: Color(0xff2D2D2D), thickness: 0.5, height: 35),
StyledText(
// text: '2. Choose menu <bold>Transfer</bold>',
text: '2. Pilih Bahasa',
style: baris,
tags: {
'bold': StyledTextTag(style: TextStyle(fontWeight: bold)),
},
),
Divider(color: Color(0xff2D2D2D), thickness: 0.5, height: 35),
StyledText(
// text: '3. Choose menu <bold>Virtual Account Billing</bold>',
text: '3. Masukkan <bold>PIN ATM</bold> Anda',
style: baris,
tags: {
'bold': StyledTextTag(style: TextStyle(fontWeight: bold)),
},
),
Divider(color: Color(0xff2D2D2D), thickness: 0.5, height: 35),
StyledText(
// text: '4. Choose the bank account you want to use',
text: "4. Pilih \"Menu Lainnya\"",
style: baris,
tags: {
'bold': StyledTextTag(style: TextStyle(fontWeight: bold)),
},
),
Divider(color: Color(0xff2D2D2D), thickness: 0.5, height: 35),
StyledText(
// text: '5. Enter the 16 digits <bold>virtual account number</bold>',
text: "5. Pilih \"Transfer\"",
style: baris,
tags: {
'bold': StyledTextTag(style: TextStyle(fontWeight: bold)),
},
),
Divider(color: Color(0xff2D2D2D), thickness: 0.5, height: 35),
StyledText(
text:
// '6. The billing information will appear on the payment validation page',
'6. Pilih Jenis rekening yang akan Anda gunakan',
style: baris,
tags: {
'bold': StyledTextTag(style: TextStyle(fontWeight: bold)),
},
),
Divider(color: Color(0xff2D2D2D), thickness: 0.5, height: 35),
StyledText(
text:
// '7. If the information is correct, enter your password to proceed the payment',
'7. Pilih \"Virtual Account Billing\"',
style: baris,
tags: {
'bold': StyledTextTag(style: TextStyle(fontWeight: bold)),
},
),
Divider(color: Color(0xff2D2D2D), thickness: 0.5, height: 35),
StyledText(
// text: '8. Your transaction will be processed',
text: '8. Masukkan nomor Virtual Account Anda',
style: baris,
tags: {
'bold': StyledTextTag(style: TextStyle(fontWeight: bold)),
},
),
SizedBox(height: getProportionateScreenHeight(10)),
],
),
);
}
}
class ATMBCA extends StatelessWidget {
final TextStyle baris = thirdTextStyle.copyWith(
fontWeight: reguler,
fontSize: getProportionateScreenWidth(14),
letterSpacing: 0.5,
);
@override
Widget build(BuildContext context) {
return Padding(
padding:
EdgeInsets.symmetric(horizontal: getProportionateScreenWidth(12)),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
StyledText(
// text: '1. Open the <bold>BNI Mobile Banking</bold> app and login',
text: '1. Masukkan kartu anda ATM dan PIN BCA anda',
style: baris,
tags: {
'bold': StyledTextTag(style: TextStyle(fontWeight: bold)),
},
),
Divider(color: Color(0xff2D2D2D), thickness: 0.5, height: 35),
StyledText(
// text: '2. Choose menu <bold>Transfer</bold>',
text: "2. Pada menu utama, pilih menu \"Transaksi lainnya\" ",
style: baris,
tags: {
'bold': StyledTextTag(style: TextStyle(fontWeight: bold)),
},
),
Divider(color: Color(0xff2D2D2D), thickness: 0.5, height: 35),
StyledText(
// text: '3. Choose menu <bold>Virtual Account Billing</bold>',
text:
"3. Pilih menu \"Transfer\" dan kemudian pilih \"BCA Virtual Account\" ",
style: baris,
tags: {
'bold': StyledTextTag(style: TextStyle(fontWeight: bold)),
},
),
Divider(color: Color(0xff2D2D2D), thickness: 0.5, height: 35),
StyledText(
// text: '4. Choose the bank account you want to use',
text: "4. Masukkan no. BCA Virtual Account & klik \"Lanjutkan\" ",
style: baris,
tags: {
'bold': StyledTextTag(style: TextStyle(fontWeight: bold)),
},
),
Divider(color: Color(0xff2D2D2D), thickness: 0.5, height: 35),
StyledText(
// text: '5. Enter the 16 digits <bold>virtual account number</bold>',
text: "5. Periksa kembali rincian pembayaran anda, lalu pilih Ya",
style: baris,
tags: {
'bold': StyledTextTag(style: TextStyle(fontWeight: bold)),
},
),
SizedBox(height: getProportionateScreenHeight(10)),
],
),
);
}
}
class AtmMandiri extends StatelessWidget {
final TextStyle baris = thirdTextStyle.copyWith(
fontWeight: reguler,
fontSize: getProportionateScreenWidth(14),
letterSpacing: 0.5,
);
@override
Widget build(BuildContext context) {
return Padding(
padding:
EdgeInsets.symmetric(horizontal: getProportionateScreenWidth(12)),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
StyledText(
// text: '1. Open the <bold>BNI Mobile Banking</bold> app and login',
text: '1. Masukkan kartu anda ATM dan PIN anda',
style: baris,
tags: {
'bold': StyledTextTag(style: TextStyle(fontWeight: bold)),
},
),
Divider(color: Color(0xff2D2D2D), thickness: 0.5, height: 35),
StyledText(
// text: '2. Choose menu <bold>Transfer</bold>',
text: "2. Pada menu utama, pilih menu \"Bayar/Beli\" ",
style: baris,
tags: {
'bold': StyledTextTag(style: TextStyle(fontWeight: bold)),
},
),
Divider(color: Color(0xff2D2D2D), thickness: 0.5, height: 35),
StyledText(
// text: '3. Choose menu <bold>Virtual Account Billing</bold>',
text:
"3. Pilih menu \"Multi Payment\" (jika di layar belum tersedia tekan menu \"Lainnya\" dan pilih \"Multi Payment\") ",
style: baris,
tags: {
'bold': StyledTextTag(style: TextStyle(fontWeight: bold)),
},
),
Divider(color: Color(0xff2D2D2D), thickness: 0.5, height: 35),
StyledText(
// text: '4. Choose the bank account you want to use',
text:
"4. Masukkan nomor Biller Code pada kode perusahaan & klik \"Benar\" ",
style: baris,
tags: {
'bold': StyledTextTag(style: TextStyle(fontWeight: bold)),
},
),
Divider(color: Color(0xff2D2D2D), thickness: 0.5, height: 35),
StyledText(
// text: '5. Enter the 16 digits <bold>virtual account number</bold>',
text:
"5. Masukkan kode pembayaran (kode pembayaran Mandiri billpayment anda)",
style: baris,
tags: {
'bold': StyledTextTag(style: TextStyle(fontWeight: bold)),
},
),
StyledText(
// text: '5. Enter the 16 digits <bold>virtual account number</bold>',
text:
"6. Periksa kembali data transaksi anda dan selesaikan proses pembayaran.",
style: baris,
tags: {
'bold': StyledTextTag(style: TextStyle(fontWeight: bold)),
},
),
SizedBox(height: getProportionateScreenHeight(10)),
],
),
);
}
}
class AtmPermata extends StatelessWidget {
final TextStyle baris = thirdTextStyle.copyWith(
fontWeight: reguler,
fontSize: getProportionateScreenWidth(14),
letterSpacing: 0.5,
);
@override
Widget build(BuildContext context) {
return Padding(
padding:
EdgeInsets.symmetric(horizontal: getProportionateScreenWidth(12)),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
StyledText(
// text: '1. Open the <bold>BNI Mobile Banking</bold> app and login',
text: '1. Masukkan kartu ATM dan PIN anda',
style: baris,
tags: {
'bold': StyledTextTag(style: TextStyle(fontWeight: bold)),
},
),
Divider(color: Color(0xff2D2D2D), thickness: 0.5, height: 35),
StyledText(
// text: '2. Choose menu <bold>Transfer</bold>',
text: "2. Pada menu \"Transaksi Lainnya\" ",
style: baris,
tags: {
'bold': StyledTextTag(style: TextStyle(fontWeight: bold)),
},
),
Divider(color: Color(0xff2D2D2D), thickness: 0.5, height: 35),
StyledText(
// text: '3. Choose menu <bold>Virtual Account Billing</bold>',
text:
"3. Pilih menu \"Pembayaran\" kemudian Pilih \"Menu Pembayaran Lainnya\" ",
style: baris,
tags: {
'bold': StyledTextTag(style: TextStyle(fontWeight: bold)),
},
),
Divider(color: Color(0xff2D2D2D), thickness: 0.5, height: 35),
StyledText(
// text: '4. Choose the bank account you want to use',
text: "4. Pilih menu \"VIRTUAL ACCOUNT\" ",
style: baris,
tags: {
'bold': StyledTextTag(style: TextStyle(fontWeight: bold)),
},
),
Divider(color: Color(0xff2D2D2D), thickness: 0.5, height: 35),
StyledText(
// text: '5. Enter the 16 digits <bold>virtual account number</bold>',
text: "5. Masukkan nomor \"VIRTUAL ACCOUNT\", dan tekan \"BENAR\" ",
style: baris,
tags: {
'bold': StyledTextTag(style: TextStyle(fontWeight: bold)),
},
),
Divider(color: Color(0xff2D2D2D), thickness: 0.5, height: 35),
StyledText(
// text: '5. Enter the 16 digits <bold>virtual account number</bold>',
text:
"6. Pilih rekening yang menjadi sumber dana yang akan didebet, lalu tekan YA untuk konfirmasi transaksi",
style: baris,
tags: {
'bold': StyledTextTag(style: TextStyle(fontWeight: bold)),
},
),
SizedBox(height: getProportionateScreenHeight(10)),
],
),
);
}
}

View File

@ -0,0 +1,61 @@
import 'package:flutter/material.dart';
import 'package:initial_folder/size_config.dart';
import 'package:initial_folder/theme.dart';
import 'package:styled_text/styled_text.dart';
class BarBatasBayar extends StatelessWidget {
String storeName;
BarBatasBayar(this.storeName);
final TextStyle baris = thirdTextStyle.copyWith(
fontFamily: "Poppins",
fontSize: getProportionateScreenWidth(13),
);
@override
Widget build(BuildContext context) {
String store = storeName == 'indomaret' ? 'Indomaret' : 'Alfamart';
return Padding(
padding: EdgeInsets.symmetric(
horizontal: getProportionateScreenWidth(12),
vertical: getProportionateScreenHeight(12),
),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
StyledText(
text: '1. Datang ke<bold> $store</bold>',
style: baris,
tags: {
'bold': StyledTextTag(style: TextStyle(fontWeight: bold)),
},
),
Divider(color: Color(0xff2D2D2D), thickness: 0.5, height: 35),
StyledText(
text: '2. Tunjukkan <bold>kode pembayaran</bold> ke kasir',
style: baris,
tags: {
'bold': StyledTextTag(style: TextStyle(fontWeight: bold)),
},
),
Divider(color: Color(0xff2D2D2D), thickness: 0.5, height: 35),
StyledText(
text:
'3. Bayar dengan uang tunai sesuai dengan total pembayaran (sudah termasuk biaya layanan)',
style: baris,
tags: {
'bold': StyledTextTag(style: TextStyle(fontWeight: bold)),
},
),
Divider(color: Color(0xff2D2D2D), thickness: 0.5, height: 35),
StyledText(
text: '4. Transaksi selesai, simpan bukti pembayaran Anda',
style: baris,
tags: {
'bold': StyledTextTag(style: TextStyle(fontWeight: bold)),
},
),
SizedBox(height: 4)
],
),
);
}
}

View File

@ -0,0 +1,263 @@
import 'package:flutter/material.dart';
import 'package:initial_folder/providers/order_provider.dart' as orderProvider;
import 'package:initial_folder/providers/payments_provider.dart';
import 'package:initial_folder/providers/user_info_provider.dart'
as userInfoProvider;
import 'package:initial_folder/size_config.dart';
import 'package:initial_folder/theme.dart';
import 'package:intl/intl.dart';
import 'package:provider/provider.dart';
class BottomSheetDetail extends StatelessWidget {
Map<String, String> paymentMethod = {
'echannel': 'Bank Transfer',
'bank_transfer': 'Bank Transfer',
'credit_card': 'Kartu Kredit',
'gopay': 'GoPay',
'cstore': 'Gerai'
};
Widget listCourse({String? title, String? instructor, String? price}) {
return Container(
padding: EdgeInsets.symmetric(vertical: 8),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Flexible(
flex: 7,
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
title!,
// "428 Menit Menjadi Pengusaha Sukses",
maxLines: 2,
overflow: TextOverflow.ellipsis,
style: primaryTextStyle.copyWith(
letterSpacing: 0.5,
fontWeight: reguler,
fontSize: getProportionateScreenWidth(11),
color: tenthColor,
),
),
SizedBox(height: 4),
Text(
'Oleh $instructor',
// 'Oleh Farid Subkhan',
style: primaryTextStyle.copyWith(
letterSpacing: 0.5,
fontWeight: reguler,
fontSize: getProportionateScreenWidth(9.5),
color: secondaryColor,
),
),
],
),
),
Flexible(
flex: 3,
child: Text(
'Rp. ${NumberFormat.currency(locale: 'id', symbol: '', decimalDigits: 0).format(double.parse(price!))}',
// 'Rp. ${NumberFormat.currency(locale: 'id', symbol: '', decimalDigits: 0).format(50000.0)}',
style: primaryTextStyle.copyWith(
letterSpacing: 0.5,
fontWeight: reguler,
fontSize: getProportionateScreenWidth(12),
color: tenthColor,
),
),
),
],
),
);
}
@override
Widget build(BuildContext context) {
var dataOrder =
Provider.of<PaymentsProvider>(context, listen: false).detailOrder;
var dataCourse =
Provider.of<orderProvider.OrderProvider>(context, listen: false).orders;
var dataUser =
Provider.of<userInfoProvider.UserInfoProvider>(context, listen: false)
.result;
return Container(
decoration: BoxDecoration(
// color: Colors.red,
borderRadius: BorderRadius.vertical(top: Radius.circular(20))),
foregroundDecoration: BoxDecoration(
// color: Colors.red,
borderRadius: BorderRadius.all(Radius.circular(20))),
child: ListView(
shrinkWrap: true,
physics: NeverScrollableScrollPhysics(),
children: [
Row(
children: [
IconButton(
onPressed: () {
Navigator.pop(context);
},
icon: Icon(Icons.keyboard_arrow_down)),
Text('Detail Pembayaran')
],
),
Container(
height: 6,
color: Color(0xff181818),
),
Container(
height: MediaQuery.of(context).size.height * 0.4,
child: ListView(
shrinkWrap: true,
children: [
Container(
padding: EdgeInsets.symmetric(horizontal: 15, vertical: 20),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text('Informasi Pembeli'),
Divider(),
Text(
'Order ID',
style: primaryTextStyle.copyWith(
fontSize: 10, color: Color(0xffbfbfbf)),
),
Text(
dataOrder[0].idOrder,
style: primaryTextStyle.copyWith(
fontSize: 12, color: Color(0xffF4f4f4)),
),
SizedBox(
height: 15,
),
Text(
'Nama Lengkap',
style: primaryTextStyle.copyWith(
fontSize: 10, color: Color(0xffbfbfbf)),
),
Text(
dataUser!.data[0].fullname!,
style: primaryTextStyle.copyWith(
fontSize: 12, color: Color(0xffF4f4f4)),
),
SizedBox(
height: 15,
),
Text(
'Email',
style: primaryTextStyle.copyWith(
fontSize: 10, color: Color(0xffbfbfbf)),
),
Text(
dataUser.data[0].email!,
style: primaryTextStyle.copyWith(
fontSize: 12, color: Color(0xffF4f4f4)),
),
],
),
),
Container(
height: 6,
color: Color(0xff181818),
),
Container(
padding: EdgeInsets.symmetric(horizontal: 15, vertical: 20),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text('Informasi Pembayaran'),
Divider(),
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text('Metode Pembayaran',
style: primaryTextStyle.copyWith(
fontSize: 12, color: Color(0xffbfbfbf))),
Text(paymentMethod[dataOrder[0].paymentType]!,
style: primaryTextStyle.copyWith(
fontSize: 12, color: Color(0xffF4f4f4))),
],
),
Divider(),
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text('Total Harga',
style: primaryTextStyle.copyWith(
fontSize: 10, color: Color(0xffbfbfbf))),
Text(
'Rp. ${NumberFormat.currency(locale: 'id', symbol: '', decimalDigits: 0).format(double.parse(dataOrder[0].totalPayment))}',
style: primaryTextStyle.copyWith(
fontSize: 12, color: Color(0xffF4f4f4))),
],
),
SizedBox(height: 15),
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text('Potongan Kupon',
style: primaryTextStyle.copyWith(
fontSize: 10, color: Color(0xffbfbfbf))),
Text('Rp. 0',
style: primaryTextStyle.copyWith(
fontSize: 12, color: Color(0xffF4f4f4))),
],
),
Divider(),
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text('Total Bayar',
style: primaryTextStyle.copyWith(
fontSize: 12, color: Color(0xffbfbfbf))),
Text(
'Rp. ${NumberFormat.currency(locale: 'id', symbol: '', decimalDigits: 0).format(double.parse(dataOrder[0].totalPayment))}',
style: primaryTextStyle.copyWith(
fontSize: 12, color: Color(0xffF4f4f4))),
],
),
],
),
),
Container(
height: 6,
color: Color(0xff181818),
),
Container(
padding: EdgeInsets.symmetric(horizontal: 15, vertical: 20),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text('Kursus Yang Dibeli'),
Divider(),
Column(
children: dataCourse.map((course) {
return listCourse(
title: course.title,
instructor: course.instructor,
price: course.discountPrice == "0"
? course.price
: course.discountPrice,
);
}).toList()),
// listCourse(),
// listCourse(),
// listCourse(),
// Text('Halo'),
// Text('Halo'),
// Text('Halo'),
// Text('Halo')
],
),
)
],
),
)
],
),
);
}
}

View File

@ -0,0 +1,262 @@
import 'package:flutter/material.dart';
import 'package:initial_folder/providers/order_provider.dart' as orderProvider;
import 'package:initial_folder/providers/payments_provider.dart';
import 'package:initial_folder/providers/total_price_provider.dart';
import 'package:initial_folder/providers/user_info_provider.dart'
as userInfoProvider;
import 'package:initial_folder/size_config.dart';
import 'package:initial_folder/theme.dart';
import 'package:intl/intl.dart';
import 'package:provider/provider.dart';
class BottomSheetHistory extends StatelessWidget {
Map<String, String> paymentMethod = {
'echannel': 'Bank Transfer',
'bank_transfer': 'Bank Transfer',
'credit_card': 'Kartu Kredit',
'gopay': 'GoPay',
'cstore': 'Gerai'
};
Widget listCourse({String? title, String? instructor, String? price}) {
return Container(
padding: EdgeInsets.symmetric(vertical: 8),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Flexible(
flex: 7,
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
title!,
// "428 Menit Menjadi Pengusaha Sukses",
maxLines: 2,
overflow: TextOverflow.ellipsis,
style: primaryTextStyle.copyWith(
letterSpacing: 0.5,
fontWeight: reguler,
fontSize: getProportionateScreenWidth(11),
color: tenthColor,
),
),
SizedBox(height: 4),
Text(
'Oleh $instructor',
// 'Oleh Farid Subkhan',
style: primaryTextStyle.copyWith(
letterSpacing: 0.5,
fontWeight: reguler,
fontSize: getProportionateScreenWidth(9.5),
color: secondaryColor,
),
),
],
),
),
Flexible(
flex: 3,
child: Text(
'Rp. ${NumberFormat.currency(locale: 'id', symbol: '', decimalDigits: 0).format(double.parse(price!))}',
// 'Rp. ${NumberFormat.currency(locale: 'id', symbol: '', decimalDigits: 0).format(50000.0)}',
style: primaryTextStyle.copyWith(
letterSpacing: 0.5,
fontWeight: reguler,
fontSize: getProportionateScreenWidth(12),
color: tenthColor,
),
),
),
],
),
);
}
@override
Widget build(BuildContext context) {
var dataOrder =
Provider.of<PaymentsProvider>(context, listen: false).detailOrder;
var dataCourse =
Provider.of<orderProvider.OrderProvider>(context, listen: false).orders;
var dataUser =
Provider.of<userInfoProvider.UserInfoProvider>(context, listen: false)
.result;
int totalPrices = Provider.of<TotalPriceProvider>(context).totalPrices!;
return Container(
decoration: BoxDecoration(
// color: Colors.red,
borderRadius: BorderRadius.vertical(top: Radius.circular(20))),
foregroundDecoration: BoxDecoration(
// color: Colors.red,
borderRadius: BorderRadius.all(Radius.circular(20))),
child: ListView(
shrinkWrap: true,
physics: NeverScrollableScrollPhysics(),
children: [
Row(
children: [
IconButton(
onPressed: () {
Navigator.pop(context);
},
icon: Icon(Icons.keyboard_arrow_down)),
Text('Detail Pembayaran')
],
),
Container(
height: 6,
color: Color(0xff181818),
),
Container(
height: MediaQuery.of(context).size.height * 0.4,
child: ListView(
shrinkWrap: true,
children: [
Container(
padding: EdgeInsets.symmetric(horizontal: 15, vertical: 20),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text('Informasi Pembeli'),
Divider(),
Text(
'Order ID',
style: primaryTextStyle.copyWith(
fontSize: 10, color: Color(0xffbfbfbf)),
),
Text(
dataOrder[0].idOrder,
style: primaryTextStyle.copyWith(
fontSize: 12, color: Color(0xffF4f4f4)),
),
SizedBox(
height: 15,
),
Text(
'Nama Lengkap',
style: primaryTextStyle.copyWith(
fontSize: 10, color: Color(0xffbfbfbf)),
),
Text(
dataUser!.data[0].fullname!,
style: primaryTextStyle.copyWith(
fontSize: 12, color: Color(0xffF4f4f4)),
),
SizedBox(
height: 15,
),
Text(
'Email',
style: primaryTextStyle.copyWith(
fontSize: 10, color: Color(0xffbfbfbf)),
),
Text(
dataUser.data[0].email!,
style: primaryTextStyle.copyWith(
fontSize: 12, color: Color(0xffF4f4f4)),
),
],
),
),
Container(
height: 6,
color: Color(0xff181818),
),
Container(
padding: EdgeInsets.symmetric(horizontal: 15, vertical: 20),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text('Informasi Pembayaran'),
Divider(),
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text('Metode Pembayaran',
style: primaryTextStyle.copyWith(
fontSize: 12, color: Color(0xffbfbfbf))),
Text(paymentMethod[dataOrder[0].paymentType]!,
style: primaryTextStyle.copyWith(
fontSize: 12, color: Color(0xffF4f4f4))),
],
),
Divider(),
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text('Total Harga',
style: primaryTextStyle.copyWith(
fontSize: 10, color: Color(0xffbfbfbf))),
Text(
'Rp. ${NumberFormat.currency(locale: 'id', symbol: '', decimalDigits: 0).format(double.parse(Provider.of<TotalPriceProvider>(context).totalPrices.toString()))}',
style: primaryTextStyle.copyWith(
fontSize: 12, color: Color(0xffF4f4f4))),
],
),
SizedBox(height: 15),
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text('Potongan Kupon',
style: primaryTextStyle.copyWith(
fontSize: 10, color: Color(0xffbfbfbf))),
Text('Rp. 0',
style: primaryTextStyle.copyWith(
fontSize: 12, color: Color(0xffF4f4f4))),
],
),
Divider(),
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Text('Total Bayar',
style: primaryTextStyle.copyWith(
fontSize: 12, color: Color(0xffbfbfbf))),
Text(
'Rp. ${NumberFormat.currency(locale: 'id', symbol: '', decimalDigits: 0).format(double.parse(Provider.of<TotalPriceProvider>(context).totalPrices.toString()))}',
style: primaryTextStyle.copyWith(
fontSize: 12, color: Color(0xffF4f4f4))),
],
),
],
),
),
Container(
height: 6,
color: Color(0xff181818),
),
// Container(
// padding: EdgeInsets.symmetric(horizontal: 15, vertical: 20),
// child: Column(
// crossAxisAlignment: CrossAxisAlignment.start,
// children: [
// Text('Kursus Yang Dibeli'),
// Divider(),
// Column(
// children: dataCourse.map((course) {
// return listCourse(
// title: course.title,
// instructor: course.instructor,
// price: course.discountPrice);
// }).toList()),
// listCourse(),
// listCourse(),
// listCourse(),
// Text('Halo'),
// Text('Halo'),
// Text('Halo'),
// Text('Halo')
// ],
// ),
// )
],
),
)
],
),
);
}
}

View File

@ -0,0 +1,29 @@
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
class CardMonthInputFormatter extends TextInputFormatter {
@override
TextEditingValue formatEditUpdate(
TextEditingValue oldValue, TextEditingValue newValue) {
var masaController = newValue.text;
if (newValue.selection.baseOffset == 0) {
return newValue;
}
var buffer = new StringBuffer();
for (int i = 0; i < masaController.length; i++) {
buffer.write(masaController[i]);
var nonZeroIndex = i + 1;
if (nonZeroIndex % 2 == 0 && nonZeroIndex != masaController.length) {
buffer.write('/');
}
}
var string = buffer.toString();
return newValue.copyWith(
text: string,
selection: new TextSelection.collapsed(offset: string.length));
}
}

View File

@ -0,0 +1,28 @@
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
class CardNumberInputFormatter extends TextInputFormatter {
@override
TextEditingValue formatEditUpdate(
TextEditingValue oldValue, TextEditingValue newValue) {
var text = newValue.text;
if (newValue.selection.baseOffset == 0) {
return newValue;
}
var buffer = new StringBuffer();
for (int i = 0; i < text.length; i++) {
buffer.write(text[i]);
var nonZeroIndex = i + 1;
if (nonZeroIndex % 4 == 0 && nonZeroIndex != text.length) {
buffer.write(' '); // Add double spaces.
}
}
var string = buffer.toString();
return newValue.copyWith(
text: string,
selection: new TextSelection.collapsed(offset: string.length));
}
}

View File

@ -0,0 +1,159 @@
import 'package:flutter/material.dart';
import 'package:initial_folder/size_config.dart';
import 'package:initial_folder/theme.dart';
import 'package:intl/intl.dart';
class CourseList extends StatelessWidget {
const CourseList({
Key? key,
required this.idCourse,
required this.title,
required this.price,
required this.discountPrice,
required this.imageUrl,
this.isDetailCourse,
}) : super(key: key);
final String idCourse;
final String title;
final String price;
final String discountPrice;
final String imageUrl;
final bool? isDetailCourse;
@override
Widget build(BuildContext context) {
print("Ini price ${price}");
print("Ini discountPrice ${discountPrice}");
return Column(
children: [
Row(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Flexible(
flex: 10,
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Container(
width: getProportionateScreenWidth(70),
height: getProportionateScreenWidth(39),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(5),
image: DecorationImage(
fit: BoxFit.cover,
image: NetworkImage(imageUrl),
),
),
),
],
)),
SizedBox(width: getProportionateScreenWidth(10)),
Expanded(
flex: 15,
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
title,
style: thirdTextStyle.copyWith(
letterSpacing: 0.5,
fontWeight: reguler,
fontSize: getProportionateScreenWidth(12),
),
maxLines: 2,
overflow: TextOverflow.ellipsis,
),
],
)),
Spacer(),
Flexible(
flex: 10,
child: Align(
alignment: Alignment.centerRight,
child: Column(
mainAxisAlignment: MainAxisAlignment.end,
crossAxisAlignment: CrossAxisAlignment.end,
children: [
if (isDetailCourse == null)
discountPrice == "0"
? Text(
'Rp. ${NumberFormat.currency(locale: 'id', symbol: '', decimalDigits: 0).format(double.parse(price))}',
style: thirdTextStyle.copyWith(
letterSpacing: 0.5,
fontWeight: reguler,
fontSize: getProportionateScreenWidth(11),
),
)
: Text(
'Rp. ${NumberFormat.currency(locale: 'id', symbol: '', decimalDigits: 0).format(double.parse(price))}',
style: thirdTextStyle.copyWith(
letterSpacing: 0.5,
fontWeight: reguler,
fontSize: getProportionateScreenWidth(11),
),
)
else
discountPrice == "0"
? Text(
'Rp. ${NumberFormat.currency(locale: 'id', symbol: '', decimalDigits: 0).format(double.parse(price))}',
style: thirdTextStyle.copyWith(
letterSpacing: 0.5,
fontWeight: reguler,
fontSize: getProportionateScreenWidth(11),
),
)
: Text(
'Rp. ${NumberFormat.currency(locale: 'id', symbol: '', decimalDigits: 0).format(double.parse(price == "0" ? discountPrice : price))}',
style: thirdTextStyle.copyWith(
letterSpacing: 0.5,
fontWeight: reguler,
fontSize: getProportionateScreenWidth(11),
),
),
if (isDetailCourse == null)
if (discountPrice != "0" && discountPrice != price)
Text(
'Rp ${NumberFormat.currency(locale: 'id', symbol: '', decimalDigits: 0).format(double.parse(discountPrice))}',
style: thirdTextStyle.copyWith(
letterSpacing: 0.5,
decoration: TextDecoration.lineThrough,
color: fourthColor,
fontWeight: reguler,
fontSize: SizeConfig.blockHorizontal! * 2.7,
),
)
else
SizedBox.shrink()
else if (price != "0")
Text(
'Rp ${NumberFormat.currency(locale: 'id', symbol: '', decimalDigits: 0).format(double.parse(discountPrice))}',
style: thirdTextStyle.copyWith(
letterSpacing: 0.5,
decoration: TextDecoration.lineThrough,
color: fourthColor,
fontWeight: reguler,
fontSize: SizeConfig.blockHorizontal! * 2.7,
),
)
else
SizedBox.shrink(),
SizedBox(height: getProportionateScreenHeight(2)),
discountPrice != "0" && discountPrice != price
? SizedBox()
: SizedBox(),
],
),
),
),
],
),
SizedBox(height: getProportionateScreenHeight(10)),
Divider(color: fourthColor),
SizedBox(height: getProportionateScreenHeight(5)),
],
);
}
}

View File

@ -0,0 +1,130 @@
import 'package:flutter/material.dart';
import 'package:initial_folder/providers/total_price_provider.dart';
import 'package:initial_folder/size_config.dart';
import 'package:initial_folder/theme.dart';
import 'package:intl/intl.dart';
import 'package:provider/provider.dart';
class CourseListCoupon extends StatelessWidget {
final String idCourse;
final String title;
final String price;
final String discountPrice;
final String imageUrl;
const CourseListCoupon({
Key? key,
required this.idCourse,
required this.title,
required this.price,
required this.discountPrice,
required this.imageUrl,
}) : super(key: key);
@override
Widget build(BuildContext context) {
final priceCoupon = Provider.of<TotalPriceProvider>(context).priceCoupon;
return Column(
children: [
Row(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Flexible(
flex: 10,
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Container(
width: getProportionateScreenWidth(70),
height: getProportionateScreenWidth(39),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(5),
image: DecorationImage(
fit: BoxFit.cover,
image: NetworkImage(imageUrl),
),
),
),
],
)),
SizedBox(width: getProportionateScreenWidth(10)),
Expanded(
flex: 15,
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
title,
style: primaryTextStyle.copyWith(
letterSpacing: 0.5,
fontWeight: reguler,
fontSize: getProportionateScreenWidth(12),
),
maxLines: 2,
overflow: TextOverflow.ellipsis,
),
],
)),
Spacer(),
Flexible(
flex: 10,
child: Align(
alignment: Alignment.centerRight,
child: Column(
mainAxisAlignment: MainAxisAlignment.end,
crossAxisAlignment: CrossAxisAlignment.end,
children: [
discountPrice == "0"
? Text(
'Rp. ${NumberFormat.currency(locale: 'id', symbol: '', decimalDigits: 0).format(double.parse(price))}',
style: primaryTextStyle.copyWith(
letterSpacing: 0.5,
fontWeight: reguler,
fontSize: getProportionateScreenWidth(12),
),
)
: Text(
'Rp. ${NumberFormat.currency(locale: 'id', symbol: '', decimalDigits: 0).format(double.parse(discountPrice))}',
style: primaryTextStyle.copyWith(
letterSpacing: 0.5,
fontWeight: reguler,
fontSize: getProportionateScreenWidth(12),
),
),
// Text(
// 'Rp ${NumberFormat.currency(locale: 'id', symbol: '', decimalDigits: 0).format(double.parse(price))}',
// style: primaryTextStyle.copyWith(
// letterSpacing: 0.5,
// fontWeight: reguler,
// fontSize: getProportionateScreenWidth(12),
// ),
// ),
SizedBox(
height: getProportionateScreenHeight(2),
),
priceCoupon.toString() != "0"
? Text(
'Rp. ${NumberFormat.currency(locale: 'id', symbol: '', decimalDigits: 0).format(double.parse(priceCoupon.toString()))}',
style: primaryTextStyle.copyWith(
decoration: TextDecoration.lineThrough,
color: secondaryColor,
letterSpacing: 0.5,
fontWeight: reguler,
fontSize: getProportionateScreenWidth(10),
),
)
: SizedBox(),
],
),
),
),
],
),
SizedBox(height: getProportionateScreenHeight(10)),
Divider(color: fourthColor),
SizedBox(height: getProportionateScreenHeight(5)),
],
);
}
}

View File

@ -0,0 +1,105 @@
import 'package:flutter/material.dart';
import '../../../../theme.dart';
import '../../../../size_config.dart';
class FieldKupon extends StatelessWidget {
final TextEditingController controler;
final IconButton? prefix;
const FieldKupon({Key? key, required this.controler, this.prefix})
: super(key: key);
@override
Widget build(BuildContext context) {
OutlineInputBorder outlineInputBorder = OutlineInputBorder(
borderSide: BorderSide(color: Colors.transparent),
gapPadding: 10,
);
// width: SizeConfig.screenWidth * 0.9,
// height: 33,
// decoration: BoxDecoration(
// color: Colors.white,
// borderRadius: BorderRadius.circular(15),
// border: Border.all(
// color: kSecondaryColor.withOpacity(0.5),
// width: 2,
// return Scaffold(
// body: Container(
// height: 36,
// //padding: EdgeInsets.only(top: getProportionateScreenWidth(20)),
// child: TextField(
// controller: controler,
// cursorColor: secondaryColor,
// enabled: true,
// //obscureText: true,
// textAlignVertical: TextAlignVertical.center,
// style: TextStyle(fontSize: 12, color: Colors.white),
// onChanged: (value) => print(value),
// decoration: InputDecoration(
// //isDense: true,
// contentPadding: EdgeInsets.only(top: 10, left: 15),
// filled: true,
// fillColor: Colors.transparent,
// enabledBorder: outlineInputBorder,
// focusedBorder: outlineInputBorder,
// border: outlineInputBorder,
// hintText: "Masukkan kode kupon",
// hintStyle: primaryTextStyle.copyWith(
// fontSize: 12,
// color: fourthColor,
// fontWeight: reguler,
// letterSpacing: 0.5),
// ),
// ),
// ),
// // SizedBox(height: getProportionateScreenHeight(16)),
// );
return Column(
children: [
Container(
height: getProportionateScreenHeight(32),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(10),
color: Theme.of(context).brightness == Brightness.dark
? seventeenColor.withOpacity(0.9)
: secondaryColor.withOpacity(0.2),
),
child: TextField(
controller: controler,
cursorColor: Theme.of(context).colorScheme.onPrimary,
enabled: true,
textAlignVertical: TextAlignVertical.center,
style: TextStyle(
fontSize: 14,
color: Theme.of(context).colorScheme.onPrimary,
),
onChanged: (value) => print(value),
decoration: InputDecoration(
prefix: prefix,
contentPadding: EdgeInsets.only(
top: getProportionateScreenHeight(10),
left: getProportionateScreenWidth(15),
),
filled: true,
fillColor: Colors.transparent,
enabledBorder: outlineInputBorder,
focusedBorder: outlineInputBorder,
border: outlineInputBorder,
hintText: "Masukkan kode kupon",
hintStyle: thirdTextStyle.copyWith(
fontSize: getProportionateScreenWidth(10),
color: Theme.of(context).brightness == Brightness.dark
? baruTextutih.withOpacity(0.5)
: Colors.grey,
fontWeight: reguler,
letterSpacing: 0.5,
),
),
),
),
SizedBox(height: getProportionateScreenHeight(16)),
],
);
}
}

View File

@ -0,0 +1,337 @@
import 'package:flutter/material.dart';
import 'package:initial_folder/size_config.dart';
import 'package:initial_folder/theme.dart';
import 'package:styled_text/styled_text.dart';
class InternetBankBNI extends StatelessWidget {
final TextStyle baris = thirdTextStyle.copyWith(
fontWeight: reguler,
fontSize: getProportionateScreenWidth(14),
letterSpacing: 0.5,
);
@override
Widget build(BuildContext context) {
return Padding(
padding:
EdgeInsets.symmetric(horizontal: getProportionateScreenWidth(12)),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
StyledText(
// text: '1. Open the <bold>BNI Mobile Banking</bold> app and login',
text: '1. Masuk ke https://ibank.bni.co.id',
style: baris,
tags: {
'bold': StyledTextTag(style: TextStyle(fontWeight: bold)),
},
),
Divider(color: Color(0xff2D2D2D), thickness: 0.5, height: 35),
StyledText(
// text: '2. Choose menu <bold>Transfer</bold>',
text: '2. Masukkan User ID dan Password',
style: baris,
tags: {
'bold': StyledTextTag(style: TextStyle(fontWeight: bold)),
},
),
Divider(color: Color(0xff2D2D2D), thickness: 0.5, height: 35),
StyledText(
// text: '3. Choose menu <bold>Virtual Account Billing</bold>',
text:
"3. Pilih menu \"Transfer\", lalu pilih \"Tambah Rekening Favorit\". Jika menggunakan Desktop. tambah rekening pada menu \"Transaksi\" kemudian \"Atur Rekening Tujuan\" lalu pilih \"Tambah Rekening Tujuan\" ",
style: baris,
tags: {
'bold': StyledTextTag(style: TextStyle(fontWeight: bold)),
},
),
Divider(color: Color(0xff2D2D2D), thickness: 0.5, height: 35),
StyledText(
// text: '4. Choose the bank account you want to use',
text: "4. Masukkan nomor Virtual Account",
style: baris,
tags: {
'bold': StyledTextTag(style: TextStyle(fontWeight: bold)),
},
),
Divider(color: Color(0xff2D2D2D), thickness: 0.5, height: 35),
StyledText(
// text: '5. Enter the 16 digits <bold>virtual account number</bold>',
text:
"5. Masukkan Kode Otentikasi dan Nomor Rekening berhasil ditambahkan",
style: baris,
tags: {
'bold': StyledTextTag(style: TextStyle(fontWeight: bold)),
},
),
Divider(color: Color(0xff2D2D2D), thickness: 0.5, height: 35),
StyledText(
text:
// '6. The billing information will appear on the payment validation page',
"6. Pilih menu \"Transfer\", lalu pilih \"Transfer Antar Rekening BNI\", pilih \"Rekening Tujuan\" ",
style: baris,
tags: {
'bold': StyledTextTag(style: TextStyle(fontWeight: bold)),
},
),
Divider(color: Color(0xff2D2D2D), thickness: 0.5, height: 35),
StyledText(
text:
// '7. If the information is correct, enter your password to proceed the payment',
"7. Pilih Rekening Debit",
style: baris,
tags: {
'bold': StyledTextTag(style: TextStyle(fontWeight: bold)),
},
),
Divider(color: Color(0xff2D2D2D), thickness: 0.5, height: 35),
StyledText(
// text: '8. Your transaction will be processed',
text: "8. Masukkan jumlah pembayaran sesuai tagihan",
style: baris,
tags: {
'bold': StyledTextTag(style: TextStyle(fontWeight: bold)),
},
),
Divider(color: Color(0xff2D2D2D), thickness: 0.5, height: 35),
StyledText(
// text: '8. Your transaction will be processed',
text: "9. Masukkan Kode Otentikasi",
style: baris,
tags: {
'bold': StyledTextTag(style: TextStyle(fontWeight: bold)),
},
),
SizedBox(height: getProportionateScreenHeight(10)),
],
),
);
}
}
class InternetBankBCA extends StatelessWidget {
final TextStyle baris = thirdTextStyle.copyWith(
fontWeight: reguler,
fontSize: getProportionateScreenWidth(14),
letterSpacing: 0.5,
);
@override
Widget build(BuildContext context) {
return Padding(
padding:
EdgeInsets.symmetric(horizontal: getProportionateScreenWidth(12)),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
StyledText(
// text: '1. Open the <bold>BNI Mobile Banking</bold> app and login',
text: '1. Login pada aplikasi KlikBCA, masukkan user ID & PIN.',
style: baris,
tags: {
'bold': StyledTextTag(style: TextStyle(fontWeight: bold)),
},
),
Divider(color: Color(0xff2D2D2D), thickness: 0.5, height: 35),
StyledText(
// text: '2. Choose menu <bold>Transfer</bold>',
text:
"2. Pilih \"Transfer Dana\", kemudian pilih \"Transfer ke BCA Virtual Account\" ",
style: baris,
tags: {
'bold': StyledTextTag(style: TextStyle(fontWeight: bold)),
},
),
Divider(color: Color(0xff2D2D2D), thickness: 0.5, height: 35),
StyledText(
// text: '3. Choose menu <bold>Virtual Account Billing</bold>',
text: "3. Masukkan no. BCA Virtual Account & klik \"Lanjutkan\" ",
style: baris,
tags: {
'bold': StyledTextTag(style: TextStyle(fontWeight: bold)),
},
),
Divider(color: Color(0xff2D2D2D), thickness: 0.5, height: 35),
StyledText(
// text: '4. Choose the bank account you want to use',
text:
"4. Pastikan data yang dimasukkan sudah benar, dan Input \"Respon KeyBCA\", lalu klik \"Kirim\" ",
style: baris,
tags: {
'bold': StyledTextTag(style: TextStyle(fontWeight: bold)),
},
),
SizedBox(height: getProportionateScreenHeight(10)),
],
),
);
}
}
class InternetBankMandiri extends StatelessWidget {
final TextStyle baris = thirdTextStyle.copyWith(
fontWeight: reguler,
fontSize: getProportionateScreenWidth(14),
letterSpacing: 0.5,
);
@override
Widget build(BuildContext context) {
return Padding(
padding:
EdgeInsets.symmetric(horizontal: getProportionateScreenWidth(12)),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
StyledText(
// text: '1. Open the <bold>BNI Mobile Banking</bold> app and login',
text: '1. Lakukan Login ke Internet Banking Mandiri kamu.',
style: baris,
tags: {
'bold': StyledTextTag(style: TextStyle(fontWeight: bold)),
},
),
Divider(color: Color(0xff2D2D2D), thickness: 0.5, height: 35),
StyledText(
// text: '2. Choose menu <bold>Transfer</bold>',
text:
"2. Pada menu utama, pilih menu \"Bayar\" lalu pilih menu \"Multi Payment\" ",
style: baris,
tags: {
'bold': StyledTextTag(style: TextStyle(fontWeight: bold)),
},
),
Divider(color: Color(0xff2D2D2D), thickness: 0.5, height: 35),
StyledText(
// text: '3. Choose menu <bold>Virtual Account Billing</bold>',
text:
"3. Pilih akun anda di bagian Dari Rekening, kemudian di Penyedia Jasa ",
style: baris,
tags: {
'bold': StyledTextTag(style: TextStyle(fontWeight: bold)),
},
),
Divider(color: Color(0xff2D2D2D), thickness: 0.5, height: 35),
StyledText(
// text: '4. Choose the bank account you want to use',
text:
"4. Masukkan kode pembayaran (kode pembayaran Mandiri billpayment kamu), dan klik \"Lanjutkan\" ",
style: baris,
tags: {
'bold': StyledTextTag(style: TextStyle(fontWeight: bold)),
},
),
Divider(color: Color(0xff2D2D2D), thickness: 0.5, height: 35),
StyledText(
// text: '4. Choose the bank account you want to use',
text:
"5. Periksa kembali nama perusahaan, nomor pesanan, dan jumlah pembayaran anda ",
style: baris,
tags: {
'bold': StyledTextTag(style: TextStyle(fontWeight: bold)),
},
),
Divider(color: Color(0xff2D2D2D), thickness: 0.5, height: 35),
StyledText(
// text: '4. Choose the bank account you want to use',
text: "6. Selesaikan pembayaran dengan menggunakan Token Mandiri ",
style: baris,
tags: {
'bold': StyledTextTag(style: TextStyle(fontWeight: bold)),
},
),
SizedBox(height: getProportionateScreenHeight(10)),
],
),
);
}
}
class InternetBankPermata extends StatelessWidget {
final TextStyle baris = thirdTextStyle.copyWith(
fontWeight: reguler,
fontSize: getProportionateScreenWidth(14),
letterSpacing: 0.5,
);
@override
Widget build(BuildContext context) {
return Padding(
padding:
EdgeInsets.symmetric(horizontal: getProportionateScreenWidth(12)),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
StyledText(
// text: '1. Open the <bold>BNI Mobile Banking</bold> app and login',
text: '1. Buka Website PermataNet',
style: baris,
tags: {
'bold': StyledTextTag(style: TextStyle(fontWeight: bold)),
},
),
Divider(color: Color(0xff2D2D2D), thickness: 0.5, height: 35),
StyledText(
// text: '2. Choose menu <bold>Transfer</bold>',
text: "2. Masukan User ID dan Password ",
style: baris,
tags: {
'bold': StyledTextTag(style: TextStyle(fontWeight: bold)),
},
),
Divider(color: Color(0xff2D2D2D), thickness: 0.5, height: 35),
StyledText(
// text: '3. Choose menu <bold>Virtual Account Billing</bold>',
text: "3. Pilih Pembayaran Tagihan ",
style: baris,
tags: {
'bold': StyledTextTag(style: TextStyle(fontWeight: bold)),
},
),
Divider(color: Color(0xff2D2D2D), thickness: 0.5, height: 35),
StyledText(
// text: '4. Choose the bank account you want to use',
text: "4. Pilih Virtual Account ",
style: baris,
tags: {
'bold': StyledTextTag(style: TextStyle(fontWeight: bold)),
},
),
Divider(color: Color(0xff2D2D2D), thickness: 0.5, height: 35),
StyledText(
// text: '4. Choose the bank account you want to use',
text: "5. Masukkan 16 digit kode bayar ",
style: baris,
tags: {
'bold': StyledTextTag(style: TextStyle(fontWeight: bold)),
},
),
Divider(color: Color(0xff2D2D2D), thickness: 0.5, height: 35),
StyledText(
// text: '4. Choose the bank account you want to use',
text: "6. Masukkan nominal pembayaran ",
style: baris,
tags: {
'bold': StyledTextTag(style: TextStyle(fontWeight: bold)),
},
),
Divider(color: Color(0xff2D2D2D), thickness: 0.5, height: 35),
StyledText(
// text: '4. Choose the bank account you want to use',
text: "7. Muncul konfirmasi pembayaran ",
style: baris,
tags: {
'bold': StyledTextTag(style: TextStyle(fontWeight: bold)),
},
),
Divider(color: Color(0xff2D2D2D), thickness: 0.5, height: 35),
StyledText(
// text: '4. Choose the bank account you want to use',
text: "8. Masukan Mobile PIN",
style: baris,
tags: {
'bold': StyledTextTag(style: TextStyle(fontWeight: bold)),
},
),
SizedBox(height: getProportionateScreenHeight(10)),
],
),
);
}
}

View File

@ -0,0 +1,351 @@
import 'package:flutter/material.dart';
import 'package:initial_folder/size_config.dart';
import 'package:initial_folder/theme.dart';
import 'package:styled_text/styled_text.dart';
class MobileBankBNI extends StatelessWidget {
final TextStyle baris = thirdTextStyle.copyWith(
fontWeight: reguler,
fontSize: getProportionateScreenWidth(14),
letterSpacing: 0.5,
);
@override
Widget build(BuildContext context) {
return Padding(
padding:
EdgeInsets.symmetric(horizontal: getProportionateScreenWidth(12)),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
StyledText(
// text: '1. Open the <bold>BNI Mobile Banking</bold> app and login',
text: "1. Akses BNI Mobile Banking melalui handphone",
style: baris,
tags: {
'bold': StyledTextTag(style: TextStyle(fontWeight: bold)),
},
),
Divider(color: Color(0xff2D2D2D), thickness: 0.5, height: 35),
StyledText(
// text: '2. Choose menu <bold>Transfer</bold>',
text: "2. Masukkan User ID dan Password",
style: baris,
tags: {
'bold': StyledTextTag(style: TextStyle(fontWeight: bold)),
},
),
Divider(color: Color(0xff2D2D2D), thickness: 0.5, height: 35),
StyledText(
// text: '3. Choose menu <bold>Virtual Account Billing</bold>',
text:
"3. Pilih menu \"Transfer\", lalu pilih \"Antar Rekening BNI\", pilih \"Input Rekening Baru\" ",
style: baris,
tags: {
'bold': StyledTextTag(style: TextStyle(fontWeight: bold)),
},
),
Divider(color: Color(0xff2D2D2D), thickness: 0.5, height: 35),
StyledText(
// text: '4. Choose the bank account you want to use',
text: "4. Masukkan nomor Virtual Account",
style: baris,
tags: {
'bold': StyledTextTag(style: TextStyle(fontWeight: bold)),
},
),
Divider(color: Color(0xff2D2D2D), thickness: 0.5, height: 35),
StyledText(
// text: '5. Enter the 16 digits <bold>virtual account number</bold>',
text:
"5.Di halaman konfirmasi, pastikan data transaksi sudah benar kemudian pilih \"Ya\"",
style: baris,
tags: {
'bold': StyledTextTag(style: TextStyle(fontWeight: bold)),
},
),
Divider(color: Color(0xff2D2D2D), thickness: 0.5, height: 35),
StyledText(
text:
// '6. The billing information will appear on the payment validation page',
"6. Masukkan password anda ",
style: baris,
tags: {
'bold': StyledTextTag(style: TextStyle(fontWeight: bold)),
},
),
SizedBox(height: getProportionateScreenHeight(10)),
],
),
);
}
}
class MobileBankBCA extends StatelessWidget {
final TextStyle baris = thirdTextStyle.copyWith(
fontWeight: reguler,
fontSize: getProportionateScreenWidth(14),
letterSpacing: 0.5,
);
@override
Widget build(BuildContext context) {
return Padding(
padding:
EdgeInsets.symmetric(horizontal: getProportionateScreenWidth(12)),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
StyledText(
// text: '1. Open the <bold>BNI Mobile Banking</bold> app and login',
text: '1. Lakukan log in pada aplikasi BCA mobile.',
style: baris,
tags: {
'bold': StyledTextTag(style: TextStyle(fontWeight: bold)),
},
),
Divider(color: Color(0xff2D2D2D), thickness: 0.5, height: 35),
StyledText(
// text: '2. Choose menu <bold>Transfer</bold>',
text: "2. Pilih \"m-BCA\" masukan kode akses m-BCA. ",
style: baris,
tags: {
'bold': StyledTextTag(style: TextStyle(fontWeight: bold)),
},
),
Divider(color: Color(0xff2D2D2D), thickness: 0.5, height: 35),
StyledText(
// text: '3. Choose menu <bold>Virtual Account Billing</bold>',
text: "3. Pilih \"m-Transfer\" ",
style: baris,
tags: {
'bold': StyledTextTag(style: TextStyle(fontWeight: bold)),
},
),
Divider(color: Color(0xff2D2D2D), thickness: 0.5, height: 35),
StyledText(
// text: '4. Choose the bank account you want to use',
text: "4. Pilih \"BCA Virtual Account\" ",
style: baris,
tags: {
'bold': StyledTextTag(style: TextStyle(fontWeight: bold)),
},
),
Divider(color: Color(0xff2D2D2D), thickness: 0.5, height: 35),
StyledText(
// text: '4. Choose the bank account you want to use',
text: "5. Masukkan nomor BCA Virtual Account dan klik \"OK\" ",
style: baris,
tags: {
'bold': StyledTextTag(style: TextStyle(fontWeight: bold)),
},
),
Divider(color: Color(0xff2D2D2D), thickness: 0.5, height: 35),
StyledText(
// text: '4. Choose the bank account you want to use',
text: "6. Konfirmasi no virtual account dan rekening pendebetan ",
style: baris,
tags: {
'bold': StyledTextTag(style: TextStyle(fontWeight: bold)),
},
),
Divider(color: Color(0xff2D2D2D), thickness: 0.5, height: 35),
StyledText(
// text: '4. Choose the bank account you want to use',
text:
"7. Periksa kembalian rincian pembayaran kamu, lalu klik \"Ya\" ",
style: baris,
tags: {
'bold': StyledTextTag(style: TextStyle(fontWeight: bold)),
},
),
Divider(color: Color(0xff2D2D2D), thickness: 0.5, height: 35),
StyledText(
// text: '4. Choose the bank account you want to use',
text: "8. Masukan pin m-BCA ",
style: baris,
tags: {
'bold': StyledTextTag(style: TextStyle(fontWeight: bold)),
},
),
SizedBox(height: getProportionateScreenHeight(10)),
],
),
);
}
}
class MobileBankMandiri extends StatelessWidget {
final TextStyle baris = thirdTextStyle.copyWith(
fontWeight: reguler,
fontSize: getProportionateScreenWidth(14),
letterSpacing: 0.5,
);
@override
Widget build(BuildContext context) {
return Padding(
padding:
EdgeInsets.symmetric(horizontal: getProportionateScreenWidth(12)),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
StyledText(
// text: '1. Open the <bold>BNI Mobile Banking</bold> app and login',
text: '1. Lakukan Login ke Mandiri Online kamu',
style: baris,
tags: {
'bold': StyledTextTag(style: TextStyle(fontWeight: bold)),
},
),
Divider(color: Color(0xff2D2D2D), thickness: 0.5, height: 35),
StyledText(
// text: '2. Choose menu <bold>Transfer</bold>',
text: "2. Pada menu utama, pilih menu \"Bayar\"",
style: baris,
tags: {
'bold': StyledTextTag(style: TextStyle(fontWeight: bold)),
},
),
Divider(color: Color(0xff2D2D2D), thickness: 0.5, height: 35),
StyledText(
// text: '3. Choose menu <bold>Virtual Account Billing</bold>',
text: "3. Lalu pilih menu \"Multi Payment\" ",
style: baris,
tags: {
'bold': StyledTextTag(style: TextStyle(fontWeight: bold)),
},
),
Divider(color: Color(0xff2D2D2D), thickness: 0.5, height: 35),
StyledText(
// text: '4. Choose the bank account you want to use',
text: "4. kemudian pilih Penyedia Jasa ",
style: baris,
tags: {
'bold': StyledTextTag(style: TextStyle(fontWeight: bold)),
},
),
Divider(color: Color(0xff2D2D2D), thickness: 0.5, height: 35),
StyledText(
// text: '4. Choose the bank account you want to use',
text:
"5. Masukkan kode pembayaran [Kode pembayaran Mandiri billpayment], dan klik \"Lanjutkan\" ",
style: baris,
tags: {
'bold': StyledTextTag(style: TextStyle(fontWeight: bold)),
},
),
Divider(color: Color(0xff2D2D2D), thickness: 0.5, height: 35),
StyledText(
// text: '4. Choose the bank account you want to use',
text:
"6. Periksa kembali data transaksi kamu dan selesaikan proses pembayaran ",
style: baris,
tags: {
'bold': StyledTextTag(style: TextStyle(fontWeight: bold)),
},
),
SizedBox(height: getProportionateScreenHeight(10)),
],
),
);
}
}
class MobileBankPermata extends StatelessWidget {
final TextStyle baris = thirdTextStyle.copyWith(
fontWeight: reguler,
fontSize: getProportionateScreenWidth(14),
letterSpacing: 0.5,
);
@override
Widget build(BuildContext context) {
return Padding(
padding:
EdgeInsets.symmetric(horizontal: getProportionateScreenWidth(12)),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
StyledText(
// text: '1. Open the <bold>BNI Mobile Banking</bold> app and login',
text: '1. Buka aplikasi PermataMobile X',
style: baris,
tags: {
'bold': StyledTextTag(style: TextStyle(fontWeight: bold)),
},
),
Divider(color: Color(0xff2D2D2D), thickness: 0.5, height: 35),
StyledText(
// text: '2. Choose menu <bold>Transfer</bold>',
text: "2. Masukan Password ",
style: baris,
tags: {
'bold': StyledTextTag(style: TextStyle(fontWeight: bold)),
},
),
Divider(color: Color(0xff2D2D2D), thickness: 0.5, height: 35),
StyledText(
// text: '3. Choose menu <bold>Virtual Account Billing</bold>',
text: "3. Pilih Pembayaran Tagihan ",
style: baris,
tags: {
'bold': StyledTextTag(style: TextStyle(fontWeight: bold)),
},
),
Divider(color: Color(0xff2D2D2D), thickness: 0.5, height: 35),
StyledText(
// text: '4. Choose the bank account you want to use',
text: "4. Pilih Virtual Account ",
style: baris,
tags: {
'bold': StyledTextTag(style: TextStyle(fontWeight: bold)),
},
),
Divider(color: Color(0xff2D2D2D), thickness: 0.5, height: 35),
StyledText(
// text: '4. Choose the bank account you want to use',
text: "5. Masukan Nomor Virtual Account ",
style: baris,
tags: {
'bold': StyledTextTag(style: TextStyle(fontWeight: bold)),
},
),
Divider(color: Color(0xff2D2D2D), thickness: 0.5, height: 35),
StyledText(
// text: '4. Choose the bank account you want to use',
text: "6. Pilih Rekening",
style: baris,
tags: {
'bold': StyledTextTag(style: TextStyle(fontWeight: bold)),
},
),
Divider(color: Color(0xff2D2D2D), thickness: 0.5, height: 35),
StyledText(
// text: '4. Choose the bank account you want to use',
text: "7. Masukkan nominal pembayaran ",
style: baris,
tags: {
'bold': StyledTextTag(style: TextStyle(fontWeight: bold)),
},
),
Divider(color: Color(0xff2D2D2D), thickness: 0.5, height: 35),
StyledText(
// text: '4. Choose the bank account you want to use',
text: "8. Muncul konfirmasi pembayaran ",
style: baris,
tags: {
'bold': StyledTextTag(style: TextStyle(fontWeight: bold)),
},
),
Divider(color: Color(0xff2D2D2D), thickness: 0.5, height: 35),
StyledText(
// text: '4. Choose the bank account you want to use',
text: "9. Masukan Mobile PIN",
style: baris,
tags: {
'bold': StyledTextTag(style: TextStyle(fontWeight: bold)),
},
),
SizedBox(height: getProportionateScreenHeight(10)),
],
),
);
}
}

View File

@ -0,0 +1,145 @@
import 'package:flutter/material.dart';
import 'package:initial_folder/models/detail_order_model.dart';
import 'package:initial_folder/providers/payments_provider.dart' as payProv;
import 'package:initial_folder/providers/tab_provider.dart';
import 'package:initial_folder/screens/checkout/components/atm.dart';
import 'package:initial_folder/screens/checkout/components/internet_banking.dart';
import 'package:initial_folder/screens/checkout/components/mobile_banking.dart';
import 'package:initial_folder/size_config.dart';
import 'package:initial_folder/theme.dart';
import 'package:provider/provider.dart';
class TabBarBatasBayar extends StatelessWidget {
TabBarBatasBayar({
Key? key,
this.bank,
}) : super(key: key);
final String? bank;
@override
Widget build(BuildContext context) {
print("Apa hayoo ${bank}");
List<DetailOrderModel> detailOrder =
Provider.of<payProv.PaymentsProvider>(context).detailOrder;
String? bankName = detailOrder.isNotEmpty ? detailOrder[0].bankName : null;
print("Apa hayoo2 ${bankName}");
TabProvider tab = Provider.of<TabProvider>(context);
Widget buildContent(int currentIndex) {
switch (currentIndex) {
case 0:
switch (bank ?? bankName) {
case 'bni':
return ATMBNI();
case 'bca':
return ATMBCA();
case 'mandiri':
case 'echannel':
return AtmMandiri();
case 'permata':
return AtmPermata();
default:
return SizedBox();
}
case 1:
switch (bank ?? bankName) {
case 'bni':
return InternetBankBNI();
case 'bca':
return InternetBankBCA();
case 'mandiri':
case 'echannel':
return InternetBankMandiri();
case 'permata':
return InternetBankPermata();
default:
return SizedBox();
}
case 2:
switch (bank ?? bankName) {
case 'bni':
return MobileBankBNI();
case 'bca':
return MobileBankBCA();
case 'mandiri':
case 'echannel':
return MobileBankMandiri();
case 'permata':
return MobileBankPermata();
default:
return SizedBox();
}
default:
return SizedBox();
}
}
return Column(
children: [
ExpansionTile(
title: Text(
'ATM',
style: thirdTextStyle.copyWith(
fontSize: getProportionateScreenWidth(13)),
),
children: [
buildContent(0),
],
),
Container(
margin:
EdgeInsets.symmetric(horizontal: getProportionateScreenWidth(8)),
height: getProportionateScreenHeight(3),
decoration: BoxDecoration(
color: secondaryColor.withOpacity(0.1),
boxShadow: [
BoxShadow(
color: secondaryColor.withOpacity(0.1),
spreadRadius: 1,
blurRadius: 1,
offset: Offset(0, 1),
),
],
),
),
ExpansionTile(
title: Text(
'Internet Banking',
style: thirdTextStyle.copyWith(
fontSize: getProportionateScreenWidth(13)),
),
children: [
buildContent(1),
],
),
Container(
margin:
EdgeInsets.symmetric(horizontal: getProportionateScreenWidth(8)),
height: getProportionateScreenHeight(3),
decoration: BoxDecoration(
color: secondaryColor.withOpacity(0.1),
boxShadow: [
BoxShadow(
color: secondaryColor.withOpacity(0.1),
spreadRadius: 1,
blurRadius: 1,
offset: Offset(0, 1),
),
],
),
),
ExpansionTile(
title: Text(
'Mobile Banking',
style: thirdTextStyle.copyWith(
fontSize: getProportionateScreenWidth(13)),
),
children: [
buildContent(2),
],
),
],
);
}
}