More
Cara Menggunakan Isolates di Flutter dengan Back4app untuk Menangani Pemrosesan Data Berat
13 mnt
pendahuluan flutter adalah framework yang kuat untuk membangun aplikasi lintas platform, tetapi seperti banyak framework mobile, ia menjalankan semua kode pada satu thread secara default thread ini, yang dikenal sebagai thread ui, bertanggung jawab untuk merender ui aplikasi anda ketika tugas berat seperti pemrosesan data atau penanganan file terjadi di thread ui, mereka dapat menyebabkan aplikasi lag atau "jank," yang mengarah pada pengalaman pengguna yang buruk untuk mengatasi ini, dart menyediakan fitur yang disebut isolates isolates memungkinkan anda menjalankan perhitungan mahal di thread terpisah, menjaga ui anda tetap responsif dalam tutorial ini, kita akan menjelajahi cara menggunakan isolates dalam aplikasi flutter untuk menangani tugas pemrosesan data berat, seperti mendeserialisasi file json besar yang diambil dari backend back4app prasyarat untuk menyelesaikan tutorial ini, anda akan membutuhkan akun back4app daftar untuk akun gratis di back4app com https //www back4app com lingkungan pengembangan flutter yang diatur di mesin lokal anda ikuti panduan instalasi flutter https //flutter dev/docs/get started/install jika anda belum mengaturnya pengetahuan dasar tentang dart, widget flutter, dan pemrograman asinkron langkah 1 – menyiapkan backend back4app anda buat proyek back4app masuk ke akun back4app anda https //www back4app com/ dan buat proyek baru buat kelas parse untuk tutorial ini, buat kelas parse bernama record yang menyimpan sejumlah besar data judul (string) judul dari catatan deskripsi (string) deskripsi dari catatan metadata (json) konten metadata besar yang terkait dengan catatan isi kelas dengan data contoh tambahkan beberapa catatan ke kelas record dengan objek json besar di bidang metadata ini akan mensimulasikan jenis pemrosesan data yang dapat menyebabkan gangguan dalam aplikasi nyata dapatkan kredensial back4app anda arahkan ke pengaturan proyek anda untuk mengambil id aplikasi dan kunci klien anda, yang anda perlukan untuk menghubungkan aplikasi flutter anda ke back4app langkah 2 – menyiapkan proyek flutter anda buat proyek flutter baru buka terminal atau command prompt anda dan jalankan flutter create isolate example tambahkan dependensi buka pubspec yaml dan tambahkan dependensi berikut dependencies flutter sdk flutter parse server sdk flutter latest version jalankan flutter pub get untuk menginstal dependensi ini inisialisasi parse di aplikasi anda di lib/main dart , impor sdk parse dan inisialisasi di fungsi main import 'package\ flutter/material dart'; import 'package\ parse server sdk flutter/parse server sdk flutter dart'; void main() async { widgetsflutterbinding ensureinitialized(); const keyapplicationid = 'your back4app app id'; const keyclientkey = 'your back4app client key'; const keyparseserverurl = 'https //parseapi back4app com'; await parse() initialize(keyapplicationid, keyparseserverurl, clientkey keyclientkey, autosendsessionid true); runapp(myapp()); } class myapp extends statelesswidget { @override widget build(buildcontext context) { return materialapp( home recordscreen(), ); } } import 'package\ flutter/material dart'; import 'package\ parse server sdk flutter/parse server sdk flutter dart'; void main() async { widgetsflutterbinding ensureinitialized(); const keyapplicationid = 'your back4app app id'; const keyclientkey = 'your back4app client key'; const keyparseserverurl = 'https //parseapi back4app com'; await parse() initialize(keyapplicationid, keyparseserverurl, clientkey keyclientkey, autosendsessionid true); runapp(myapp()); } class myapp extends statelesswidget { @override widget build(buildcontext context) { return materialapp( home recordscreen(), ); } } import 'package\ flutter/material dart'; import 'package\ parse server sdk flutter/parse server sdk flutter dart'; void main() async { widgetsflutterbinding ensureinitialized(); const keyapplicationid = 'your back4app app id'; const keyclientkey = 'your back4app client key'; const keyparseserverurl = 'https //parseapi back4app com'; await parse() initialize(keyapplicationid, keyparseserverurl, clientkey keyclientkey, autosendsessionid true); runapp(myapp()); } class myapp extends statelesswidget { @override widget build(buildcontext context) { return materialapp( home recordscreen(), ); } } ganti 'your back4app app id' dan 'your back4app client key' dengan kredensial back4app anda yang sebenarnya langkah 3 – mengambil data dari back4app buat widget recordscreen di lib/main dart , buat layar baru yang mengambil data dari back4app class recordscreen extends statefulwidget { @override recordscreenstate createstate() => recordscreenstate(); } class recordscreenstate extends state\<recordscreen> { list\<parseobject>? records; bool isloading = true; @override void initstate() { super initstate(); fetchrecords(); } future\<void> fetchrecords() async { final query = querybuilder\<parseobject>(parseobject('record')); final response = await query query(); if (response success && response results != null) { setstate(() { records = response results as list\<parseobject>; isloading = false; }); } } @override widget build(buildcontext context) { return scaffold( appbar appbar(title text('records')), body isloading ? center(child circularprogressindicator()) listview\ builder( itemcount records! length, itembuilder (context, index) { final record = records!\[index]; return listtile( title text(record get\<string>('title') ?? 'no title'), subtitle text(record get\<string>('description') ?? 'no description'), ); }, ), ); } } kode ini mengambil semua catatan dari record kelas di back4app dan menampilkannya dalam sebuah daftar langkah 4 – memindahkan pemrosesan data berat ke isolate menggunakan isolate untuk mende serialisasi json besar misalkan metadata field di setiap catatan berisi objek json besar yang perlu dide serialisasi untuk menghindari pemblokiran thread ui, kita akan menggunakan isolate untuk melakukan tugas ini import 'dart\ isolate'; import 'dart\ convert'; future\<map\<string, dynamic>> deserializejsoninisolate(string jsonstring) async { // spawning an isolate to perform json decoding final result = await isolate run(() { return jsondecode(jsonstring) as map\<string, dynamic>; }); return result; } future\<void> processrecord(parseobject record) async { string metadata = record get\<string>('metadata') ?? '{}'; // offload json deserialization to an isolate map\<string, dynamic> decodeddata = await deserializejsoninisolate(metadata); // do something with the decoded data print('processed metadata for ${record get\<string>('title')}'); } integrasikan pemrosesan isolate ke dalam aplikasi perbarui recordscreen widget untuk memproses metadata setiap catatan menggunakan isolate class recordscreenstate extends state\<recordscreen> { list\<parseobject>? records; bool isloading = true; @override void initstate() { super initstate(); fetchandprocessrecords(); } future\<void> fetchandprocessrecords() async { final query = querybuilder\<parseobject>(parseobject('record')); final response = await query query(); if (response success && response results != null) { list\<parseobject> fetchedrecords = response results as list\<parseobject>; // process each record's metadata using an isolate for (var record in fetchedrecords) { await processrecord(record); } setstate(() { records = fetchedrecords; isloading = false; }); } } @override widget build(buildcontext context) { return scaffold( appbar appbar(title text('records')), body isloading ? center(child circularprogressindicator()) listview\ builder( itemcount records! length, itembuilder (context, index) { final record = records!\[index]; return listtile( title text(record get\<string>('title') ?? 'no title'), subtitle text(record get\<string>('description') ?? 'no description'), ); }, ), ); } } implementasi ini mengambil catatan dari back4app, memindahkan tugas deserialisasi json yang berat ke dalam isolate, dan memperbarui ui setelah pemrosesan selesai langkah 5 – menguji dan menjalankan aplikasi anda jalankan aplikasi anda menggunakan flutter run anda seharusnya melihat daftar catatan yang diambil dari back4app metadata untuk setiap catatan diproses di isolate terpisah, memastikan ui tetap halus dan responsif verifikasi kinerja dengan menguji file json besar di bidang metadata amati bagaimana penggunaan isolate mencegah jank dan menjaga ui tetap responsif kesimpulan dalam tutorial ini, anda belajar bagaimana menggunakan isolate di flutter untuk menangani tugas pemrosesan data berat, seperti mendeserialisasi file json besar dengan memindahkan tugas tugas ini ke isolate, anda menjaga thread ui tetap bebas untuk menangani rendering, yang menghasilkan aplikasi yang lebih halus dan responsif mengintegrasikan back4app sebagai backend memungkinkan anda untuk mengelola dan mengambil data dengan efisien, sementara model isolate dart memastikan bahwa aplikasi anda tetap berkinerja baik bahkan saat menangani operasi yang kompleks untuk informasi lebih lanjut tentang menggunakan flutter dengan back4app, lihat dokumentasi back4app https //www back4app com/docs dan dokumentasi flutter https //flutter dev/docs selamat coding!