Flutter: Genişletilmiş vs Esnek


97

Her ikisini de kullandım Expandedve Flexibleaynı şekilde çalışıyorlar. Kaçırdığım ikisi arasında bir fark var mı?

Yanıtlar:


116
Scaffold(
  appBar: AppBar(),
  body: Column(
    children: <Widget>[
      Row(
        children: <Widget>[
          buildExpanded(),
          buildFlexible(),
        ],
      ),
      Row(
        children: <Widget>[
          buildExpanded(),
          buildExpanded(),
        ],
      ),
      Row(
        children: <Widget>[
          buildFlexible(),
          buildFlexible(),
        ],
      ),
    ],
  ),
);

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


5
Esnek yalnızca gerekli alanı alır ve Expanded, flexfaktöre saygı duyarak mevcut tüm alanı kaplar . Daha fazla bilgi için Expandedwidget'ın belgelerine bakın .
Aleksandar

99

Expanded sadece kısaltmasıdır Flexible

Bu şekilde genişletilmiş kullanarak:

Expanded(
  child: Foo(),
);

kesinlikle şuna eşdeğerdir:

Flexible(
  fit: FlexFit.tight,
  child: Foo(),
);

Sen kullanmak isteyebilirsiniz Flexibleüzerinde Expandedsize farklı istediğinizde fitbazı duyarlı düzenleri yararlıdır.

Arasındaki fark FlexFit.tightve FlexFit.loosegevşek onun çocuk çocuk tüm kullanılabilir alanı dolduracak şekilde o sıkı güçlerin ederken maksimum büyüklüğe sahip sağlayacak olmasıdır.


1
değil Maximum sizeve Available spaceburada aynı anlama geliyor?
CopsOnRoad

Hayır, maksimum boyut ile bir Sütun içinde maxHeight ile Esnek bir Kısıtlı Kutunun çocuğu gibi bir şeyi kastettim
Rémi Rousselet

25
Basit bir deyişle, Flexible.tightçocukları mevcut tüm alanı kaplamaya zorlayacak ve çocukların Flexible.looseistediklerini yapmalarına izin verecektir. Türlerine bağlı olarak bazı çocuklar tüm alanı kaplarken bazıları almayabilir.
CopsOnRoad

30

Esnek altındaki widget varsayılan olarak WRAP_CONTENT'tir, ancak Fit parametresini kullanarak onu değiştirebilirsiniz.

Expanded altındaki Widget MATCH_PARENT ise bunu flex kullanarak değiştirebilirsiniz .


1
Android geliştiricileri için harika bir açıklama!
SwiftiSwift

18

Expanded- Flexibleset uyumu ile

class Expanded extends Flexible {
    const Expanded({
        Key key,
        int flex = 1,
        @required Widget child,
    }) : super(
        key: key, 
        flex: flex, 
        fit: FlexFit.tight, 
        child: child
    );
}

16

Sen kullanabilir Esnek içinde widget'lar yeniden boyutlandırmak için satır ve sütunların . Esas olarak, ana pencere öğeleriyle ilişkiyi korurken farklı alt bileşenlerin alanını ayarlamak için kullanılır.

Bu arada Expanded , satır ve sütunların alt öğelerine gönderilen kısıtlamaları değiştirir ; oradaki mevcut alanları doldurmaya yardımcı olur. Bu nedenle, çocuğunuzu Genişletilmiş bir pencere aracına sardığınızda, boş alanları doldurur.

Flutter'ın Resmi YouTube kanalından bu videoları sadece gelecekte bunu arayabilecek insanlara yardım etmek için sunmak ...

  1. Genişletilmiş:

  2. Esnek:


0

Expanded (), Esnek () 'den başka bir şey değildir.

Flexible (fit: FlexFit.tight) = Expanded()

ancak, fit :FlexFit.loosevarsayılan olarak Esnek kullanır .

FlexFit.tight = Mümkün olduğunca çok yer kaplayarak ebeveyne sıkıca sığmak istiyor.

FlexFit.loose = Kendisi için olabildiğince az yer kaplayarak ebeveyne gevşek bir şekilde uymak istiyor.


0

Bunun Flexibleyerine kullanırsanız tek fark , çocuğunun kendisiyle aynı veya daha küçük genişliğe sahip Expandedolmasına Flexibleizin Flexibleverirken Expanded, çocuğunu Expanded. Ancak her iki Expandedve Flexiblekendilerini boyutlandırma sırasında çocuklarının genişliğini görmezden.

Row(children:[
  Flexible(
    child: Container(color: Colors.red, child: Text('This is a very long text that won’t fit the line.'))),
  Flexible(
    child: Container(color: Colors.green, child: Text(‘Goodbye!’))),
  ]
)

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

Not : Bu, Rowçocukları boylarına orantılı olarak büyütmenin imkansız olduğu anlamına gelir . Satır ya tam alt öğenin genişliğini kullanır Expandedya da veya kullandığınızda tamamen yok sayar Flexible.

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.