Search code examples
flutterflutter-layout

Flutter Layout Row / Column - share width, expand height


I'm still having a bit of trouble with the layouting in Flutter.
Right now I want to have the available space shared between 3 widgets, in a quadrant layout. The width is evenly shared (this works fine via 2 Expanded widgets in a Row), but now I also want the height to adjust automatically so widget3.height == widget1.height + widget2.height. layout If the content of widget3 is larger, I want widget1 and widget2 to adjust their height and vice versa.

Is this even possible in Flutter?


Solution

  • Have a look at IntrinsicHeight; wrapping the root Row should provide the effect you're looking for:

    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)),
            ]),
          ),
        );
      }
    }
    

    Adjusting the heights in the containers in the column cause the container on the right to resize to match:

    screenshot

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