Stack lets you place widgets on top of each other like layers. Positioned helps you put these widgets exactly where you want inside the Stack.
Stack and Positioned in Flutter
Stack(
children: [
Widget1(),
Positioned(
top: 10.0,
left: 20.0,
child: Widget2(),
),
],
)Stack's children are drawn in order, so later children appear on top.
Positioned requires at least one of top, bottom, left, or right to place the child.
Stack(
children: [
Container(color: Colors.blue, width: 100, height: 100),
Positioned(
top: 10,
left: 10,
child: Container(color: Colors.red, width: 50, height: 50),
),
],
)Stack(
children: [
Text('Hello'),
Positioned(
bottom: 0,
right: 0,
child: Icon(Icons.star),
),
],
)Stack(
children: [
Container(color: Colors.green, width: 100, height: 100),
// No Positioned, child fills Stack by default
Container(color: Colors.yellow.withOpacity(0.5), width: 50, height: 50),
],
)This app shows a blue square with a smaller red square positioned inside it near the top-left corner. The text 'Top Layer' is positioned near the bottom-right corner on top of both squares.
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('Stack and Positioned Example')), body: Center( child: Stack( children: [ Container( width: 150, height: 150, color: Colors.blue, ), Positioned( top: 20, left: 20, child: Container( width: 100, height: 100, color: Colors.red, ), ), Positioned( bottom: 10, right: 10, child: const Text( 'Top Layer', style: TextStyle(color: Colors.white, fontWeight: FontWeight.bold), ), ), ], ), ), ), ); } }
Stack paints children in order, so later children appear on top.
Positioned widgets must have at least one position property: top, bottom, left, or right.
Using Stack and Positioned is great for overlapping widgets or custom layouts.
Stack lets you layer widgets on top of each other.
Positioned places a child widget at a specific position inside the Stack.
Use Stack and Positioned to create complex, overlapping UI elements.
Practice
Stack widget do in Flutter?Solution
Step 1: Understand Stack widget purpose
The Stack widget allows placing widgets on top of each other in layers.Step 2: Compare with other layout widgets
Other widgets like Column or Row arrange widgets vertically or horizontally, not layered.Final Answer:
It layers widgets on top of each other. -> Option AQuick Check:
Stack = layering widgets [OK]
- Confusing Stack with Column or Row
- Thinking Stack scrolls content
- Assuming Stack arranges widgets side by side
Solution
Step 1: Check parameter order and values
Positioned requires named parameters; order doesn't matter but values must match position.Step 2: Verify correct top and left values
Positioned(top: 10, left: 20, child: Text('Hello'))correctly sets top: 10 and left: 20 with child widget.Final Answer:
Positioned(top: 10, left: 20, child: Text('Hello')) -> Option BQuick Check:
top=10 and left=20 in Positioned [OK]
- Swapping top and left values
- Placing child before position parameters
- Using bottom and right instead of top and left
Stack(
children: [
Container(width: 100, height: 100, color: Colors.red),
Positioned(top: 20, left: 20, child: Container(width: 50, height: 50, color: Colors.blue))
]
)Solution
Step 1: Understand Stack layering
The red container is the base layer sized 100x100 pixels.Step 2: Analyze Positioned child
The blue container is 50x50 pixels placed 20 pixels from top and left, overlapping the red.Final Answer:
A red square with a smaller blue square overlapping near the top-left corner. -> Option CQuick Check:
Stack layers with Positioned overlap [OK]
- Thinking widgets appear side by side
- Assuming blue is behind red
- Ignoring Positioned offsets
Stack(
children: [
Positioned(top: 10, child: Text('Hello')),
Positioned(left: 20, child: Text('World'))
]
)Solution
Step 1: Review Positioned requirements
Positioned widgets can use zero, one, or more positioning properties (top, left, bottom, right). Partial constraints are allowed (unspecified directions default to 0).Step 2: Check given Positioned widgets
The first uses top: 10 (Hello positioned 10px from top, left=0). The second uses left: 20 (World positioned 20px from left, top=0). No errors; valid code.Final Answer:
Positioned widgets can have only one property; this code is correct. -> Option DQuick Check:
Positioned allows partial properties [OK]
- Thinking Positioned requires at least two properties
- Believing partial positioning is invalid
- Confusing Positioned requirements
Solution
Step 1: Understand centering in Stack
Using Positioned.fill with Align centers the child relative to the Stack size.Step 2: Analyze each option
Stack( children: [ Container(width: 200, height: 200, color: Colors.yellow), Positioned.fill(child: Align(alignment: Alignment.center, child: Container(width: 50, height: 50, decoration: BoxDecoration(color: Colors.green, shape: BoxShape.circle)))) ] )uses Positioned.fill and Align with Alignment.center, ensuring the green circle stays centered regardless of screen size.Final Answer:
Stack with Positioned.fill and Align to center the circle. -> Option AQuick Check:
Use Positioned.fill + Align for responsive centering [OK]
- Hardcoding top and left offsets (Option A)
- Missing Positioned for precise control (Option B)
- Using bottom and right offsets incorrectly (Option D)
Ready to prove it?
Pass the test and this pattern moves unknown
