フラッター:拡張vsフレキシブル


108

ウィジェットExpandedFlexibleウィジェットの両方を使用しましたが、同じように機能しているようです。

ExpandedとFlexibleの違いは何ですか?

回答:


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

ここに画像の説明を入力してください


6
Flexibleは必要なスペースのみを使用し、Expandedはflex要素を尊重して使用可能なすべてのスペースを使用します。詳細については、Expandedウィジェットのドキュメントを参照しください。
アレクサンダー

105

Expanded の省略形です Flexible

このように拡張を使用する:

Expanded(
  child: Foo(),
);

厳密に同等です:

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

レスポンシブレイアウトによっては、別の、便利なものが必要な場合に使用FlexibleするExpandedことをお勧めしfitます。

違いFlexFit.tightとはFlexFit.loose緩いが、その子供は子供がすべての利用可能なスペースを埋めるためというタイトな力ながら、最大サイズを持つことができるようになるということです。


1
ここで同じことMaximum sizeAvailable space意味するのではありませんか?
CopsOnRoad 2018年

いいえ、MAXIMUMSIZEによって私は柔軟の子柱内部のmaxHeightとConstrainedBoxとして持つようなものを意味
レミRousselet

25
簡単に言えば、Flexible.tight子供たちに利用可能なスペース全体を占有Flexible.looseさせ、子供たちにやりたいことをさせます。タイプによっては、スペース全体を占める子供もいれば、そうでない子供もいます。
CopsOnRoad

43

フレキシブルの下のウィジェットはデフォルトでWRAP_CONTENTですが、パラメーターFitを使用して変更できます。

Expandedの下のウィジェットはMATCH_PARENTであり、flexを使用して変更できます。


3
アンドロイド開発者のための素晴らしい説明!
SwiftiSwift

FlexibleはWRAP_CONTENTのように見えますが、使用可能なスペースでの位置合わせには、Flexible内でAlignを使用します。
AksharPatel20年

19

Expanded-Flexibleセットフィットです

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

17

フレキシブルを使用して、列のウィジェットのサイズを変更できます。これは主に、親ウィジェットとの関係を維持しながら、さまざまな子ウィジェットのスペースを調整するために使用されます。

一方、Expandedは、列の子に送信される制約を変更します。そこにある利用可能なスペースを埋めるのに役立ちます。したがって、拡張ウィジェットで子をラップすると、空のスペースがいっぱいになります。

Flutterの公式YouTubeチャンネルからこれらの動画を提供するのは、近い将来これを探す可能性のある人々を支援するためだけです...

  1. 拡張:

  2. フレキシブル:


1

Flexible代わりにを使用する場合の唯一の違いExpandedFlexible、子の幅をFlexibleそれ自体と同じかそれより小さくする一方でExpanded、子の幅をまったく同じにすることExpandedです。しかし、両方ともExpandedFlexible自分のサイズを決めるときは子供の幅を無視します。

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!’))),
  ]
)

ここに画像の説明を入力してください

:これは、Row子供をサイズに比例して拡大することは不可能であることを意味します。行は、正確な子の幅を使用するExpandedか、またはを使用するときにそれを完全に無視しますFlexible


0

Expanded()はFlexible()にすぎません。

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

ただし、Flexibleはfit :FlexFit.looseデフォルトで使用します。

FlexFit.tight =できるだけ多くのスペースをとって親にぴったりとフィットしたい。

FlexFit.loose =自分自身のためにできるだけスペースをとらずに、親にゆるくフィットしたい。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.