5

I have a Row that looks like this:

SizedBox(
    height: 64,
    child: Row(crossAxisAlignment: CrossAxisAlignment.stretch, children: [
        Expanded(
            child: Container(
            color: Colors.blue,
            child: Text("looooooooong", softWrap: false))),
        Expanded(
            child: Container(
            color: Colors.green, child: Text("short", softWrap: false)))
    ]));

enter image description here

As you can see the text in the blue container gets cut of.

Building the same thing with CSS look like this:

#container {
  width: 100px;
  height: 64px;
  display: flex;
  align-items: stretch;
}

#first {
  flex-grow: 1;
  background-color: blue;
}

#second {
  flex-grow: 1;
  background-color: green;
}
<div id="container">
  <div id="first">looooooooong</div>
  <div id="second">short</div>
</div>

enter image description here

In this case the green container leaves its unused space over to the blue container and the text in the blue container doesn't get cut of.

How am I supposed to achieve the CSS flex-box behavior in Flutter?

kukkuz
  • 41,512
  • 6
  • 59
  • 95
Tobias Marschall
  • 2,355
  • 3
  • 22
  • 40

2 Answers2

1

If I've understood your right you wanna rebuild the CSS behavior. You can just leave out the Expanded widgets. Here a short standalone example:

Flex Grow Demo

import 'package:flutter/material.dart';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        body: Center(
          child: SizedBox(
            height: 64,
            child: Row(
              crossAxisAlignment: CrossAxisAlignment.stretch,
              children: <Widget>[
                Container(
                  color: Colors.blue,
                  child: Text('loooooooooooong'),
                ),
                Container(
                  color: Colors.green,
                  child: Text('short'),
                ),
              ],
            ),
          ),
        ),
      )
    );
  }
}
NiklasPor
  • 9,116
  • 1
  • 45
  • 47
0

The Expanded widget with Flex can work for you:

import 'package:flutter/material.dart';
    
    void main() {
      return runApp(
        MaterialApp(
          home: Scaffold(
            body: Column(
              mainAxisAlignment: MainAxisAlignment.spaceEvenly,
              children: [
                SizedBox(
                  height: 64.0,
                  child: Row(
                    crossAxisAlignment: CrossAxisAlignment.stretch,
                    children: [
                      Expanded(
                        flex: 8,
                        child: Container(
                          color: Colors.blue,
                          child: const Text('loooooooooooong'),
                        ),
                      ),
                      Expanded(
                        flex: 2,
                        child: Container(
                          color: Colors.green,
                          child: const Text('short'),
                        ),
                      ),
                    ],
                  ),
                ),
              ],
            ),
          ),
        ),
      );
    }

A screenshot of iPhone emulator showing Flutter expanded widget with Flex

jurgenizer
  • 499
  • 7
  • 16