web-dev-qa-db-ja.com

フラッターレイアウトの行/列-幅を共有し、高さを拡張

Flutterのレイアウトにまだ問題があります。
今、4つのレイアウトで、3つのウィジェット間で利用可能なスペースを共有したいと考えています。幅は均等に共有されます(これは2つのExpandedウィジェットを使用して正常に動作します)が、高さも自動的に調整されるようにしたいwidget3.height == widget1.height + widget2.heightlayoutwidget3の方が大きい、欲しいwidget1およびwidget2を使用して高さを調整したり、その逆を行ったりします。

これはFlutterでも可能ですか?

40
TommyF

IntrinsicHeight を見てください。ルート行をラップすると、探している効果が得られます。

import 'package:flutter/material.Dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: Scaffold(
        appBar: AppBar(title: Text('Rows & Columns')),
        body: RowsAndColumns(),
      ),
    );
  }
}

class RowsAndColumns extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Padding(
      padding: const EdgeInsets.only(top: 100.0),
      child: IntrinsicHeight(
        child: Row(crossAxisAlignment: CrossAxisAlignment.stretch, children: [
          Expanded(
            child: Column(children: [
              Container(height: 120.0, color: Colors.yellow),
              Container(height: 100.0, color: Colors.cyan),
            ]),
          ),
          Expanded(child: Container(color: Colors.amber)),
        ]),
      ),
    );
  }
}

列のコンテナーの高さを調整すると、右側のコンテナーのサイズが一致するようにサイズ変更されます。

screenshot

https://Gist.github.com/mjohnsullivan/c5b661d7b3b4ca00599e8ef87ff6ac61

103
Matt S.