Untitled
unknown
plain_text
3 years ago
47 kB
6
Indexable
import 'package:flutter/material.dart';
import 'package:flutter_rating_bar/flutter_rating_bar.dart';
import 'package:google_fonts/google_fonts.dart';
import 'package:carousel_slider/carousel_slider.dart';
import 'PagesClass.dart';
// import 'PageOtp.dart/';
import 'package:firebase_database/firebase_database.dart';
class Paid extends StatefulWidget {
final dynamic dataKelas;
final dynamic user_id;
const Paid({super.key, required this.dataKelas, required this.user_id});
// const Paid({Key? key}) : super(key: key);
@override
_HomepageState createState() => _HomepageState();
}
class _HomepageState extends State<Paid> {
final DatabaseReference _database = FirebaseDatabase.instance.ref('classes');
final DatabaseReference _databaseTransaction =
FirebaseDatabase.instance.ref('Transaction');
final List<String> _items = [];
@override
void initState() {
super.initState();
_database.onChildAdded.listen((event) {
setState(() {
_items.add(event.snapshot.value.toString());
});
});
}
// double _rating = 3.0;
// List<Map<String, String>> containerContents = [
// {
// 'title': 'Certificate 1',
// 'description':
// 'Earn an industry standard certificate upon completion of this class 1.',
// 'imagePath': 'assets/Gcerti.png',
// },
// {
// 'title': 'Certificate 2',
// 'description':
// 'Earn an industry standard certificate upon completion of this class 2.',
// 'imagePath': 'assets/Right.png',
// },
// {
// 'title': 'Certificate 3',
// 'description':
// 'Earn an industry standard certificate upon completion of this class 3.',
// 'imagePath': 'assets/Left.png',
// },
// ];
// List<Map<String, String>> containerContents2 = [
// {
// 'title': 'Certificate 1',
// 'description':
// 'Earn an industry standard certificate upon completion of this class 1.',
// 'imagePath': 'assets/Gcerti.png',
// },
// {
// 'title': 'Certificate 2',
// 'description':
// 'Earn an industry standard certificate upon completion of this class 2.',
// 'imagePath': 'assets/certiCode.png',
// },
// {
// 'title': 'Certificate 3',
// 'description':
// 'Earn an industry standard certificate upon completion of this class 3.',
// 'imagePath': 'assets/Left.png',
// },
// ];
@override
Widget build(BuildContext context) {
dynamic myData = widget.dataKelas;
return Scaffold(
body: ListView(
shrinkWrap: true,
children: [
Column(
children: <Widget>[
Row(children: [
Padding(
padding: const EdgeInsets.only(left: 15, top: 20),
child: GestureDetector(
onTap: () {
Navigator.pop(context); // Kembali ke halaman sebelumnya
},
child: Container(
child: Image.asset('assets/Left.png'),
),
),
),
Expanded(
child: Padding(
padding: const EdgeInsets.only(bottom: 35),
child: Container(
padding: const EdgeInsets.only(
top: 50,
),
alignment: Alignment.center,
child: Text(
myData['title'],
style: GoogleFonts.quicksand(
textStyle: const TextStyle(
fontWeight: FontWeight.bold,
fontSize: 25,
color: Color.fromARGB(255, 31, 30, 30),
),
),
),
),
),
),
]),
Container(
child: Image.asset(
'${myData['logo']}',
width: 170,
height: 170,
),
)
],
),
Column(
children: [
Padding(
padding: const EdgeInsets.only(left: 15, bottom: 7),
child: Align(
alignment: Alignment.topLeft,
child: Text(
'Information',
style: GoogleFonts.quicksand(
textStyle: const TextStyle(
fontSize: 25,
fontWeight: FontWeight.bold,
color: Color.fromARGB(255, 31, 30, 30),
),
),
),
),
),
builRegistration(),
Padding(
padding: const EdgeInsets.only(left: 15, bottom: 7),
child: Align(
alignment: Alignment.topLeft,
child: Text(
'Description',
style: GoogleFonts.quicksand(
textStyle: const TextStyle(
fontSize: 25,
fontWeight: FontWeight.bold,
color: Color.fromARGB(255, 31, 30, 30),
),
),
),
),
),
Padding(
padding: const EdgeInsets.all(10),
child: Container(
width: double.infinity,
height: 200,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(10),
color: Colors.white,
boxShadow: [
BoxShadow(
color: const Color.fromARGB(255, 117, 116, 116)
.withOpacity(0.5),
spreadRadius: 4,
blurRadius: 5,
offset: const Offset(0, 3),
),
],
),
child: Padding(
padding: const EdgeInsets.all(8.0),
child: Text(
myData['description'],
style: GoogleFonts.quicksand(
textStyle: const TextStyle(
fontSize: 13,
color: Color.fromARGB(255, 31, 30, 30),
),
),
),
),
),
),
Padding(
padding: const EdgeInsets.only(left: 15, bottom: 7),
child: Align(
alignment: Alignment.topLeft,
child: Text(
'Reward',
style: GoogleFonts.quicksand(
textStyle: const TextStyle(
fontSize: 25,
fontWeight: FontWeight.bold,
color: Color.fromARGB(255, 31, 30, 30),
),
),
),
),
),
SizedBox(
height: 200,
child: CarouselSlider.builder(
itemCount: myData.length,
itemBuilder:
(BuildContext context, int index, int realIndex) {
String title = myData['title']!;
String description = myData['description']!;
String imagePath = myData['logo']!;
return Container(
width: MediaQuery.of(context).size.width * 0.8,
margin: const EdgeInsets.symmetric(horizontal: 5),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(10),
color: const Color.fromARGB(255, 206, 206, 205),
),
child: Row(
children: [
Image.asset(
imagePath,
width: 100,
height: 100,
),
Expanded(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Padding(
padding: const EdgeInsets.all(8.0),
child: Text(
title,
style: const TextStyle(
fontSize: 16,
fontWeight: FontWeight.bold,
),
),
),
Padding(
padding: const EdgeInsets.all(8.0),
child: Text(
description,
style: const TextStyle(
fontSize: 12,
),
),
),
],
),
),
],
),
);
},
options: CarouselOptions(
height: 140,
enableInfiniteScroll: false,
viewportFraction: 0.6,
enlargeCenterPage: true,
scrollDirection: Axis.horizontal,
autoPlay: true,
autoPlayInterval: const Duration(seconds: 2),
autoPlayCurve: Curves.fastOutSlowIn,
),
),
),
Padding(
padding: const EdgeInsets.only(left: 15, bottom: 7),
child: Align(
alignment: Alignment.topLeft,
child: Text(
'FeedBack',
style: GoogleFonts.quicksand(
textStyle: const TextStyle(
fontSize: 25,
fontWeight: FontWeight.bold,
color: Color.fromARGB(255, 31, 30, 30),
),
),
),
),
),
SizedBox(
height: 200,
child: CarouselSlider.builder(
itemCount: myData.length,
itemBuilder:
(BuildContext context, int index, int realIndex) {
String title = myData['title']!;
String description = myData['description']!;
String imagePath = myData['logo']!;
return Container(
width: MediaQuery.of(context).size.width * 0.8,
margin: const EdgeInsets.symmetric(horizontal: 5),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(10),
color: const Color.fromARGB(255, 206, 206, 205),
),
child: Row(
children: [
Image.asset(
imagePath,
width: 100,
height: 100,
),
Expanded(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Padding(
padding: const EdgeInsets.all(8.0),
child: Text(
title,
style: const TextStyle(
fontSize: 16,
fontWeight: FontWeight.bold,
),
),
),
Padding(
padding: const EdgeInsets.all(8.0),
child: Text(
description,
style: const TextStyle(
fontSize: 12,
),
),
),
],
),
),
],
),
);
},
options: CarouselOptions(
height: 140,
enableInfiniteScroll: false,
viewportFraction: 0.6,
enlargeCenterPage: true,
scrollDirection: Axis.horizontal,
autoPlay: true,
autoPlayInterval: const Duration(seconds: 2),
autoPlayCurve: Curves.fastOutSlowIn,
),
),
),
const SizedBox(
height: 100,
)
// buildReward(rewards[index]),
],
)
// child: buildFeedback(recommendations[index]),
// );
// },
// ),
],
),
);
}
Widget builRegistration() {
dynamic myData = widget.dataKelas;
dynamic mydataUserId = widget.user_id;
return Padding(
padding:
const EdgeInsets.only(top: 8.0, right: 13, bottom: 8.0, left: 13),
child: Container(
width: double.infinity,
height: 100,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(10),
color: Colors.white,
boxShadow: [
BoxShadow(
color: const Color.fromARGB(255, 117, 116, 116).withOpacity(0.5),
spreadRadius: 4,
blurRadius: 5,
offset: const Offset(0, 3),
),
],
),
child: Row(
children: [
Container(
child: Row(
children: <Widget>[
Padding(
padding: const EdgeInsets.all(8.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Row(
children: [
RatingBar.builder(
initialRating: myData['rate'],
minRating: 1,
direction: Axis.horizontal,
allowHalfRating: true,
itemCount: 1,
itemSize: 30,
itemPadding:
const EdgeInsets.symmetric(horizontal: 4.0),
itemBuilder: (context, _) => const Icon(
Icons.star,
color: Colors.amber,
),
onRatingUpdate: (rating) {
setState(() {
myData['rate'] = rating;
});
},
),
Text(
'${myData['rate']}',
style: const TextStyle(
fontSize: 23,
color: Color.fromARGB(255, 79, 78, 78),
),
),
],
),
const SizedBox(height: 5),
Text(
'Level: ${myData['level']}',
style: const TextStyle(
color: Color.fromARGB(255, 73, 73, 73)),
),
const SizedBox(height: 8),
Text(
'Rp ${myData['price'].toString()}',
style: const TextStyle(
color: Color.fromARGB(255, 81, 80, 80),
fontWeight: FontWeight.bold),
),
],
),
),
],
),
),
Expanded(
child: Column(
mainAxisAlignment: MainAxisAlignment.end,
crossAxisAlignment: CrossAxisAlignment.end,
children: [
Expanded(
child: Padding(
padding: const EdgeInsets.only(
top: 15.0, left: 8.0, right: 20.0, bottom: 8.0),
child: GestureDetector(
onTap: () {
showDialog(
context: context,
builder: (BuildContext context) {
return AlertDialog(
contentPadding: const EdgeInsets.fromLTRB(
16.0,
16.0,
16.0,
0.0), // Ubah padding konten dialog
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(
15), // Ubah radius border dialog
),
title: Column(
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Text(
'Add cart Success',
style: GoogleFonts.quicksand(
textStyle: const TextStyle(
fontSize: 15,
fontWeight: FontWeight.bold,
color:
Color.fromARGB(255, 33, 32, 32),
),
),
),
Image.asset('assets/centang.png')
],
),
content: Column(
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisSize: MainAxisSize.min,
children: [
Text(
'Class Added to Cart',
style: GoogleFonts.quicksand(
textStyle: const TextStyle(
fontSize: 15,
fontWeight: FontWeight.bold,
color:
Color.fromARGB(255, 33, 32, 32),
),
),
),
const SizedBox(
height: 10,
)
],
),
actions: [
TextButton(
onPressed: () {
Navigator.of(context).pop();
},
child: Padding(
padding:
const EdgeInsets.only(bottom: 15),
child: Container(
width: double.infinity,
height: 30,
decoration: BoxDecoration(
borderRadius:
BorderRadius.circular(12),
color: const Color.fromARGB(
255, 55, 53, 53),
),
child: Align(
alignment: Alignment.center,
child: Text(
'Ok',
style: GoogleFonts.quicksand(
textStyle: const TextStyle(
fontSize: 16,
fontWeight: FontWeight.bold,
color: Color.fromARGB(
255, 191, 188, 188),
),
),
),
),
),
),
),
],
);
},
);
},
child: Container(
width: 130,
height: 100,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(12),
color: const Color.fromARGB(255, 188, 184, 184),
),
child: Center(
child: Text(
'Add Chart',
style: GoogleFonts.quicksand(
textStyle: const TextStyle(
fontSize: 15,
color: Color.fromARGB(255, 31, 30, 30),
),
),
),
),
),
),
),
),
Expanded(
child: Padding(
padding: const EdgeInsets.only(
left: 8.0, right: 20.0, bottom: 20.0),
child: GestureDetector(
onTap: () {
showDialog(
context: context,
builder: (BuildContext context) {
return AlertDialog(
contentPadding: const EdgeInsets.fromLTRB(
16.0,
16.0,
16.0,
0.0), // Ubah padding konten dialog
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(
15), // Ubah radius border dialog
),
title: Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.min,
children: [
Text(
'Detail',
style: GoogleFonts.quicksand(
textStyle: const TextStyle(
fontSize: 20,
color:
Color.fromARGB(255, 53, 52, 52),
),
),
),
const Divider(
// Penambahan garis bawah
color: Colors.black,
thickness: 1.0,
),
],
),
content: Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.min,
children: [
const Text('Class'),
Text(myData['title']),
const SizedBox(
height: 8,
),
const Text('Level'),
Text(myData['level']),
const SizedBox(
height: 8,
),
const Text('Total'),
Text('Rp.${myData['price'].toString()}'),
const SizedBox(
height: 10,
)
],
),
actions: [
TextButton(
onPressed: () {
registerNow(
myData['title'],
myData['description'],
myData['category'],
myData['logo'],
myData['level'],
myData['registered'],
myData['rate'],
myData['color'],
myData['price'],
myData['id_kelas'],
mydataUserId,
);
addClassRegistered(
myData['title'],
myData['description'],
myData['category'],
myData['logo'],
myData['level'],
myData['registered'],
myData['rate'],
myData['color'],
myData['price'],
myData['id_kelas']);
Navigator.of(context).pop();
showDialog(
context: context,
builder: (BuildContext) {
return AlertDialog(
contentPadding: const EdgeInsets
.fromLTRB(
16.0,
16.0,
16.0,
0.0), // Ubah padding konten dialog
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(
15), // Ubah radius border dialog
),
title: Column(
crossAxisAlignment:
CrossAxisAlignment.center,
children: [
Text(
'Payment Success',
style:
GoogleFonts.quicksand(
textStyle:
const TextStyle(
fontSize: 15,
fontWeight:
FontWeight.bold,
color: Color.fromARGB(
255, 33, 32, 32),
),
),
),
Image.asset(
'assets/centang.png')
],
),
content: Column(
crossAxisAlignment:
CrossAxisAlignment.center,
mainAxisSize: MainAxisSize.min,
children: [
Text(
'Thanks for your register',
style:
GoogleFonts.quicksand(
textStyle:
const TextStyle(
fontSize: 15,
fontWeight:
FontWeight.bold,
color: Color.fromARGB(
255, 33, 32, 32),
),
),
),
const SizedBox(
height: 10,
)
],
),
actions: [
TextButton(
// onPressed: () {
// Navigator.of(context).pop();
// },
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) =>
PageClass(
dataKelas:
myData)),
);
},
child: Padding(
padding:
const EdgeInsets.only(
bottom: 15),
child: Container(
width: double.infinity,
height: 30,
decoration: BoxDecoration(
borderRadius:
BorderRadius
.circular(12),
color: const Color
.fromARGB(
255, 55, 53, 53),
),
child: Align(
alignment:
Alignment.center,
child: Text(
'Course Now',
style: GoogleFonts
.quicksand(
textStyle:
const TextStyle(
fontSize: 16,
fontWeight:
FontWeight
.bold,
color: Color
.fromARGB(
255,
191,
188,
188),
),
),
),
),
),
),
),
],
);
;
});
},
child: Padding(
padding:
const EdgeInsets.only(bottom: 15),
child: Container(
width: double.infinity,
height: 30,
decoration: BoxDecoration(
borderRadius:
BorderRadius.circular(12),
color: const Color.fromARGB(
255, 55, 53, 53),
),
child: Align(
alignment: Alignment.center,
child: Text(
'Pay',
style: GoogleFonts.quicksand(
textStyle: const TextStyle(
fontSize: 16,
fontWeight: FontWeight.bold,
color: Color.fromARGB(
255, 191, 188, 188),
),
),
),
),
),
),
),
],
);
},
);
},
child: Container(
width: 130,
height: 20,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(12),
color: const Color.fromARGB(255, 24, 24, 24),
),
child: Center(
child: Text(
'Register Now',
style: GoogleFonts.quicksand(
textStyle: const TextStyle(
fontSize: 15,
color: Color.fromARGB(255, 220, 218, 218),
),
),
),
),
),
),
),
),
],
),
)
],
),
),
);
}
Future<void> registerNow(
String title,
String description,
String category,
String logo,
String level,
int registered,
double rate,
String color,
int price,
String idKelas,
String idUser) async {
DatabaseReference transactionItem =
FirebaseDatabase.instance.ref().child('Transaction');
transactionItem = _databaseTransaction.push();
await _databaseTransaction.child(transactionItem.key.toString()).set({
'title': title,
'description': description,
'category': category,
'logo': logo,
'level': level,
'registered': registered + 1,
'rate': rate,
'color': color,
'price': price,
'id_kelas': idKelas,
'status': 'dipelajari',
'uid': idUser,
'id_transaction': transactionItem.key.toString()
// 'uid': _database.push().key as String
});
}
Future<void> addClassRegistered(
String title,
String description,
String category,
String logo,
String level,
int registered,
double rate,
String color,
int price,
String idKelas) async {
await _database.child(idKelas).set({
'title': title,
'description': description,
'category': category,
'logo': logo,
'level': level,
'registered': registered + 1,
'rate': rate,
'color': color,
'price': price,
'id_kelas': idKelas,
});
}
// Widget buildFeedback(Recommendation recommendation) {
// dynamic myData = widget.dataKelas;
// return Padding(
// padding:
// const EdgeInsets.only(top: 8.0, right: 13, bottom: 8.0, left: 13),
// child: Container(
// width: double.infinity,
// height: 100,
// decoration: BoxDecoration(
// borderRadius: BorderRadius.circular(10),
// color: Colors.white,
// boxShadow: [
// BoxShadow(
// color: Color.fromARGB(255, 117, 116, 116).withOpacity(0.5),
// spreadRadius: 4,
// blurRadius: 5,
// offset: Offset(0, 3),
// ),
// ],
// ),
// child: Row(
// children: [
// Container(
// child: Row(
// children: <Widget>[
// Padding(
// padding: const EdgeInsets.all(8.0),
// child: Column(
// crossAxisAlignment: CrossAxisAlignment.start,
// children: [
// Text(
// recommendation.level +
// '. ' +
// recommendation.registered,
// style: TextStyle(color: Colors.grey),
// ),
// SizedBox(height: 3),
// Row(
// children: [
// RatingBar.builder(
// initialRating: _rating,
// minRating: 1,
// direction: Axis.horizontal,
// allowHalfRating: true,
// itemCount: 1,
// itemSize: 25,
// itemPadding:
// EdgeInsets.symmetric(horizontal: 4.0),
// itemBuilder: (context, _) => Icon(
// Icons.star,
// color: Colors.amber,
// ),
// onRatingUpdate: (rating) {
// setState(() {
// _rating = rating;
// });
// },
// ),
// Text(
// '$_rating',
// style: TextStyle(
// fontSize: 14,
// color: Colors.grey,
// fontWeight: FontWeight.bold),
// ),
// ],
// ),
// ],
// ),
// ),
// ],
// ),
// ),
// ],
// ),
// ),
// );
// }
}
// class CustomDialog2 extends StatelessWidget {
// @override
Widget CustomDialog2(BuildContext context) {
return AlertDialog(
contentPadding: const EdgeInsets.fromLTRB(
16.0, 16.0, 16.0, 0.0), // Ubah padding konten dialog
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(15), // Ubah radius border dialog
),
title: Column(
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Text(
'Payment Success',
style: GoogleFonts.quicksand(
textStyle: const TextStyle(
fontSize: 15,
fontWeight: FontWeight.bold,
color: Color.fromARGB(255, 33, 32, 32),
),
),
),
Image.asset('assets/centang.png')
],
),
content: Column(
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisSize: MainAxisSize.min,
children: [
Text(
'Thanks for your register',
style: GoogleFonts.quicksand(
textStyle: const TextStyle(
fontSize: 15,
fontWeight: FontWeight.bold,
color: Color.fromARGB(255, 33, 32, 32),
),
),
),
const SizedBox(
height: 10,
)
],
),
actions: [
TextButton(
// onPressed: () {
// Navigator.of(context).pop();
// },
onPressed: () {
// Navigator.push(
// context,
// MaterialPageRoute(builder: (context) => const PageClass(dataKelas: context)),
// );
},
child: Padding(
padding: const EdgeInsets.only(bottom: 15),
child: Container(
width: double.infinity,
height: 30,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(12),
color: const Color.fromARGB(255, 55, 53, 53),
),
child: Align(
alignment: Alignment.center,
child: Text(
'Course Now',
style: GoogleFonts.quicksand(
textStyle: const TextStyle(
fontSize: 16,
fontWeight: FontWeight.bold,
color: Color.fromARGB(255, 191, 188, 188),
),
),
),
),
),
),
),
],
);
}
// }
Editor is loading...