Flutter Templates
Cara Membangun Aplikasi Pemesanan Acara dengan Flutter dan Back4App
34 mnt
pendahuluan di dunia yang serba cepat saat ini, mengelola acara dan pemesanan melalui aplikasi mobile menjadi semakin penting aplikasi pemesanan acara memungkinkan pengguna untuk menjelajahi acara yang akan datang, memesan tiket, memilih kursi, dan mengelola pemesanan mereka dengan lancar dalam tutorial ini, anda akan belajar bagaimana cara membuat aplikasi pemesanan acara yang lengkap menggunakan flutter untuk frontend dan back4app sebagai layanan backend pada akhir tutorial ini, anda akan memiliki aplikasi fungsional yang menampilkan daftar acara dengan detail memungkinkan pengguna untuk melihat jadwal acara dan informasi tempat memungkinkan pemesanan tiket dengan pemilihan kursi memproses pembayaran dengan aman (integrasi dengan gateway pembayaran) mengelola profil pengguna, termasuk riwayat pemesanan dan preferensi mari kita mulai! prasyarat untuk menyelesaikan tutorial ini, anda akan membutuhkan flutter sdk terinstal di mesin lokal anda ikuti panduan instalasi flutter https //flutter dev/docs/get started/install pengetahuan dasar tentang dart dan flutter jika anda baru mengenal flutter, pertimbangkan untuk mengikuti tutorial pengantar flutter https //flutter dev/docs/get started/codelab akun back4app daftar untuk akun gratis di back4app https //www back4app com/ back4app flutter sdk terintegrasi ke dalam proyek anda anda dapat belajar cara mengaturnya dengan mengikuti panduan back4app flutter https //www back4app com/docs/flutter/parse sdk/flutter setup editor kode seperti visual studio code atau android studio node js dan npm terinstal untuk menjalankan fungsi cloud back4app instal dari situs resmi node js https //nodejs org/ langkah 1 – menyiapkan backend back4app dalam langkah ini, anda akan menyiapkan proyek back4app anda, membuat kelas (tabel) yang diperlukan, dan mengonfigurasi backend untuk menyimpan data acara, informasi tiket, dan profil pengguna 1 1 buat aplikasi back4app baru masuk ke akun back4app anda klik pada "buat aplikasi baru" masukkan nama aplikasi (misalnya, "eventbookingapp") dan pilih ikon aplikasi klik "buat" 1 2 konfigurasi kunci aplikasi navigasi ke dasbor aplikasi anda klik pada "pengaturan aplikasi" > "keamanan & kunci" catat id aplikasi dan kunci klien anda akan memerlukan ini untuk menginisialisasi parse sdk di aplikasi flutter anda 1 3 definisikan model data anda perlu membuat kelas berikut di back4app acara menyimpan detail acara tempat menyimpan informasi tempat tiket mengelola ketersediaan dan pemesanan tiket pengguna mengelola profil pengguna (kelas default) buat kelas acara di sidebar kiri, klik pada "database" untuk membuka data browser klik pada "create a class" pilih "custom" , masukkan "event" sebagai nama kelas, dan klik "create class" tambahkan kolom berikut ke kelas event nama (string) deskripsi (string) tanggal (date) gambar (file) tempat (pointer to venue) harga (number) buat kelas venue ulangi langkah untuk membuat kelas baru bernama "venue" tambahkan kolom berikut nama (string) alamat (string) kapasitas (number) denahtempatduduk (file) buat kelas tiket buat kelas baru bernama "tiket" tambahkan kolom berikut acara (pointer ke acara) pengguna (pointer ke pengguna) nomorkursi (string) harga (number) sudahdipesan (boolean) 1 4 aktifkan autentikasi pengguna di sidebar kiri, klik pada "pengaturan server" > "pengaturan umum" di bawah "autentikasi" , pastikan bahwa "aktifkan izin tingkat kelas" dicentang konfigurasikan izin kelas pengguna untuk memungkinkan pengguna mendaftar dan masuk 1 5 siapkan fungsi cloud (opsional untuk pemrosesan pembayaran) untuk integrasi pembayaran, anda mungkin perlu menulis fungsi cloud langkah ini akan tergantung pada gateway pembayaran yang anda pilih (misalnya, stripe, paypal) lihat dokumentasi back4app tentang fungsi kode cloud https //www back4app com/docs/platform/parse cloudcode langkah 2 – menginisialisasi proyek flutter dalam langkah ini, anda akan menyiapkan proyek flutter dan mengintegrasikan back4app parse sdk 2 1 buat proyek flutter baru buka terminal anda dan jalankan flutter create event booking app navigasikan ke direktori proyek cd event booking app 2 2 tambahkan dependensi buka pubspec yaml dan tambahkan dependensi berikut dependencies flutter sdk flutter cupertino icons ^1 0 2 parse server sdk flutter ^4 0 1 provider ^6 0 0 \# add any additional packages you need, e g , http, image picker, etc jalankan flutter pub get untuk menginstal paket 2 3 inisialisasi parse sdk di lib/main dart , impor paket yang diperlukan dan inisialisasi parse import 'package\ flutter/material dart'; import 'package\ parse server sdk flutter/parse server sdk dart'; void main() async { widgetsflutterbinding ensureinitialized(); const keyapplicationid = 'your back4app application id'; const keyclientkey = 'your back4app client key'; const keyparseserverurl = 'https //parseapi back4app com'; await parse() initialize( keyapplicationid, keyparseserverurl, clientkey keyclientkey, debug true, autosendsessionid true, ); runapp(myapp()); } class myapp extends statelesswidget { // build your app's ui here } ganti 'your back4app application id' dan 'your back4app client key' dengan kunci anda yang sebenarnya dari back4app langkah 3 – mengimplementasikan autentikasi pengguna pengguna perlu mendaftar dan masuk untuk memesan acara dan mengelola profil mereka 3 1 buat layar autentikasi buat dua file dart baru di lib/ login screen dart signup screen dart layar masuk dart import 'package\ flutter/material dart'; import 'package\ parse server sdk flutter/parse server sdk dart'; class loginscreen extends statefulwidget { @override loginscreenstate createstate() => loginscreenstate(); } class loginscreenstate extends state\<loginscreen> { final texteditingcontroller usernamecontroller = texteditingcontroller(); final texteditingcontroller passwordcontroller = texteditingcontroller(); void douserlogin() async { final username = usernamecontroller text trim(); final password = passwordcontroller text trim(); final user = parseuser(username, password, null); var response = await user login(); if (response success) { // navigate to home screen navigator pushreplacementnamed(context, '/home'); } else { // show error message showerror(response error! message); } } void showerror(string message) { // implement a method to show error messages } @override widget build(buildcontext context) { // build your login ui here } } layar daftar dart import 'package\ flutter/material dart'; import 'package\ parse server sdk flutter/parse server sdk dart'; class signupscreen extends statefulwidget { @override signupscreenstate createstate() => signupscreenstate(); } class signupscreenstate extends state\<signupscreen> { final texteditingcontroller usernamecontroller = texteditingcontroller(); final texteditingcontroller passwordcontroller = texteditingcontroller(); void douserregistration() async { final username = usernamecontroller text trim(); final password = passwordcontroller text trim(); final user = parseuser(username, password, null); var response = await user signup(); if (response success) { // navigate to home screen navigator pushreplacementnamed(context, '/home'); } else { // show error message showerror(response error! message); } } void showerror(string message) { // implement a method to show error messages } @override widget build(buildcontext context) { // build your sign up ui here } } 3 2 perbarui main dart dengan rute class myapp extends statelesswidget { @override widget build(buildcontext context) { return materialapp( title 'event booking app', initialroute '/login', routes { '/login' (context) => loginscreen(), '/signup' (context) => signupscreen(), '/home' (context) => homescreen(), // add other routes as needed }, ); } } 3 2 perbarui main dart dengan rute 3 3 implementasi layar utama buat file home screen dart di mana pengguna yang terautentikasi diarahkan import 'package\ flutter/material dart'; class homescreen extends statelesswidget { @override widget build(buildcontext context) { // build your home screen ui here } } langkah 4 – menampilkan acara ambil acara dari back4app dan tampilkan dalam daftar 4 1 buat model acara buat kelas dart event dart di lib/models/ import 'package\ parse server sdk flutter/parse server sdk dart'; class event extends parseobject implements parsecloneable { event() super( keytablename); event clone() this(); static const string keytablename = 'event'; static const string keyname = 'name'; static const string keydescription = 'description'; static const string keydate = 'date'; static const string keyimage = 'image'; static const string keyvenue = 'venue'; static const string keyprice = 'price'; @override clone(map\<string, dynamic> map) => event clone() fromjson(map); string? get name => get\<string>(keyname); string? get description => get\<string>(keydescription); datetime? get date => get\<datetime>(keydate); parsefilebase? get image => get\<parsefilebase>(keyimage); parseobject? get venue => get\<parseobject>(keyvenue); double? get price => get\<double>(keyprice); } 4 2 ambil acara di layar utama di home screen dart , ambil acara dan tampilkan import 'package\ flutter/material dart'; import 'models/event dart'; import 'package\ parse server sdk flutter/parse server sdk dart'; class homescreen extends statefulwidget { @override homescreenstate createstate() => homescreenstate(); } class homescreenstate extends state\<homescreen> { future\<list\<event>> getevents() async { querybuilder\<event> queryevents = querybuilder\<event>(event()) orderbydescending('date'); final parseresponse apiresponse = await queryevents query(); if (apiresponse success && apiresponse results != null) { return apiresponse results as list\<event>; } else { return \[]; } } @override widget build(buildcontext context) { return scaffold( appbar appbar( title text('events'), ), body futurebuilder\<list\<event>>( future getevents(), builder (context, snapshot) { if (snapshot hasdata) { list\<event> events = snapshot data!; return listview\ builder( itemcount events length, itembuilder (context, index) { event event = events\[index]; return listtile( title text(event name ?? 'no title'), subtitle text(event date? tolocal() tostring() ?? ''), ontap () { // navigate to event details navigator push( context, materialpageroute( builder (context) => eventdetailsscreen(event event), ), ); }, ); }, ); } else if (snapshot haserror) { return center(child text('error loading events')); } else { return center(child circularprogressindicator()); } }, ), ); } } 4 3 buat layar detail acara buat event details screen dart import 'package\ flutter/material dart'; import 'models/event dart'; class eventdetailsscreen extends statelesswidget { final event event; eventdetailsscreen({required this event}); void bookticket(buildcontext context) { // implement ticket booking logic navigator push( context, materialpageroute( builder (context) => seatselectionscreen(event event), ), ); } @override widget build(buildcontext context) { // build ui to display event details return scaffold( appbar appbar( title text(event name ?? 'event details'), ), body column( children \[ // display event image, description, date, venue, etc text(event description ?? ''), elevatedbutton( onpressed () => bookticket(context), child text('book ticket'), ), ], ), ); } } langkah 5 – mengimplementasikan pemilihan kursi izinkan pengguna untuk memilih kursi sebelum memesan 5 1 buat layar pemilihan kursi buat seat selection screen dart import 'package\ flutter/material dart'; import 'models/event dart'; class seatselectionscreen extends statelesswidget { final event event; seatselectionscreen({required this event}); // mock data for seats final list\<string> seats = list generate(100, (index) => 'seat ${index + 1}'); @override widget build(buildcontext context) { // build ui for seat selection return scaffold( appbar appbar( title text('select seats'), ), body gridview\ builder( griddelegate slivergriddelegatewithfixedcrossaxiscount( crossaxiscount 5, ), itemcount seats length, itembuilder (context, index) { string seat = seats\[index]; return gesturedetector( ontap () { // handle seat selection // navigate to payment screen navigator push( context, materialpageroute( builder (context) => paymentscreen(event event, seat seat), ), ); }, child card( child center(child text(seat)), ), ); }, ), ); } } langkah 6 – memproses pembayaran integrasikan gateway pembayaran untuk memproses pembayaran tiket dengan aman 6 1 pilih gateway pembayaran untuk tutorial ini, kami akan mengasumsikan penggunaan stripe https //stripe com/docs/payments 6 2 siapkan akun stripe dan dapatkan kunci api daftar untuk akun stripe https //dashboard stripe com/register dapatkan kunci publik dan kunci rahasia 6 3 tambahkan ketergantungan stripe tambahkan stripe payment paket ke pubspec yaml dependencies stripe payment ^1 0 9 jalankan flutter pub get 6 4 implementasi layar pembayaran buat payment screen dart import 'package\ flutter/material dart'; import 'package\ stripe payment/stripe payment dart'; import 'models/event dart'; class paymentscreen extends statefulwidget { final event event; final string seat; paymentscreen({required this event, required this seat}); @override paymentscreenstate createstate() => paymentscreenstate(); } class paymentscreenstate extends state\<paymentscreen> { void initstate() { super initstate(); stripepayment setoptions( stripeoptions( publishablekey 'your stripe publishable key', // optionally set other options ), ); } void startpayment() async { // implement payment logic // create payment method paymentmethod paymentmethod = await stripepayment paymentrequestwithcardform( cardformpaymentrequest(), ); // process the payment using a cloud function or your server // for simplicity, we'll assume payment is successful saveticket(); } void saveticket() async { // save ticket information to back4app final ticket = parseobject('ticket') set('event', widget event) set('user', await parseuser currentuser()) set('seatnumber', widget seat) set('price', widget event price) set('isbooked', true); await ticket save(); // navigate to confirmation screen or display success message } @override widget build(buildcontext context) { // build payment ui return scaffold( appbar appbar( title text('payment'), ), body center( child elevatedbutton( onpressed startpayment, child text('pay \\$${widget event price}'), ), ), ); } } catatan pemrosesan pembayaran memerlukan penanganan data sensitif yang aman dalam aplikasi produksi, anda harus memproses pembayaran dengan aman menggunakan server atau fungsi cloud anda sendiri langkah 7 – mengelola profil pengguna izinkan pengguna untuk melihat dan mengelola pemesanan serta preferensi mereka 7 1 buat layar profil buat profile screen dart import 'package\ flutter/material dart'; import 'package\ parse server sdk flutter/parse server sdk dart'; class profilescreen extends statelesswidget { future\<list\<parseobject>> getusertickets() async { final user = await parseuser currentuser(); querybuilder\<parseobject> querytickets = querybuilder\<parseobject>(parseobject('ticket')) whereequalto('user', user) includeobject(\['event']); final parseresponse apiresponse = await querytickets query(); if (apiresponse success && apiresponse results != null) { return apiresponse results as list\<parseobject>; } else { return \[]; } } @override widget build(buildcontext context) { // build profile ui return scaffold( appbar appbar( title text('my profile'), ), body futurebuilder\<list\<parseobject>>( future getusertickets(), builder (context, snapshot) { if (snapshot hasdata) { list\<parseobject> tickets = snapshot data!; return listview\ builder( itemcount tickets length, itembuilder (context, index) { parseobject ticket = tickets\[index]; parseobject event = ticket get('event'); return listtile( title text(event get\<string>('name') ?? 'no event name'), subtitle text('seat ${ticket get\<string>('seatnumber')}'), ); }, ); } else if (snapshot haserror) { return center(child text('error loading tickets')); } else { return center(child circularprogressindicator()); } }, ), ); } } 7 2 tambahkan navigasi ke layar profil di home screen dart atau drawer navigasi utama, tambahkan tautan ke layar profil iconbutton( icon icon(icons person), onpressed () { navigator push( context, materialpageroute(builder (context) => profilescreen()), ); }, ), langkah 8 – menguji aplikasi jalankan aplikasi anda menggunakan flutter run uji fungsionalitas berikut daftar dan masuk lihat daftar acara lihat detail acara pilih kursi dan lanjutkan ke pembayaran proses pembayaran (mode uji jika memungkinkan) lihat pemesanan di profil kesimpulan selamat! anda telah membangun aplikasi pemesanan acara yang lengkap menggunakan flutter dan back4app aplikasi ini memungkinkan pengguna untuk menjelajahi acara, memesan tiket dengan pemilihan tempat duduk, memproses pembayaran, dan mengelola profil serta pemesanan mereka dari sini, anda dapat meningkatkan aplikasi anda dengan menambahkan notifikasi push untuk pengingat acara mengimplementasikan pencarian dan penyaringan untuk acara meningkatkan ui/ux dengan desain dan animasi yang lebih baik mengamankan pemrosesan pembayaran dengan validasi sisi server untuk informasi lebih lanjut tentang fitur flutter dan back4app, lihat dokumentasi flutter https //flutter dev/docs dokumentasi back4app https //www back4app com/docs panduan kode cloud parse server https //docs parseplatform org/cloudcode/guide/ dengan mengintegrasikan flutter dengan back4app, anda memanfaatkan kombinasi yang kuat untuk membangun aplikasi mobile yang skalabel dan kaya fitur dengan efisien