Flutter
...
Data Queries
Mengimplementasikan Kueri Data Relasional Parse di Flutter
12 mnt
mengurai kuery relasional di flutter pendahuluan anda sudah melihat cara menyimpan objek data relasional menggunakan tipe data parse pointer dan parse relations anda telah belajar bahwa di parse adalah mungkin untuk menggunakan parseobject mana pun sebagai nilai dalam parseobject lain, yang membangun hubungan di antara mereka secara internal, kerangka kerja parse akan menyimpan objek yang dirujuk di satu tempat untuk menjaga konsistensi itu dapat memberi anda kekuatan ekstra saat membangun dan menjalankan kueri yang kompleks juga, anda sudah belajar bagaimana menggunakan querybuilder dengan get dapat mengambil satu parseobject dari back4app ada banyak cara lain untuk mengambil data dengan querybuilder dalam panduan ini, anda akan mendalami kelas querybuilder dan melihat metode yang dapat anda gunakan untuk membangun kuery relasional anda akan menggunakan kelas basis data sederhana dengan beberapa data yang dipalsukan untuk melakukan kuery menggunakan flutter di back4app prasyarat untuk menyelesaikan tutorial ini, anda akan membutuhkan android studio https //developer android com/studio atau vs code terinstal (dengan plugin dart dan flutter) sebuah aplikasi dibuat di back4app catatan ikuti tutorial aplikasi parse baru untuk belajar cara membuat aplikasi parse di back4app sebuah aplikasi flutter yang terhubung ke back4app catatan ikuti instal parse sdk di proyek flutter untuk membuat proyek flutter yang terhubung ke back4app sebuah perangkat (atau perangkat virtual) yang menjalankan android atau ios tujuan mengquery data relasional yang disimpan di back4app dari aplikasi flutter 1 memahami kelas querybuilder setiap operasi query parse menggunakan tipe objek querybuilder, yang akan membantu anda mengambil data spesifik dari database anda di seluruh aplikasi untuk membuat querybuilder baru, anda perlu melewatkan sebagai parameter subclass parseobject yang diinginkan, yang akan berisi hasil query anda sangat penting untuk mengetahui bahwa querybuilder hanya akan diselesaikan setelah memanggil metode query retrieve, jadi sebuah query dapat disiapkan dan beberapa modifikasi dapat dirangkai sebelum benar benar dipanggil 1 // this will create your query 2 querybuilder\<parseobject> querybook = 3 querybuilder\<parseobject>(parseobject('book')); 4 5 // the query will resolve only after calling this method 6 final parseresponse apiresponse = await querybook query(); 7	 8 if (apiresponse success && apiresponse results != null) { 9 10 } else { 11 12 } anda dapat membaca lebih lanjut tentang kelas querybuilder di sini pada dokumentasi resmi menggunakan konsol javascript di back4app di dalam dasbor aplikasi back4app anda, anda akan menemukan konsol api yang sangat berguna di mana anda dapat menjalankan kode javascript secara langsung dalam panduan ini, anda akan menggunakan untuk menyimpan objek data di back4app di dasbor utama aplikasi anda, pergi ke core >api console >javascript 2 simpan data di back4app untuk menjalankan kueri di panduan ini, anda perlu terlebih dahulu mengisi aplikasi anda dengan beberapa data kelas kelasnya adalah author , book , publisher dan bookstore yang book memiliki hubungan 1\ n dengan publisher dan n\ n dengan author , dan bookstore memiliki hubungan n\ n dengan book berikut adalah parse object kode pembuatan kelas, jadi silakan jalankan di konsol api anda 1 // add objects and create tables 2 // authors 3 const authora = new parse object('author'); 4 authora set('name', 'aaron writer'); 5 await authora save(); 6 7 const authorb = new parse object('author'); 8 authorb set('name', 'beatrice novelist'); 9 await authorb save(); 10 11 const authorc = new parse object('author'); 12 authorc set('name', 'casey columnist'); 13 await authorc save(); 14 15 const authord = new parse object('author'); 16 authord set('name', 'gary stur'); 17 await authord save(); 18 19 const authore = new parse object('author'); 20 authore set('name', 'mary sue'); 21 await authore save(); 22 23 // publishers 24 const publishera = new parse object('publisher'); 25 publishera set('name', 'acacia publishings'); 26 await publishera save(); 27 28 const publisherb = new parse object('publisher'); 29 publisherb set('name', 'birch distributions'); 30 await publisherb save(); 31 32 const publisherc = new parse object('publisher'); 33 publisherc set('name', 'acacia distributions'); 34 await publisherc save(); 35 36 37 // books 38 const booka = new parse object('book'); 39 booka set('title', 'a love story'); 40 booka set('publisher', publishera); 41 booka set('publishingdate', new date('05/07/1998')); 42 const bookarelation = booka relation("authors"); 43 bookarelation add(authora); 44 await booka save(); 45 46 const bookb = new parse object('book'); 47 bookb set('title', 'benevolent elves'); 48 bookb set('publisher', publisherb); 49 bookb set('publishingdate', new date('11/31/2008')); 50 const bookbrelation = bookb relation("authors"); 51 bookbrelation add(authorb); 52 await bookb save(); 53 54 const bookc = new parse object('book'); 55 bookc set('title', 'can you believe it?'); 56 bookc set('publisher', publisherb); 57 bookc set('publishingdate', new date('08/21/2018')); 58 const bookcrelation = bookc relation("authors"); 59 bookcrelation add(authora); 60 bookcrelation add(authorc); 61 await bookc save(); 62 63 // bookstore 64 const bookstorea = new parse object('bookstore'); 65 bookstorea set('name', 'books of love'); 66 const bookstorearelation = bookstorea relation("books"); 67 bookstorearelation add(booka); 68 await bookstorea save(); 69 70 const bookstoreb = new parse object('bookstore'); 71 bookstoreb set('name', 'fantasy books'); 72 const bookstorebrelation = bookstoreb relation("books"); 73 bookstorebrelation add(bookb); 74 await bookstoreb save(); 75 76 const bookstorec = new parse object('bookstore'); 77 bookstorec set('name', 'general books'); 78 const bookstorecrelation = bookstorec relation("books"); 79 bookstorecrelation add(booka); 80 bookstorecrelation add(bookc); 81 await bookstorec save(); 82 83 console log('success'); setelah menjalankan kode ini, anda sekarang seharusnya memiliki kelas author, publisher, book, dan bookstore di database anda kelas baru anda harus terlihat seperti ini mari kita sekarang melihat contoh dari setiap metode querybuilder, bersama dengan penjelasan singkat tentang apa yang mereka lakukan 3 kuery data sekarang anda memiliki kelas yang terisi, kita sekarang dapat melakukan beberapa kueri relasional sekarang anda telah mengisi semua kelas, kita sekarang dapat melakukan beberapa kueri relasional di dalamnya mari kita mulai dengan memfilter hasil buku berdasarkan penerbit, mencari yang termasuk dalam penerbit “acacia publishings” (atau “penerbit a”) dengan pointer relasional menggunakan metode dasar whereequalto 1 // get publishera object 2 final querybuilder\<parseobject> publisherquerya = 3 querybuilder\<parseobject>(parseobject('publisher')) 4 whereequalto('name', 'acacia publishings'); 5 6 final parseresponse publisherresponse = await publisherquerya query(); 7 if (!publisherresponse success) { 8 return; 9 } 10 final publishera = publisherresponse results? first as parseobject; 11 12 // query books with publishera 13 final querybuilder\<parseobject> bookquery = 14 querybuilder\<parseobject>(parseobject('book')) 15 whereequalto('publisher', publishera); 16 17 final parseresponse bookresponse = await bookquery query(); 18 if (!bookresponse success) { 19 return; 20 } 21 22 for (var book in bookresponse results as list\<parseobject>) { 23 print(book get('title')); 24 } sekarang mari kita kueri objek bookstore yang mengandung objek buku dengan tanggal penerbitan lebih besar dari 01/01/2010, menggunakan kueri dalam dengan metode wheregreaterthan dan kemudian metode wherematchesquery 1 // create inner book query 2 final querybuilder\<parseobject> bookquery = 3 querybuilder\<parseobject>(parseobject('book')) 4 wheregreaterthan('publishingdate', datetime(2010, 01, 01)); 5 6 // query bookstore using inner book query 7 final querybuilder\<parseobject> bookstorequery = 8 querybuilder\<parseobject>(parseobject('bookstore')) 9 wherematchesquery('books', bookquery); 10 11 final parseresponse bookstoreresponse = await bookstorequery query(); 12 if (!bookstoreresponse success) { 13 return; 14 } 15 16 for (var b in bookstoreresponse results as list\<parseobject>) { 17 print(b get('name')); 18 } sekarang mari kita buat kueri lain, mencari penulis yang berhubungan dengan buku can you believe it ?, menggunakan whererelatedto 1 // get book object 2 final querybuilder\<parseobject> bookquery = 3 querybuilder\<parseobject>(parseobject('book')) 4 whereequalto('title', 'can you believe it?'); 5 6 final parseresponse bookresponse = await bookquery query(); 7 if (!bookresponse success) { 8 return; 9 } 10 11 final book = bookresponse results? first as parseobject; 12 13 // get author with relation with book can you believe it? 14 final querybuilder\<parseobject> authorsquery = 15 querybuilder\<parseobject>(parseobject('author')) 16 whererelatedto('authors', 'book', book objectid!); 17 18 final parseresponse authorresponse = await authorsquery query(); 19 20 // let's show the results 21 if (authorresponse success && authorresponse results != null) { 22 for (var a in authorresponse results! as list\<parseobject>) { 23 print(a get('name')); 24 } 25 } 4 kuery dari flutter sekarang mari kita gunakan kueri contoh kita di dalam aplikasi flutter, dengan antarmuka sederhana yang memiliki daftar yang menunjukkan hasil dan juga 3 tombol untuk memanggil kueri buka proyek flutter anda, pergi ke file main dart, bersihkan semua kode, dan ganti dengan 1 import 'package\ flutter/cupertino dart'; 2 import 'package\ flutter/material dart'; 3 import 'package\ parse server sdk flutter/parse server sdk dart'; 4 5 void main() async { 6 widgetsflutterbinding ensureinitialized(); 7 8 final keyapplicationid = 'your app id here'; 9 final keyclientkey = 'your client key here'; 10 final keyparseserverurl = 'https //parseapi back4app com'; 11 12 await parse() initialize(keyapplicationid, keyparseserverurl, 13 clientkey keyclientkey, debug true); 14 15 runapp(materialapp( 16 title 'flutter geopoint', 17 debugshowcheckedmodebanner false, 18 home homepage(), 19 )); 20 } 21 22 class homepage extends statefulwidget { 23 @override 24 homepagestate createstate() => homepagestate(); 25 } 26 27 class homepagestate extends state\<homepage> { 28 list\<parseobject> results = \<parseobject>\[]; 29 double selecteddistance = 3000; 30 31 void doquerypointer() async { 32 // get publishera object 33 final querybuilder\<parseobject> publisherquerya = 34 querybuilder\<parseobject>(parseobject('publisher')) 35 whereequalto('name', 'acacia publishings'); 36 37 final parseresponse publisherresponse = await publisherquerya query(); 38 if (!publisherresponse success) { 39 return; 40 } 41 final publishera = publisherresponse results? first as parseobject; 42 43 // query books with publishera 44 final querybuilder\<parseobject> bookquery = 45 querybuilder\<parseobject>(parseobject('book')) 46 whereequalto('publisher', publishera); 47 48 final parseresponse bookresponse = await bookquery query(); 49 50 if (!bookresponse success) { 51 setstate(() { 52 results clear(); 53 }); 54 } else { 55 setstate(() { 56 results = bookresponse results as list\<parseobject>; 57 }); 58 } 59 } 60 61 void doquerymatches() async { 62 // create inner book query 63 final querybuilder\<parseobject> bookquery = 64 querybuilder\<parseobject>(parseobject('book')) 65 wheregreaterthan('publishingdate', datetime(2010, 01, 01)); 66 67 // query bookstore using inner book query 68 final querybuilder\<parseobject> bookstorequery = 69 querybuilder\<parseobject>(parseobject('bookstore')) 70 wherematchesquery('books', bookquery); 71 72 final parseresponse bookstoreresponse = await bookstorequery query(); 73 if (!bookstoreresponse success) { 74 setstate(() { 75 results clear(); 76 }); 77 } else { 78 setstate(() { 79 results = bookstoreresponse results as list\<parseobject>; 80 }); 81 } 82 } 83 84 void doqueryrelatedto() async { 85 // get book object 86 final querybuilder\<parseobject> bookquery = 87 querybuilder\<parseobject>(parseobject('book')) 88 whereequalto('title', 'can you believe it?'); 89 90 final parseresponse bookresponse = await bookquery query(); 91 if (!bookresponse success) { 92 return; 93 } 94 95 final book = bookresponse results? first as parseobject; 96 97 // get author with relation with book can you believe it? 98 final querybuilder\<parseobject> authorsquery = 99 querybuilder\<parseobject>(parseobject('author')) 100 whererelatedto('authors', 'book', book objectid!); 101 102 final parseresponse authorresponse = await authorsquery query(); 103 104 if (!authorresponse success) { 105 setstate(() { 106 results clear(); 107 }); 108 } else { 109 setstate(() { 110 results = authorresponse results as list\<parseobject>; 111 }); 112 } 113 } 114 115 void doclearresults() async { 116 setstate(() { 117 results clear(); 118 }); 119 } 120 121 @override 122 widget build(buildcontext context) { 123 return scaffold( 124 body padding( 125 padding const edgeinsets all(16 0), 126 child column( 127 crossaxisalignment crossaxisalignment stretch, 128 children \[ 129 container( 130 height 200, 131 child image network( 132 'https //blog back4app com/wp content/uploads/2017/11/logo b4a 1 768x175 1 png'), 133 ), 134 center( 135 child const text('flutter on back4app geopoint', 136 style textstyle(fontsize 18, fontweight fontweight bold)), 137 ), 138 sizedbox( 139 height 8, 140 ), 141 container( 142 height 50, 143 child elevatedbutton( 144 onpressed doquerypointer, 145 child text('query a'), 146 style elevatedbutton stylefrom(primary colors blue)), 147 ), 148 sizedbox( 149 height 8, 150 ), 151 container( 152 height 50, 153 child elevatedbutton( 154 onpressed doquerymatches, 155 child text('query b'), 156 style elevatedbutton stylefrom(primary colors blue)), 157 ), 158 sizedbox( 159 height 8, 160 ), 161 container( 162 height 50, 163 child elevatedbutton( 164 onpressed doqueryrelatedto, 165 child text('query c'), 166 style elevatedbutton stylefrom(primary colors blue)), 167 ), 168 sizedbox( 169 height 8, 170 ), 171 container( 172 height 50, 173 child elevatedbutton( 174 onpressed doclearresults, 175 child text('clear results'), 176 style elevatedbutton stylefrom(primary colors blue)), 177 ), 178 sizedbox( 179 height 8, 180 ), 181 text( 182 'result list ${results length}', 183 ), 184 expanded( 185 child listview\ builder( 186 itemcount results length, 187 itembuilder (context, index) { 188 final o = results\[index]; 189 return container( 190 padding const edgeinsets all(4), 191 decoration 192 boxdecoration(border border all(color colors black)), 193 child text('${o tostring()}'), 194 ); 195 }), 196 ) 197 ], 198 ), 199 )); 200 } 201 } temukan id aplikasi dan kredensial kunci klien anda dengan menavigasi ke dasbor aplikasi anda di situs web back4app https //www back4app com/ perbarui kode anda di main dart dengan nilai applicationid dan clientkey proyek anda di back4app keyapplicationid = id aplikasi keyclientkey = kunci klien jalankan proyek, dan aplikasi akan dimuat seperti yang ditunjukkan dalam gambar kesimpulan di akhir panduan ini, anda telah mempelajari cara kerja kueri relasional di parse dan cara melakukannya di back4app dari aplikasi flutter di panduan berikutnya, anda akan belajar cara bekerja dengan pengguna di parse