Bird
Raised Fist0
Fluttermobile~20 mins

Column and Row in Flutter - Mini App: Build & Ship

Choose your learning style10 modes available
Build: Column and Row Demo
This screen shows how to arrange text widgets vertically using Column and horizontally using Row.
Target UI
-------------------------
| Column and Row Demo   |
|-----------------------|
| Column:               |
| Hello                 |
| Flutter               |
| World                 |
|                       |
| Row:                  |
| [Hello] [Flutter] [World] |
-------------------------
Use a Column widget to display three Text widgets stacked vertically: 'Hello', 'Flutter', 'World'.
Below the Column, use a Row widget to display the same three Text widgets horizontally.
Center the Column and Row horizontally on the screen.
Add some spacing between the Text widgets in both Column and Row.
Starter Code
Flutter
import 'package:flutter/material.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return const MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: Text('Column and Row Demo')),
        body: Center(
          child: Column(
            // TODO: Add vertical Text widgets here
          ),
        ),
      ),
    );
  }
}
Task 1
Task 2
Task 3
Task 4
Solution
Flutter
import 'package:flutter/material.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: const Text('Column and Row Demo')),
        body: Center(
          child: Column(
            mainAxisSize: MainAxisSize.min,
            crossAxisAlignment: CrossAxisAlignment.center,
            children: [
              // Column with vertical Text widgets
              const Text('Hello'),
              const SizedBox(height: 8),
              const Text('Flutter'),
              const SizedBox(height: 8),
              const Text('World'),
              const SizedBox(height: 24),
              // Row with horizontal Text widgets
              Row(
                mainAxisSize: MainAxisSize.min,
                mainAxisAlignment: MainAxisAlignment.center,
                children: const [
                  Text('Hello'),
                  SizedBox(width: 16),
                  Text('Flutter'),
                  SizedBox(width: 16),
                  Text('World'),
                ],
              ),
            ],
          ),
        ),
      ),
    );
  }
}

We use a Column widget to stack the three Text widgets vertically. We add SizedBox widgets with fixed height to create space between them.

Below the Column, we add a Row widget with the same three Text widgets arranged horizontally. We add SizedBox widgets with fixed width to space them apart.

Both Column and Row are centered horizontally using crossAxisAlignment and mainAxisAlignment properties, and the whole layout is centered on screen with a Center widget.

Final Result
Completed Screen
-------------------------
| Column and Row Demo   |
|-----------------------|
| Column:               |
| Hello                 |
|                       |
| Flutter               |
|                       |
| World                 |
|                       |
| Row:                  |
| Hello  Flutter  World  |
-------------------------
The screen shows the three words stacked vertically with space between them.
Below that, the same three words appear in a row with space between them.
No buttons or gestures are active on this screen.
Stretch Goal
Add a button that toggles the text color between black and blue for all Text widgets.
💡 Hint
Use a StatefulWidget and a boolean state variable to switch colors on button press.

Practice

(1/5)
1. What does the Column widget do in Flutter?
easy
A. Arranges child widgets vertically
B. Arranges child widgets horizontally
C. Stacks child widgets on top of each other
D. Creates a scrollable list of widgets

Solution

  1. Step 1: Understand the purpose of Column

    The Column widget arranges its children in a vertical direction, one below the other.
  2. Step 2: Compare with other widgets

    Row arranges children horizontally, Stack overlays them, and ListView scrolls.
  3. Final Answer:

    Arranges child widgets vertically -> Option A
  4. Quick Check:

    Column = vertical layout [OK]
Hint: Column means vertical layout, Row means horizontal [OK]
Common Mistakes:
  • Confusing Column with Row
  • Thinking Column stacks widgets
  • Assuming Column scrolls automatically
2. Which of the following is the correct syntax to create a Row with two Text widgets in Flutter?
easy
A. Row(children: Text('Hello'), Text('World'))
B. Row(children: [Text('Hello'), Text('World')])
C. Row(child: Text('Hello'), Text('World'))
D. Row([Text('Hello'), Text('World')])

Solution

  1. Step 1: Check Row constructor parameters

    Row requires a named parameter children which is a list of widgets.
  2. Step 2: Validate each option

    Row(children: [Text('Hello'), Text('World')]) uses children: [Text('Hello'), Text('World')] correctly. Others misuse parameters or omit the list.
  3. Final Answer:

    Row(children: [Text('Hello'), Text('World')]) -> Option B
  4. Quick Check:

    Row needs children list [OK]
Hint: Use children: [widget1, widget2] for Row and Column [OK]
Common Mistakes:
  • Using child instead of children
  • Not wrapping widgets in a list
  • Passing widgets without parameter name
3. What will be the visual output of this Flutter code?
Column(
  children: [
    Text('A'),
    Row(
      children: [Text('B'), Text('C')],
    ),
    Text('D'),
  ],
)
medium
A. A vertical list: A, B, C, D all stacked vertically
B. A horizontal list: A, B, C, D all side by side
C. A vertical list: A, then B and C side by side, then D below
D. An error because Row inside Column is not allowed

Solution

  1. Step 1: Analyze the Column layout

    The Column arranges its children vertically: Text('A'), then a Row, then Text('D').
  2. Step 2: Analyze the Row inside Column

    The Row arranges its children horizontally: Text('B') and Text('C') side by side.
  3. Final Answer:

    A vertical list: A, then B and C side by side, then D below -> Option C
  4. Quick Check:

    Column vertical + Row horizontal = mixed layout [OK]
Hint: Column stacks vertically, Row stacks horizontally inside it [OK]
Common Mistakes:
  • Thinking Row inside Column causes error
  • Assuming all texts are horizontal
  • Ignoring nested Row layout
4. Identify the error in this Flutter code snippet:
Row(
  children: Text('Hello'),
)
medium
A. children should be a list of widgets, not a single widget
B. Row cannot have Text widgets as children
C. Missing comma after Text widget
D. Row requires a child parameter, not children

Solution

  1. Step 1: Check the children parameter type

    The children parameter expects a list of widgets, but here it is given a single Text widget without list brackets.
  2. Step 2: Understand correct syntax

    It should be children: [Text('Hello')] to be valid.
  3. Final Answer:

    children should be a list of widgets, not a single widget -> Option A
  4. Quick Check:

    children = list of widgets [OK]
Hint: Always wrap children widgets in square brackets [OK]
Common Mistakes:
  • Passing single widget without list
  • Confusing child and children
  • Forgetting brackets around children
5. You want to create a layout with three buttons arranged horizontally, each spaced evenly across the screen width. Which Flutter widget combination is best to achieve this?
hard
A. Use a Stack with Positioned widgets for each button
B. Use a Column with MainAxisAlignment.spaceEvenly and three ElevatedButton children
C. Use a Row with CrossAxisAlignment.stretch and three ElevatedButton children
D. Use a Row with MainAxisAlignment.spaceEvenly and three ElevatedButton children

Solution

  1. Step 1: Understand horizontal arrangement

    Row arranges children horizontally, which fits the requirement for buttons side by side.
  2. Step 2: Use MainAxisAlignment.spaceEvenly

    This property spaces children evenly along the main axis (horizontal for Row), distributing buttons evenly.
  3. Step 3: Evaluate other options

    Column arranges vertically, CrossAxisAlignment.stretch stretches vertically, Stack overlays widgets which is not desired.
  4. Final Answer:

    Use a Row with MainAxisAlignment.spaceEvenly and three ElevatedButton children -> Option D
  5. Quick Check:

    Row + spaceEvenly = evenly spaced horizontal buttons [OK]
Hint: Row + spaceEvenly spaces widgets horizontally evenly [OK]
Common Mistakes:
  • Using Column for horizontal layout
  • Confusing main and cross axis alignment
  • Using Stack for simple horizontal layout
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard