Flutter'daki durum bilgili ve durum bilgisiz pencere öğeleri arasındaki ilişki nedir?


105

Durum bilgisi olan bir pencere öğesi, yaşam süresi içinde durumunu değiştiren herhangi bir pencere öğesi olarak tanımlanır. Ancak a'nın çocuklarından biri olarak StatelessWidgetsahip olması çok yaygın bir uygulamadır StatefulWidget. Çocuklarından biri StatelessWidgetolsaydı durum bilgisi olmaz mı StatefulWidget?

Belgelerinin kodunun bir parçası olarak incelemeye çalıştım StatelessWidget, ancak a'nın çocukları olarak nasıl sahip StatelessWidgetolabileceğini Statefulwidgetve hala nasıl kalacağını anlayamadım StatelessWidget.

Flutter'daki durum bilgili ve durum bilgisiz pencere öğeleri arasındaki ilişki ve fark nedir?


2
Mizanpajınızı farklı widget türlerinden oluşturabilirsiniz, ancak bu, her bir widget'ı etkilemek için kompozisyonun özelliklerini miras aldığınız anlamına gelmez. Demek istediğim, başka bir yerde StatefulWidget olarak bildirilen başka bir Container'ın alt öğesi olan durumsuz bir Container'a sahip olabilirsiniz, kabın durumu yalnızca bu bileşeni etkileyecektir. Yani, her biri ihtiyaç duyduğunuz şekilde işlev gören farklı türde widget'lardan bir kompozisyona sahip olmakla ilgilidir.
aziza

1
İşleri daha da karıştırmak için, 3. tür bir widget vardır InheritedWidget:; Hangi StatelessWidgetgüncelleme yapabilir .
Rémi Rousselet

Yanıtlar:


103

Bir StatelessWidget asla kendi başına yeniden oluşturulmaz (ancak harici olaylardan yapılabilir). Bir StatefulWidget can. Altın kural budur.

ANCAK, her tür widget her zaman yeniden boyanabilir .

Durumsuz, yalnızca tüm özelliklerinin değişmez olduğu ve bunları değiştirmenin tek yolunun bu küçük aracın yeni bir örneğini oluşturmak olduğu anlamına gelir . Örneğin, pencere öğesi ağacını kilitlemez.

Ama çocuklarınızın tipini önemsememelisiniz. Senin üzerinde hiçbir etkisi yok.


11
(Çerçeve için nispeten yeni). Arasındaki fark nedir rebuildverepaint
user462455

Ayrıca flutter çerçeve kodundaki yorumlardan da, görünüşe göre StateFulWidgets de değişmez.
user462455

3
Bir parçacığın oluşturulması temelde bir "inşa" yöntemi çağrısıdır, ardından karşılık gelen render kutusunu yaratır / günceller; bunu boyama süreci takip eder. Bu render kutularını ekrana yazdıracak.
Rémi Rousselet

"StatefulWidget" öğesini devralan sınıflar değişmezdir. Ancak durumun (<YourWidget> Durumu) kendisi değiştirilebilir.
Rémi Rousselet

1
@ RémiRousselet Durum bilgisi olan ve durum bilgisi olmayan araçlar flutter.dev/docs/get-started/flutter-for/… 'e
Matt

83

StatefulWidget ve StatelessWidget.

görüntü açıklamasını buraya girin

StatelessWidget - Değiştirilebilir durum gerektirmeyen bir widget.

  • Durum bilgisi olmayan bir pencere öğesi, kullanıcı arayüzünü daha somut bir şekilde tanımlayan diğer pencere öğelerinin bir takımyıldızını oluşturarak kullanıcı arayüzünün bir bölümünü tanımlayan bir pencere öğesidir. Oluşturma süreci, kullanıcı arayüzünün tanımı tamamen somut hale gelene kadar yinelemeli olarak devam eder (örneğin, tamamen somut RenderObjects'i tanımlayan tamamen RenderObjectWidgets'dan oluşur).

  • statelessSizin tarif edilmektedir arayüz kullanıcı parçası nesnenin kendisi ve yapılandırma bilgisi dışında bir bağlı değildir Kullanıcı widget yararlıdır BuildContext Widget şişirilmiş olduğu. Dinamik olarak değişebilen kompozisyonlar için, örneğin dahili bir saat güdümlü duruma sahip olma nedeniyle veya bazı sistem durumuna bağlı olarak kullanmayı düşünün StatefulWidget.

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

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

StatefulWidget - Değiştirilebilir duruma sahip bir widget.

  • Durum bilgili pencere öğeleri, tanımladığınız kullanıcı arabiriminin parçası dinamik olarak değişebildiği zaman kullanışlıdır.

Flutter a StatefulWidgetoluşturduğunda, bir State nesnesi oluşturur. Bu nesne, o parçacığın tüm değiştirilebilir durumunun tutulduğu yerdir.

Devlet kavramı iki şeyle tanımlanır:

1) Widget tarafından kullanılan veriler değişebilir.

2) Widget oluşturulduğunda veriler eşzamanlı olarak okunamaz. (Tüm durum, oluşturma yöntemi çağrıldığında belirlenmelidir).

StatefulWidget yaşam döngüsü

Yaşam döngüsü aşağıdaki basitleştirilmiş adımlara sahiptir:

  1. createState () - Flutter'a bir StatefulWidget oluşturma talimatı verildiğinde, hemen çağırır createState().
  • Ağaçta belirli bir konumda bu widget için değiştirilebilir durumu oluşturur.

  • Alt sınıflar, ilişkili Durum alt sınıfının yeni oluşturulmuş bir örneğini döndürmek için bu yöntemi geçersiz kılmalıdır:

@override
_MyState createState() => _MyState();
  1. mount == true - Tüm widget'ların bool this.mountedözelliği vardır. Atandığında gerçek olur buildContext. setStateBir parçacığın bağlantısı kesildiğinde arama yapmak bir hatadır . Bu State nesnesinin şu anda bir ağaçta olup olmadığı.
  • Bir State nesnesi yarattıktan sonra ve çağırmadan önce initState, çerçeve State nesnesini a ile ilişkilendirerek "bağlar"
    BuildContext. State nesnesi, çerçeve
    çağrılarına kadar bağlı kalır dispose(), bu sürenin sonunda çerçeve,
    Devlet nesnesinin bir daha inşa etmesini asla istemez .

  • Mount doğru olmadığı sürece setState'i çağırmak bir hatadır.

bool get mounted => _element != null;
  1. initState () - Bu, widget oluşturulduğunda çağrılan ilk yöntemdir (tabii ki sınıf yapıcısından sonra.)

initStatesadece bir kez çağrılır. Aramalısuper.initState().

  • Widget'ın oluşturulan örneği için belirli BuildContext'e dayanan verileri başlatın.

  • Ağaçtaki bu widget'lara bağlı olan özellikleri başlatın.

  • Akışlara ChangeNotifiersveya bu widget'taki verileri değiştirebilecek başka herhangi bir nesneye abone olun .

@override
initState() {
  super.initState();
  // Add listeners to this class
  cartItemStream.listen((data) {
    _updateWidget(data);
  });
}
  1. didChangeDependencies () - Bu State nesnesinin bir bağımlılığı değiştiğinde çağrılır.
  • Bu yöntem hemen ardından da çağrılır initState. BuildContext.inheritFromWidgetOfExactTypeBu yöntemden aramak güvenlidir .

  • Alt sınıflar bu yöntemi nadiren geçersiz kılar çünkü çerçeve her zaman bağımlılık değişikliklerinden sonra build çağırır. Bazı alt sınıflar bu yöntemi geçersiz kılar çünkü bağımlılıkları değiştiğinde bazı pahalı işler (örneğin ağ getirmeleri) yapmaları gerekir ve bu iş her derleme için çok pahalı olur.

@protected
@mustCallSuper
void didChangeDependencies() { }
  1. build () - Kullanıcı arabiriminin pencere öğesi tarafından temsil edilen bölümünü açıklar.

Çerçeve, bu yöntemi birkaç farklı durumda çağırır:

  • Aradıktan sonra initState.
  • Aradıktan sonra didUpdateWidget.
  • İçin bir çağrı aldıktan sonra setState.
  • Bu State nesnesinin bir bağımlılığı değiştikten sonra (örneğin, önceki yapı değişiklikleri tarafından başvurulan bir InheritedWidget).
  • Devre dışı bırakma çağrıldıktan sonra State nesnesini başka bir konumdaki ağaca yeniden yerleştirin.
  • Çerçeve, mevcut alt ağacı güncelleyerek veya alt ağacı kaldırıp yeni bir alt ağacı şişirerek bu pencere aracının altındaki alt ağacı bu yöntemle döndürülen pencere öğesi ile değiştirir, bu yöntemle döndürülen pencere aracının mevcut alt ağacın kökünü güncelleyip güncellememesine bağlı , arayarak belirlendiği gibi Widget.canUpdate.

  • Tipik olarak uygulamalar, bu pencere aracının yapıcısından, verilen BuildContext'ten ve bu Durum nesnesinin dahili durumundan gelen bilgilerle yapılandırılmış yeni oluşturulmuş bir pencere öğesi takımyıldızı döndürür .

@override
  Widget build(BuildContext context, MyButtonState state) {
    ... () { print("color: $color"); } ...
  }
  1. didUpdateWidget () - Widget yapılandırması her değiştiğinde çağrılır.
  • Ana pencere öğesi yeniden oluşturur ve ağaçtaki bu konumun aynı çalışma zamanı türüne ve Widget.key'e sahip yeni bir pencere öğesi görüntülemesini talep ederse, çerçeve bu Durum nesnesinin pencere öğesi özelliğini yeni pencere aracına başvuracak şekilde günceller ve ardından bunu çağırır argüman olarak önceki widget ile yöntem.

  • Widget değiştiğinde yanıt vermek için bu yöntemi geçersiz kılın (ör. Örtük animasyonları başlatmak için).

  • Çerçeve didUpdateWidget'i çağırdıktan sonra her zaman build çağırır, bu da didUpdateWidget içindeki setState çağrılarının gereksiz olduğu anlamına gelir.

@mustCallSuper
@protected
void didUpdateWidget(covariant T oldWidget) { }
  1. setState () - Bir State nesnesinin dahili durumunu her değiştirdiğinizde, ilettiğiniz bir işlevde değişikliği yapın setState:
  • Arayan setState bu nesnenin iç durumu için bir yapı zamanlama çerçeveyi neden bu alt ağaç, kullanıcı arabirimini etkileyebilecek şekilde değiştiğini çerçeve bildirebilmesi
    bu Devlet nesne.

  • SetState'i çağırmadan durumu doğrudan değiştirirseniz, çerçeve bir yapı planlamayabilir ve bu alt ağacın kullanıcı arabirimi yeni durumu yansıtacak şekilde güncellenmeyebilir.

setState(() { _myState = newValue });
  1. deactivate () - Deactivate, ağaçtan Durum kaldırıldığında çağrılır, ancak geçerli çerçeve değişikliği tamamlanmadan önce yeniden eklenebilir. Bu yöntem temelde vardır çünkü State nesneleri bir ağaçtaki bir noktadan diğerine taşınabilir.
  • Çerçeve, bu State nesnesini ağaçtan kaldırdığında bu yöntemi çağırır. Bazı durumlarda çerçeve, State nesnesini ağacın başka bir kısmına yeniden yerleştirecektir (örneğin, bu Durum nesnesini içeren alt ağacın ağaçtaki bir konumdan diğerine aşılanması durumunda). Böyle bir durumda çerçeve, State nesnesine ağaçtaki yeni konumuna uyum sağlaması için bir şans vermek için build çağrısı yapmasını sağlayacaktır. Çerçeve bu alt ağacı yeniden yerleştirirse, bunu alt ağacın ağaçtan kaldırıldığı animasyon karesinin sonundan önce yapacaktır. Bu nedenle, State nesneleri, çerçeve dispose yöntemini çağırana kadar çoğu kaynağı serbest bırakmayı erteleyebilir.

Bu nadiren kullanılır.

@protected
@mustCallSuper
void deactivate() { }
  1. dispose () - Bu nesne ağaçtan kalıcı olarak kaldırıldığında çağrılır.
  • Çerçeve, bu State nesnesi bir daha asla oluşturulmayacağı zaman bu yöntemi çağırır. Çerçeve çağrılarından sonra, dispose()State nesnesi unmounted olarak kabul edilir ve mount özelliği false olur. Bu noktada setState'i çağırmak bir hatadır. Yaşam döngüsünün bu aşaması terminaldir: Elden çıkarılmış bir State nesnesini yeniden bağlamanın bir yolu yoktur.

  • Alt sınıflar, bu nesne tarafından tutulan kaynakları serbest bırakmak için bu yöntemi geçersiz kılmalıdır (örneğin, tüm etkin animasyonları durdurun).

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

görüntü açıklamasını buraya girin

Daha fazla bilgi için gitmek burada burada , burada


26

Flutter.io adresindeki belgelerden :

... Burada dikkat edilmesi gereken önemli nokta, hem Stateless hem de Stateful widget'ların özünde aynı şekilde davranmasıdır. Her çerçeveyi yeniden oluştururlar, aradaki fark, StatefulWidget'in durum verilerini çerçeveler arasında depolayan ve geri yükleyen bir State nesnesine sahip olmasıdır.

Şüpheniz varsa, o zaman her zaman şu kuralı unutmayın: Bir pencere öğesi değişirse (örneğin, kullanıcı onunla etkileşime girerse) durum bilgilidir. Ancak, bir çocuk değişime tepki veriyorsa, üst öğe değişime tepki vermezse, içeren üst öğe yine de Durumsuz bir pencere öğesi olabilir.


14

Flutter belgelerinde bahsedildiği gibi

Amaç ne?

Bazı widget'lar durum bilgisine sahiptir ve bazıları durum bilgisizdir. Bir pencere öğesi değişirse (örneğin, kullanıcı onunla etkileşime girerse) durum bilgilidir. Bir widget'ın durumu, kaydırıcının mevcut değeri veya bir onay kutusunun işaretli olup olmadığı gibi değişebilen değerlerden oluşur. Bir pencere aracının durumu, bir Durum nesnesinde depolanır ve pencere aracının durumunu görünümünden ayırır. Parçacık durumu değiştiğinde, durum nesnesi setState () öğesini çağırarak çerçeveye parçacığı yeniden çizmesini söyler.

Bir Vatansız Widget yönetmek için hiçbir dahili durumu vardır. Icon, IconButton ve Text, StatelessWidget alt sınıfını oluşturan durum bilgisiz widget örnekleridir.

Bir Duruma Widget dinamiktir. Kullanıcı, durum bilgisi olan bir pencere aracıyla etkileşime girebilir (örneğin, bir forma yazarak veya bir kaydırıcıyı hareket ettirerek) veya zamanla değişebilir (belki bir veri beslemesi, kullanıcı arayüzünün güncellenmesine neden olur). Checkbox, Radio, Slider, InkWell, Form ve TextField, StatefulWidget alt sınıfı olan durum bilgili pencere öğelerine örnektir.

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


10

Durum, (1) parçacık oluşturulduğunda eşzamanlı olarak okunabilen ve (2) parçacığın ömrü boyunca değişebilen bilgidir. State.setState kullanarak, bu tür bir durum değiştiğinde Eyaletin derhal bilgilendirilmesini sağlamak pencere öğesi uygulayıcısının sorumluluğundadır.

StatefulWidget :

Durum bilgisi olan bir pencere öğesi, kullanıcı arayüzünü daha somut bir şekilde tanımlayan diğer pencere öğelerinin bir takımyıldızını oluşturarak kullanıcı arayüzünün bir bölümünü tanımlayan bir pencere öğesidir. Oluşturma süreci, kullanıcı arayüzünün tanımı tamamen somut hale gelene kadar yinelemeli olarak devam eder (örneğin, somut RenderObjects'i tanımlayan tamamen RenderObjectWidgets'dan oluşur).

Durum bilgisi olan pencere öğesi, tanımladığınız kullanıcı arabiriminin bir parçası dinamik olarak değişebildiğinde, örneğin, dahili bir saat güdümlü duruma veya bazı sistem durumuna bağlı olarak, kullanışlıdır. Yalnızca nesnenin kendisindeki yapılandırma bilgilerine ve pencere aracının şişirildiği BuildContext'e bağlı kompozisyonlar için StatelessWidget kullanmayı düşünün.

StatefulWidget örneklerinin kendileri değişmezdir ve değiştirilebilir durumlarını ya createState yöntemi tarafından oluşturulan ayrı State nesnelerinde ya da bu State'in abone olduğu nesnelerde (örneğin, başvuruların StatefulWidget üzerindeki son alanlarda depolandığı Stream veya ChangeNotifier nesnelerinde) depolar. kendisi.

DurumsuzWidget :

Durum bilgisi olmayan bir pencere öğesi, kullanıcı arayüzünü daha somut bir şekilde tanımlayan diğer pencere öğelerinin bir takımyıldızını oluşturarak kullanıcı arayüzünün bir bölümünü tanımlayan bir pencere öğesidir. Oluşturma süreci, kullanıcı arayüzünün tanımı tamamen somut hale gelene kadar yinelemeli olarak devam eder (örneğin, somut RenderObjects'i tanımlayan tamamen RenderObjectWidgets'dan oluşur).

Durumsuz pencere öğesi, tanımladığınız kullanıcı arabiriminin parçası, nesnenin kendisindeki ve pencere aracının şişirildiği BuildContext'teki yapılandırma bilgilerinden başka hiçbir şeye bağlı olmadığında kullanışlıdır. Dinamik olarak değişebilen kompozisyonlar için, örneğin dahili saat güdümlü bir duruma sahip olduklarından veya bazı sistem durumlarına bağlı olarak, StatefulWidget kullanmayı düşünün.


9

Durum Bilgisi İçermeyen Widget'lar statik widget'lardır. Durum Bilgisiz Pencere Öğelerini başlatmadan önce yalnızca birkaç özelliği iletmeniz gerekir. Herhangi bir veri değişikliğine veya herhangi bir davranış değişikliğine bağlı değildirler. Örneğin. Text, Icon, RaisedButton Durum Bilgisi İçermeyen Widget'lardır.

Durum Bilgili Widget'lar dinamik widget'lardır, çalışma sırasında kullanıcı eylemine veya veri değişikliğine göre güncellenebilir. Bir Pencere Öğesi çalışma süresi sırasında durumunu değiştirebilirse, durum bilgili pencere öğesi olacaktır.

15/11/2018 Düzenle

Durum Bilgisi İçermeyen Widget'lar , giriş / dış veriler değiştiyse yeniden işleyebilir (dış veriler, yapıcıdan geçen verilerdir). Durum Bilgisiz Pencere Öğelerinin durumu olmadığından, bir kez işlenecekler ve kendilerini güncellemeyecekler, ancak yalnızca dış veriler değiştiğinde güncellenecekler.

Halbuki Durum Bilgili Pencere Öğelerinin dahili bir durumu vardır ve giriş verileri değişirse veya Widget'ın durumu değişirse yeniden işlenebilir.

Hem durum bilgisi olmayan hem de durum bilgisi olan pencere öğelerinin farklı yaşam döngüsü vardır.


Yeni bir veriyi dışarıdan Statelesswidget'a geçirdikten sonra bile çalışma zamanında değiştirebiliriz ancak buna Statefulwidget denmez (son satırınızın aksine).
CopsOnRoad

Durumsuz bir pencere aracının "harici veriler değiştiğinde nasıl güncellenebileceğini" açıklayabilir misiniz? ("Dış veriler, yapıcıdan geçen verilerdir".) Oluşturucu yalnızca bir kez çağrılmayacak mı? Yapıcıdan geçen veriler nasıl değişir?
user1596274

8

Çok basit bir benzetme düşünebilirim. Kitapların, süslemelerin ve televizyonun olduğu bazı mobilyalarınız var. Mobilyalar devletsizdir, hiçbir şey hareket etmez. TV'de, diğer tarafta, onu açabilir, kapatabilir, kanal değiştirebilir, üzerine bir DVD takılıysa bir film oynatabilir, vb. TV'nin davranış şeklini etkileyen bir dahili durumu vardır. Mobilyalarda devletin yok. Televizyonun mobilyadaki varlığı ona bir durum katmıyor. Bu yardımcı olur umarım.


Bu, soran kişinin özel sorusuna cevap vermez.
Isaiah

1
Bu harika bir benzetmedir!
William Terrill

6

Yığın Taşması sorusunun yanıtı - durum bilgisi ve vatansızlık .

Flutter'da fark, durum bilgisiz widget'ların tek başına tüm yapıcı argümanları tarafından tanımlanabilmesidir. Aynı bağımsız değişkenleri kullanarak iki durumsuz pencere öğesi oluşturursanız, bunlar aynı olacaktır.

Bununla birlikte, durum bilgisi olan bir pencere öğesi, aynı yapıcı bağımsız değişkenleriyle oluşturulmuş başka bir pencere öğesiyle aynı olmayabilir. Farklı bir durumda olabilir.
Aslında, durum bilgisi olan bir pencere öğesinin kendisi değişmezdir (durum bilgisizdir), ancak Flutter ayrı bir durum nesnesini yönetir ve bunu StatefulWidget belgesinde açıklandığı gibi pencere öğesi ile ilişkilendirir . Bu, Flutter bir durum bilgili parçacığı yeniden oluşturduğunda, önceki durum nesnesini yeniden kullanıp kullanmayacağını kontrol edeceği ve istenirse bu durum nesnesini parçacığa ekleyeceği anlamına gelir.

Ana pencere öğesi, çocuğunun durumu ile ilgilenmediği için durumsuzdur. Durum bilgisi olan çocuğun kendisi (veya teknik olarak Flutter) kendi durumuna bakacaktır.
Yüksek düzeyde, bunun ana pencere aracını durum bilgili kıldığını kabul ediyorum, çünkü iki ebeveyn farklı durumlara sahip iki çocuk içerebilir ve bu nedenle teknik olarak kendileri farklı olabilir. Ancak Flutter'ın bakış açısından, durumu önemsemeden ana parçacığı oluşturur ve yalnızca çocuk oluştururken durum doluluğunu dikkate alır.


5

Durum Bilgili ve Durum Bilgisiz pencere öğeleri nedir?

TL; DR: Ekranı yenilemenizi sağlayan bir pencere öğesi, Durumsal bir pencere öğesidir. Durum Bilgisiz olmayan bir pencere öğesi.

Daha ayrıntılı olarak, değişebilen içeriğe sahip dinamik bir pencere öğesi, Durum Bilgili pencere öğesi olmalıdır. Durumsuz bir pencere öğesi, yalnızca parametreler değiştirildiğinde içeriği değiştirebilir ve bu nedenle, pencere öğesi hiyerarşisindeki konum noktasının üzerinde yapılması gerekir. Statik içeriğe sahip bir ekran veya pencere öğesi, durum bilgisiz bir pencere öğesi olmalıdır, ancak içeriği değiştirmek için durum bilgili olmalıdır.

Bu göreceli içeriği ilginç bir orta hikayede buldum. Rica ederim!


4

Durumsuz : Widget durumu YALNIZCA BİR KEZ oluşturur, ardından değerleri güncelleyebilir ancak açıkça belirtilemez. Bu, oradaki yapıdan da anlaşılıyor. Bu yüzden genişleyen tek bir sınıfı vardır StatelessWidget. Yani desem, build()yöntemi bir daha asla çalıştıramazlar .

Durum bilgisi olan : Widget'lar , olay tetiklendikten sonra STATE (yerel olarak) ve değerlerini birden çok kez güncelleyebilir . Nedeni budur, uygulama da farklıdır. Bunda 2 sınıfımız var, biri StatefulWidgetve diğeri Durum uygulama işleyicisi yani State<YourWidget>. Yani desem, build()tetiklenen olaylara göre yöntemi tekrar tekrar çalıştırabilirler .

Aşağıdaki şema yardımcı olacaktır.

görüntü açıklamasını buraya girin


1

Bir uygulama yazarken, genellikle StatelessWidget veya StatefulWidget'ın alt sınıfları olan yeni widget'lar yazarsınız.

İşte Arasında bazı farklar olduğunu StatelessWidgetve StatefulWidgetWidget'lar:

Durum Bilgisi İçermeyen Widget:

  1. Değişmez bir duruma sahip bir pencere öğesi.
  2. Durum Bilgisi İçermeyen Widget'lar statik widget'lardır.
  3. Herhangi bir veri değişikliğine veya herhangi bir davranış değişikliğine bağlı değildirler.
  4. Durum Bilgisiz Widget'ların bir durumu yoktur, bir kez işlenirler ve kendilerini güncellemeyecekler, ancak yalnızca dış veriler değiştiğinde güncellenecekler.
  5. Örnek: Text, Icon, RaisedButtonDurumsuz Radyo bulunmaktadır.

Durum Bilgisi İçermeyen Widget:

  1. Değişebilir duruma sahip bir pencere öğesi.
  2. Durum bilgili Widget'lar dinamik widget'lardır.
  3. Kullanıcı eylemine veya veri değişikliğine bağlı olarak çalışma sırasında güncellenebilirler.
  4. Durum Bilgili Pencere Öğeleri dahili bir duruma sahiptir ve giriş verileri değişirse veya Pencere Öğesinin durumu değişirse yeniden işlenebilir.
  5. Örnek: Checkbox, Radio Button, SliderDuruma Radyo olan

1

feragatname: - geçen haftadan itibaren flutter üzerinde çalışmaya başladık :)

durum bilgisi olmayan ve durum bilgisi olan pencere öğesinin kullanıcı arayüzünü oluşturmak ve güncellemek için kendi yaşam döngüsü vardır. bununla birlikte, kullanıcı arayüzünü oluşturmak için durumsuz veya durumlu kullanabilirsiniz, ancak pratik olarak durum dolu, kullanıcı arabirimi tamamen veya kısmen harici verilere bağlı olduğunda (api kullanarak bir liste oluşturma gibi) daha kullanışlıdır ve herhangi bir giriş ekranı gibi statik kullanıcı arabirimi oluşturmak için durumsuz widget kullanılır. iyi bir uygulama.


1
Yazarın tam tersini kastettiğini düşünüyorum: · D
Roc Boronat

0

Basit bir deyişle:

Bildiğimiz gibi, her widget dalgalanmadaki bir görünümdür. Kendi sınıfları olan. Bu sınıfları kullandığımızda onun bir nesnesini yaratırız. Onların farklı değişkenlerine / özelliklerine değer veriyoruz. Örn. String, Color, Font Size, Font ailesini verebilmemiz için Metin widget'ı oluşturuyoruz. Yani bunu vererek, onu yaratırken özelliklerini tanımlıyoruz. Bu noktaya kadar, Stateless veya Stateful widget'lar aynıdır ancak,

Özelliklerini (Dize veya Renk diyelim) tekrar tekrar değiştirmek / güncellemek istediğimizde, o zaman Durumsal widget olmalıdır.

Ve ilk kez tanımladıktan sonra özelliklerini değiştirmek istemediğimizde, bu durum bilgisiz bir pencere öğesidir.

bu, widget'ın tuttuğu / kontrol ettiği / gösterdiği verileri önemsediğimiz anlamına gelir.

Dolayısıyla Durumsuz veri daha azdır ve Durum bilgisi olan veri doludur.

Şimdi, durum bilgisi olmayan bir sınıf tanımlarsanız, bu, bu sınıfın içinde değişkenlere sahip olmadığı veya kendi sınıfında, yani sınıf düzeyinde veri söylemediği anlamına gelir, ancak içinde veriyi önemseyen, yani Durum bilgili olan başka bir bileşen / sınıfa sahip olabilir. . Yani birbirini etkilemiyor.

Burada yanılıyorsam lütfen beni düzeltin.


0

Durum Bilgili ve Durum Bilgisiz pencere öğeleri nedir?

Durum Bilgisi İçermeyen Pencere Öğesi: Durumsuz pencere öğesi, yalnızca üst öğe değişiklikleri olduğunda oluşturulur.

Durum Bilgili Pencere Öğeleri: Durum tam pencere öğeleri, pencere aracının durumunu tutar ve durum değiştiğinde yeniden oluşturulabilir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.