Apa hubungan antara widget stateful dan stateless di Flutter?


108

Widget stateful didefinisikan sebagai widget apa pun yang mengubah statusnya selama masa pakainya. Tapi itu adalah praktik yang sangat umum untuk StatelessWidgetmemiliki anak StatefulWidgetsebagai salah satu anaknya. Tidak StatelessWidgetmenjadi stateful jika memiliki StatefulWidgetsebagai salah satu anaknya?

Saya mencoba melihat dokumentasi sebagai bagian dari kode StatelessWidget, tetapi tidak dapat menemukan bagaimana a StatelessWidgetdapat memiliki Statefulwidgetsebagai anaknya dan masih tetap ada StatelessWidget.

Apa hubungan dan perbedaan antara widget stateful dan stateless di Flutter?


2
Anda dapat membuat tata letak dari berbagai jenis widget, namun itu tidak berarti Anda mewarisi karakteristik komposisi untuk memengaruhi setiap widget. Yang saya maksud adalah Anda dapat memiliki Container yang stateless yang memiliki turunan dari Container lain yang dideklarasikan sebagai StatefulWidget di tempat lain, keadaan container hanya akan mempengaruhi satu komponen ini saja. Jadi, ini semua tentang memiliki komposisi dari berbagai jenis widget, setiap fungsi sesuai kebutuhan Anda.
aziza

1
Untuk mengacaukan segalanya bahkan lebih, ada 3 jenis widget: InheritedWidget; Yang bisa membuat StatelessWidgetpembaruan.
Rémi Rousselet

Jawaban:


104

Sebuah StatelessWidget tidak akan pernah kembali dengan sendirinya (tapi dapat dari peristiwa eksternal). Sebuah StatefulWidget bisa. Itu adalah aturan emasnya.

TAPI semua jenis widget dapat dicat ulang kapan saja.

Stateless hanya berarti bahwa semua propertinya tidak dapat diubah dan satu-satunya cara untuk mengubahnya adalah dengan membuat instance baru dari widget itu. Misalnya tidak mengunci pohon widget.

Tapi Anda tidak perlu peduli dengan tipe anak Anda. Itu tidak berdampak apa pun pada Anda.


11
(Relatif baru untuk kerangka kerja). Apa perbedaan antara rebuilddanrepaint
pengguna462455

Juga dari komentar dalam kode flutter framework, ternyata StateFulWidgets juga tidak dapat diubah.
pengguna462455

3
Membangun widget pada dasarnya adalah panggilan ke metode "build", diikuti dengan membuat / memperbarui renderbox yang sesuai; yang dilanjutkan dengan proses pengecatan. Yang akan mencetak renderbox ini di layar.
Rémi Rousselet

kelas yang mewarisi "StatefulWidget" tidak dapat diubah. Tapi status (State <YourWidget>) itu sendiri bisa berubah.
Rémi Rousselet

1
@ RémiRousselet Widget stateful dan stateless membangun ulang setiap frame, menurut flutter.dev/docs/get-started/flutter-for/…
Matt

84

StatefulWidget vs StatelessWidget.

masukkan deskripsi gambar di sini

StatelessWidget - Sebuah widget yang tidak membutuhkan status yang bisa berubah.

  • Widget stateless adalah widget yang mendeskripsikan bagian dari antarmuka pengguna dengan membuat konstelasi widget lain yang mendeskripsikan antarmuka pengguna secara lebih konkret. Proses pembangunan berlanjut secara rekursif hingga deskripsi antarmuka pengguna benar-benar konkret (misalnya, seluruhnya terdiri dari RenderObjectWidgets, yang mendeskripsikan RenderObjects konkret).

  • The statelesswidget berguna ketika bagian dari antarmuka pengguna Anda gambarkan tidak bergantung pada apa pun selain informasi konfigurasi di obyek itu sendiri dan BuildContext di mana widget tersebut meningkat. Untuk komposisi yang dapat berubah secara dinamis, misalnya karena memiliki status clock-driven internal, atau bergantung pada beberapa status sistem, pertimbangkan untuk menggunakan StatefulWidget.

class GreenFrog extends StatelessWidget {
  const GreenFrog({ Key key }) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Container(color: const Color(0xFF2DBD3A));
  }
}

StatefulWidget - Widget yang statusnya bisa berubah.

  • Widget stateful berguna jika bagian dari antarmuka pengguna yang Anda gambarkan dapat berubah secara dinamis.

Saat Flutter membuat StatefulWidget, itu membuat objek Status. Objek ini adalah tempat semua status yang bisa berubah untuk widget itu diadakan.

Konsep negara didefinisikan oleh dua hal:

1) Data yang digunakan oleh widget mungkin berubah.

2) Data tidak dapat dibaca secara sinkron saat widget dibuat. (Semua status harus ditetapkan pada saat metode build dipanggil).

Siklus hidup StatefulWidget

Siklus hidup memiliki langkah-langkah sederhana berikut:

  1. createState () - Ketika Flutter diinstruksikan untuk membuat StatefulWidget, itu segera memanggil createState().
  • Membuat status yang bisa berubah untuk widget ini di lokasi tertentu di pohon.

  • Subclass harus mengganti metode ini untuk mengembalikan instance yang baru dibuat dari subclass Status terkait:

@override
_MyState createState() => _MyState();
  1. mount == true - Semua widget memiliki this.mountedproperti bool . Ternyata benar saat buildContextditetapkan. Ini adalah kesalahan untuk menelepon setStatesaat widget dilepas. Apakah objek Status saat ini ada di dalam pohon.
  • Setelah membuat objek State dan sebelum memanggil initState, framework "me-mount" objek State dengan mengaitkannya dengan a
    BuildContext. Objek State tetap dipasang hingga framework
    memanggil dispose(), setelah itu framework tidak akan pernah meminta
    objek State untuk dibuat lagi.

  • Ini adalah kesalahan untuk memanggil setState kecuali mount benar.

bool get mounted => _element != null;
  1. initState () - Ini adalah metode pertama yang dipanggil ketika widget dibuat (tentu saja setelah konstruktor kelas.)

initStatedipanggil sekali dan hanya sekali. Itu harus meneleponsuper.initState().

  • Inisialisasi data yang bergantung pada BuildContext spesifik untuk instance widget yang dibuat.

  • Inisialisasi properti yang mengandalkan 'induk' widget ini di pohon.

  • Berlangganan Stream,, ChangeNotifiersatau objek lain yang dapat mengubah data di widget ini.

@override
initState() {
  super.initState();
  // Add listeners to this class
  cartItemStream.listen((data) {
    _updateWidget(data);
  });
}
  1. didChangeDependencies () - Dipanggil ketika dependensi objek Status ini berubah.
  • Metode ini juga dipanggil segera setelahnya initState. Aman untuk menelepon BuildContext.inheritFromWidgetOfExactTypedari metode ini.

  • Subclass jarang mengganti metode ini karena framework selalu memanggil build setelah perubahan dependensi. Beberapa subclass mengganti metode ini karena mereka perlu melakukan beberapa pekerjaan yang mahal (misalnya, pengambilan jaringan) ketika dependensinya berubah, dan pekerjaan itu akan terlalu mahal untuk dilakukan untuk setiap build.

@protected
@mustCallSuper
void didChangeDependencies() { }
  1. build () - Menjelaskan bagian dari antarmuka pengguna yang diwakili oleh widget.

Kerangka kerja memanggil metode ini dalam sejumlah situasi berbeda:

  • Setelah menelepon initState.
  • Setelah menelepon didUpdateWidget.
  • Setelah menerima panggilan ke setState.
  • Setelah ketergantungan objek Status ini berubah (misalnya, InheritedWidget yang direferensikan oleh perubahan build sebelumnya).
  • Setelah memanggil nonaktifkan dan kemudian memasukkan kembali objek Negara ke pohon di lokasi lain.
  • Kerangka kerja mengganti subtree di bawah widget ini dengan widget yang dikembalikan oleh metode ini, baik dengan memperbarui subtree yang ada atau dengan menghapus subtree dan meluaskan subtree baru, bergantung pada apakah widget yang dikembalikan oleh metode ini dapat memperbarui root subtree yang ada , sebagaimana ditentukan dengan menelepon Widget.canUpdate.

  • Biasanya implementasi mengembalikan konstelasi widget yang baru dibuat yang dikonfigurasi dengan informasi dari konstruktor widget ini, BuildContext yang diberikan , dan status internal objek Status ini.

@override
  Widget build(BuildContext context, MyButtonState state) {
    ... () { print("color: $color"); } ...
  }
  1. didUpdateWidget () - Dipanggil setiap kali konfigurasi widget berubah.
  • Jika widget induk membangun kembali dan meminta lokasi ini dalam pembaruan hierarki untuk menampilkan widget baru dengan jenis waktu proses dan Widget.key yang sama, kerangka kerja akan memperbarui properti widget dari objek Status ini untuk merujuk ke widget baru dan kemudian memanggil ini metode dengan widget sebelumnya sebagai argumen.

  • Ganti metode ini untuk merespons ketika widget berubah (misalnya, untuk memulai animasi implisit).

  • Framework selalu memanggil build setelah memanggil didUpdateWidget, yang berarti setiap panggilan ke setState di didUpdateWidget bersifat redundan.

@mustCallSuper
@protected
void didUpdateWidget(covariant T oldWidget) { }
  1. setState () - Setiap kali Anda mengubah status internal objek State, buat perubahan dalam fungsi yang Anda teruskan ke setState:
  • Memanggil setState memberi tahu framework bahwa status internal objek ini telah berubah dengan cara yang mungkin memengaruhi antarmuka pengguna di subpohon ini, yang menyebabkan framework menjadwalkan build untuk
    objek Status ini .

  • Jika Anda hanya mengubah status secara langsung tanpa memanggil setState , framework mungkin tidak menjadwalkan build dan antarmuka pengguna untuk subpohon ini mungkin tidak diperbarui untuk mencerminkan status baru.

setState(() { _myState = newValue });
  1. deactivate () - Deactivate dipanggil ketika Status dihapus dari pohon, tetapi mungkin dimasukkan kembali sebelum perubahan frame saat ini selesai. Metode ini ada pada dasarnya karena objek Negara dapat dipindahkan dari satu titik di pohon ke pohon lainnya.
  • Kerangka kerja memanggil metode ini setiap kali ia menghapus objek Status ini dari pohon. Dalam beberapa kasus, kerangka kerja akan memasukkan kembali objek Status ke bagian lain dari pohon (misalnya, jika subpohon yang berisi objek Status ini dicangkokkan dari satu lokasi di pohon ke pohon lainnya). Jika itu terjadi, kerangka kerja akan memastikan bahwa ia memanggil build untuk memberi objek Negara kesempatan untuk beradaptasi dengan lokasi barunya di pohon. Jika kerangka kerja memasukkan kembali subpohon ini, kerangka akan melakukannya sebelum akhir bingkai animasi di mana subpohon tersebut telah dihapus dari pohon. Karena alasan ini, objek State dapat menunda pelepasan sebagian besar resource hingga framework memanggil metode pembuangannya.

Ini jarang digunakan.

@protected
@mustCallSuper
void deactivate() { }
  1. dispose () - Dipanggil saat objek ini dihapus dari pohon secara permanen.
  • Framework memanggil metode ini saat objek Status ini tidak akan pernah dibuat lagi. Setelah panggilan framework dispose(), objek State dianggap unmount dan properti mount false. Ini adalah kesalahan untuk memanggil setState pada saat ini. Tahap siklus hidup ini adalah terminal: tidak ada cara untuk memasang kembali objek Status yang telah dibuang.

  • Subclass harus mengganti metode ini untuk melepaskan resource apa pun yang dipertahankan oleh objek ini (misalnya, menghentikan animasi aktif).

@protected
@mustCallSuper
void dispose() {
  assert(_debugLifecycleState == _StateLifecycle.ready);
  assert(() { _debugLifecycleState = _StateLifecycle.defunct; return true; }());
}

masukkan deskripsi gambar di sini

Untuk info lebih lanjut buka di sini , di sini


26

Dari dokumentasi di flutter.io :

... Hal penting yang perlu diperhatikan di sini adalah pada intinya widget Stateless dan Stateful berperilaku sama. Mereka membangun kembali setiap bingkai, perbedaannya adalah StatefulWidget memiliki objek Status yang menyimpan data status di seluruh bingkai dan memulihkannya.

Jika Anda ragu, selalu ingat aturan ini: Jika widget berubah (pengguna berinteraksi dengannya, misalnya) itu stateful. Namun, jika seorang anak bereaksi terhadap perubahan, induk yang memuatnya masih bisa menjadi widget Stateless jika induknya tidak bereaksi terhadap perubahan.


14

Seperti disebutkan dalam dokumen flutter

Apa gunanya?

Beberapa widget stateful, dan beberapa stateless. Jika widget berubah — pengguna berinteraksi dengannya, misalnya — itu stateful. Status widget terdiri dari nilai-nilai yang dapat berubah, seperti nilai slider saat ini atau apakah kotak centang dicentang. Status widget disimpan dalam objek Status, memisahkan status widget dari tampilannya. Saat status widget berubah, objek status memanggil setState (), memberi tahu framework untuk menggambar ulang widget.

Sebuah widget stateless tidak memiliki keadaan internal untuk mengelola. Icon, IconButton, dan Text adalah contoh widget stateless, yang merupakan subclass StatelessWidget.

Sebuah widget stateful dinamis. Pengguna dapat berinteraksi dengan widget stateful (dengan mengetik ke dalam formulir, atau menggerakkan slider, misalnya), atau berubah seiring waktu (mungkin data feed menyebabkan UI diperbarui). Checkbox, Radio, Slider, InkWell, Form, dan TextField adalah contoh widget stateful, yang merupakan subclass StatefulWidget.

https://flutter.io/tutorials/interactive/#stateful-stateless


10

Status adalah informasi yang (1) dapat dibaca secara sinkron saat widget dibuat dan (2) mungkin berubah selama masa pakai widget. Ini adalah tanggung jawab pelaksana widget untuk memastikan bahwa Status segera diberi tahu ketika status tersebut berubah, menggunakan State.setState.

StatefulWidget :

Widget stateful adalah widget yang mendeskripsikan bagian antarmuka pengguna dengan membuat konstelasi widget lain yang mendeskripsikan antarmuka pengguna secara lebih konkret. Proses pembangunan berlanjut secara rekursif hingga deskripsi antarmuka pengguna benar-benar konkret (misalnya, seluruhnya terdiri dari RenderObjectWidgets, yang mendeskripsikan RenderObjects konkret).

Widget stateful berguna ketika bagian dari antarmuka pengguna yang Anda gambarkan dapat berubah secara dinamis, misalnya karena memiliki status internal clock-driven, atau bergantung pada beberapa status sistem. Untuk komposisi yang hanya bergantung pada informasi konfigurasi dalam objek itu sendiri dan BuildContext tempat widget dimekarkan, pertimbangkan untuk menggunakan StatelessWidget.

Instance StatefulWidget itu sendiri tidak dapat diubah dan menyimpan statusnya yang dapat berubah baik dalam objek State terpisah yang dibuat oleh metode createState, atau dalam objek yang berlangganan State tersebut, misalnya objek Stream atau ChangeNotifier, yang referensi disimpan di bidang akhir pada StatefulWidget diri.

StatelessWidget :

Widget stateless adalah widget yang mendeskripsikan bagian dari antarmuka pengguna dengan membuat konstelasi widget lain yang mendeskripsikan antarmuka pengguna secara lebih konkret. Proses pembangunan berlanjut secara rekursif hingga deskripsi antarmuka pengguna benar-benar konkret (misalnya, seluruhnya terdiri dari RenderObjectWidgets, yang mendeskripsikan RenderObjects konkret).

Widget tanpa status berguna jika bagian dari antarmuka pengguna yang Anda gambarkan tidak bergantung pada apa pun selain informasi konfigurasi dalam objek itu sendiri dan BuildContext tempat widget tersebut digelembungkan. Untuk komposisi yang dapat berubah secara dinamis, misalnya karena memiliki status clock-driven internal, atau bergantung pada beberapa status sistem, pertimbangkan untuk menggunakan StatefulWidget.


9

Widget Stateless adalah widget statis. Anda hanya perlu melewatkan beberapa properti sebelum menginisialisasi Widget Stateless. Mereka tidak bergantung pada perubahan data apa pun atau perubahan perilaku apa pun. Sebagai contoh. Teks, Ikon, Tombol Raised adalah Widget Tanpa Status.

Widget Stateful adalah widget dinamis, mereka dapat diperbarui selama runtime berdasarkan tindakan pengguna atau perubahan data. Jika sebuah Widget dapat mengubah statusnya selama waktu berjalan maka widget tersebut akan menjadi widget yang stateful.

Sunting 15/11/2018

Widget tanpa status dapat dirender ulang jika input / data eksternal berubah (data eksternal menjadi data yang dilewatkan melalui konstruktor). Karena Stateless Widgets tidak memiliki status, maka akan ditampilkan sekali dan tidak akan diupdate sendiri, tetapi hanya akan diupdate saat data eksternal berubah.

Sedangkan Stateful Widgets memiliki status internal dan dapat dirender ulang jika input data berubah atau jika status Widget berubah.

Widget stateless dan stateful memiliki siklus proses yang berbeda.


Bahkan setelah mengirimkan data baru dari luar ke Statelesswidget, kita dapat mengubahnya juga dalam waktu proses tetapi itu tidak disebut Statefulwidget (berbeda dengan baris terakhir Anda).
CopsOnRoad

Bisakah Anda menjelaskan bagaimana widget Stateless dapat "diperbarui ketika data eksternal berubah"? (Dengan "data eksternal adalah data yang melewati konstruktor".) Akankah konstruktor tidak hanya dipanggil sekali? Bagaimana data melewati perubahan konstruktor?
pengguna1596274

8

Saya bisa memikirkan analogi yang sangat sederhana. Anda memiliki beberapa perabot dengan buku, dekorasi, dan TV. Perabotannya tidak bernegara, tidak ada yang tidak bergerak. Di TV, di sisi lain, Anda dapat menyalakan, mematikan, mengganti saluran, memutar film jika ada DVD yang terpasang, dll. TV memiliki kondisi internal yang mempengaruhi perilakunya. Di furnitur Anda tidak memiliki negara bagian. Kehadiran TV di furnitur tidak menambah statusnya. Semoga ini membantu.


Ini tidak menjawab pertanyaan spesifik penanya.
Yesaya

1
Ini adalah analogi yang bagus!
William Terrill

7

Jawaban untuk pertanyaan Stack Overflow - statefulness vs statelessness .

Di Flutter, perbedaannya adalah widget stateless dapat ditentukan oleh semua argumen konstruktor saja. Jika Anda membuat dua widget stateless menggunakan argumen yang sama, maka keduanya akan sama.

Namun, widget stateful belum tentu sama dengan widget lain yang dibuat dengan argumen konstruktor yang sama. Mungkin dalam keadaan yang berbeda.
Sebenarnya, widget stateful tidak dapat diubah (stateless) itu sendiri, tetapi Flutter mengelola objek status terpisah dan mengaitkannya dengan widget, seperti yang dijelaskan dalam dokumen StatefulWidget . Artinya, saat Flutter membuat ulang widget stateful, Flutter akan memeriksa apakah harus menggunakan kembali objek status sebelumnya dan akan, jika diinginkan, melampirkan objek status tersebut ke widget.

Widget induk tidak memiliki kewarganegaraan karena tidak peduli dengan status anaknya. Anak stateful itu sendiri (atau secara teknis Flutter) akan menjaga negaranya sendiri.
Pada tingkat tinggi, saya setuju bahwa ini membuat widget induk menjadi stateful, karena dua orang tua mungkin berisi dua anak dengan status berbeda dan dengan demikian secara teknis berbeda. Tapi dari sudut pandang Flutter, ia membangun widget induk tanpa mempedulikan statusnya dan hanya ketika membangun turunannya akan mempertimbangkan statefullness-nya.


5

Apa itu widget Stateful dan Stateless?

TL; DR: Sebuah widget yang memungkinkan Anda menyegarkan layar adalah widget Stateful. Sebuah widget yang bukan Stateless.

Lebih detailnya, widget dinamis dengan konten yang dapat berubah haruslah widget Stateful. Widget Stateless hanya dapat mengubah konten ketika parameter diubah dan karenanya perlu dilakukan di atas titik lokasinya dalam hierarki widget. Layar atau widget yang berisi konten statis harus menjadi widget tanpa kewarganegaraan, tetapi untuk mengubah konten, harus stateful.

Saya menemukan konten yang relatif ini pada medium story yang menarik. Sama-sama!


4

Stateless : Status widget HANYA membuat SEKALI, kemudian dapat memperbarui nilai tetapi tidak menyatakan secara eksplisit. Ini jelas dari struktur sana juga. Itulah mengapa hanya ada satu kelas yang diperpanjang StatelessWidget. Jadi jika saya katakan, mereka tidak akan pernah bisa menjalankan build()metode lagi.

Stateful : Widget dapat memperbarui STATE (lokal) & nilainya beberapa kali setelah peristiwa dipicu . Karena itu, implementasinya juga berbeda. Dalam hal ini, kita memiliki 2 kelas, satu adalah StatefulWidget& yang lainnya adalah pengendali implementasi Negara yaitu State<YourWidget>. Jadi jika saya katakan, mereka dapat menjalankan build()kembali metode lagi & lagi berdasarkan peristiwa yang dipicu.

Diagram di bawah ini akan membantu.

masukkan deskripsi gambar di sini


1

disclaimer: - mulai mengerjakan flutter dari minggu lalu :)

widget stateless dan statefull memiliki siklus hidupnya sendiri untuk membuat dan memperbarui UI. Namun Anda dapat menggunakan stateless atau statefull untuk merender UI tetapi secara praktis statefull lebih berguna ketika ui sepenuhnya atau sebagian bergantung dengan data eksternal (seperti - merender daftar menggunakan api) sedangkan menggunakan widget stateless untuk merender ui statis seperti layar input lainnya praktik yang baik.


1
Saya pikir penulis bermaksud sebaliknya: · D
Roc Boronat

1

Saat menulis aplikasi, biasanya Anda akan membuat widget baru yang merupakan subkelas dari StatelessWidget atau StatefulWidget

Berikut beberapa Perbedaan Antara StatelessWidgetdan StatefulWidgetWidget:

Widget Tanpa Status:

  1. Widget yang memiliki status tidak dapat diubah.
  2. Widget Stateless adalah widget statis.
  3. Mereka tidak bergantung pada perubahan data apa pun atau perubahan perilaku apa pun.
  4. Widget Tanpa Status tidak memiliki status, mereka akan dirender sekali dan tidak akan diperbarui sendiri, tetapi hanya akan diperbarui saat data eksternal berubah.
  5. Untuk Contoh: Text, Icon, RaisedButtonadalah Stateless Widgets.

Widget Stateful:

  1. Widget yang memiliki status bisa berubah.
  2. Widget Stateful adalah widget dinamis.
  3. Mereka dapat diperbarui selama runtime berdasarkan tindakan pengguna atau perubahan data.
  4. Stateful Widgets memiliki status internal dan dapat dirender ulang jika input data berubah atau jika status Widget berubah.
  5. Untuk Contoh: Checkbox, Radio Button, Slideryang Stateful Widget

Nama yang sama digunakan di kedua heading: 2nd adalah Stateful Widget.
Sourabh Lebih lanjut

sekarang saya mengubahnya, @ SourabhLebih banyak terima kasih atas indikasi
Paresh Mangukiya

0

Dengan kata sederhana:

Seperti yang kita ketahui, setiap widget adalah tampilan dalam flutter. Yang memiliki kelas tersendiri. Ketika kita menggunakan kelas-kelas itu, kita membuat objeknya. Kami memberikan nilai pada variabel / properti yang berbeda. Ex. Kami membuat widget Teks sehingga kami dapat memberikannya String, Warna, Ukuran Font, keluarga Font. Jadi dengan memberikan ini, kami mendefinisikan propertinya sambil membuatnya. Hingga saat ini, widget Stateless atau Stateful tetap sama tetapi,

Ketika kita ingin mengubah / mengupdate propertinya (katakanlah String atau Color) lagi dan lagi setelahnya maka itu harus widget Stateful.

Dan ketika kami tidak ingin mengubah propertinya setelah menentukan pertama kali, itu adalah widget tanpa negara.

itu berarti kami peduli dengan data yang disimpan / dikontrol / ditampilkan oleh widget.

Jadi Stateless adalah data yang lebih sedikit dan Stateful adalah data yang penuh.

Sekarang jika Anda mendefinisikan kelas yang stateless itu berarti kelas ini tidak peduli / memiliki variabel di dalamnya atau mengatakan data di kelasnya sendiri yaitu tingkat kelas tetapi dapat memiliki widget / kelas lain di dalamnya yang peduli tentang data yaitu Stateful . Sehingga tidak berdampak apapun satu sama lain.

Harap perbaiki saya jika saya salah di sini.


0

Apa itu widget Stateful dan Stateless?

Widget Tanpa Status: Widget tanpa status dibuat hanya jika berasal dari perubahan induk.

Stateful Widgets: Status widget penuh menahan status widget dan dapat dibangun kembali ketika status berubah.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.