Stack in Flutter
Stack In Flutter
Imagine you’re making a sandwich. You put one ingredient on top of another, right? In Flutter, the Stack works similarly. It lets you put one thing (like a button or an image) on top of another. It’s super useful when you want things to overlap in your app’s design.
When to Use Stack
- Buttons Over Pictures: Like a play button on a video thumbnail.
- Text on Images: Like captions on photos.
- Cool Designs: For when you want to mix things up from the usual top-down look.
Note: The first one is at the bottom, and each new one goes on top. In a Stack, your first widget is at the bottom, and others are layered over it.
Example 1: Basic Stack Implementation
Here’s how you can create a basic Stack with overlaid elements:
Stack(
  alignment: Alignment.center,
  children: [
    Container(
      width: 100,
      height: 100,
      color: Colors.blue,
    ),
    const Text('I’m on top!'),
  ],
)
Example 2: Profile Picture with Online Status Indicator
In this example, you will learn to create a circular profile picture with a small green dot at the bottom to indicate the user is online.
Stack(
  alignment: Alignment.bottomRight,
  children: [
    const CircleAvatar(
      radius: 40,
      backgroundImage: NetworkImage(
        'https://avatars.githubusercontent.com/u/33576285?v=4'
      ),
    ),
    DecoratedBox(
      decoration: BoxDecoration(
        color: Colors.green,
        shape: BoxShape.circle,
        border: Border.all(color: Colors.white, width: 3),
      ),
      child: const SizedBox(width: 20, height: 20),
    ),
  ],
)
Positioned Widget
The Positioned widget is a special type of widget used inside a Stack widget to control the position of a child widget. It has the following useful properties:
| Property | Description | 
|---|---|
| top | Distance from the top edge of the stack. | 
| bottom | Distance from the bottom edge of the stack. | 
| left | Distance from the left edge of the stack. | 
| right | Distance from the right edge of the stack. | 
You can see the demo of the Positioned widget in example 3 and 4.
Example 3: Product Image with Discount Badge
In this example, you will learn to create a product image with a discount badge at the top right corner.
Stack(
  children: [
    Image.network('https://images.pexels.com/photos/19060954/pexels-photo-19060954/free-photo-of-iphone-15-pro-max.jpeg'),
    Positioned(
      top: 10,
      right: 10,
      child: Container(
        padding: const EdgeInsets.all(8),
        color: Colors.red,
        child: const Text(
          '20% OFF',
          style: TextStyle(color: Colors.white, fontWeight: FontWeight.bold),
        ),
      ),
    ),
  ],
)
Example 4: Overlay Text on Image
In this example, you will learn to overlay text on an image.
Stack(
  children: [
    Image.network(
      'https://images.pexels.com/photos/19060954/pexels-photo-19060954/free-photo-of-iphone-15-pro-max.jpeg'
    ),
    Positioned(
      bottom: 10,
      left: 10,
      child: DecoratedBox(
        decoration: BoxDecoration(
          color: Colors.black,
          borderRadius: BorderRadius.circular(4),
        ),
        child: const Padding(
          padding: EdgeInsets.all(8),
          child: Text(
            'iPhone 15 Pro Max',
            style: TextStyle(color: Colors.white, fontWeight: FontWeight.bold),
          ),
        ),
      ),
    ),
  ],
)