flutter_adaptive_grid_layout 0.0.1 copy "flutter_adaptive_grid_layout: ^0.0.1" to clipboard
flutter_adaptive_grid_layout: ^0.0.1 copied to clipboard

A Flutter package for declarative and flexible adaptive grid layouts for complex UIs.

example/lib/main.dart

import 'package:flutter/material.dart';
import 'package:flutter_adaptive_grid_layout/flutter_adaptive_grid_layout.dart';

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

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

  @override
  Widget build(BuildContext context) {
    // Determine the current screen size based on breakpoints
    final currentLayoutSize = AdaptiveBreakpoints.materialDesign.fromWidth(
      MediaQuery.of(context).size.width,
    );

    return Scaffold(
      appBar: AppBar(title: const Text('Adaptive Dashboard (Resize Window)')),
      body: AdaptiveLayoutSizeProvider(
        size: currentLayoutSize,
        breakpoints: AdaptiveBreakpoints.materialDesign,
        child: AdaptiveGridLayout(
          breakpoints: AdaptiveBreakpoints.materialDesign,
          layoutTemplates: {
            // Define your layout for compact screens (e.g., mobile portrait)
            AdaptiveLayoutSize.compact: AdaptiveGridTemplate(
              size: AdaptiveLayoutSize.compact,
              template: [
                "header",
                "content",
                "sidebar", // Sidebar stacks below content
                "footer",
              ],
              columnSizes: [FlexSize.flex(1)], // Single column
              rowSizes: [
                FlexSize.content(),
                FlexSize.flex(1),
                FlexSize.content(),
                FlexSize.content(),
              ],
            ),
            // Define your layout for medium screens (e.g., tablets, mobile landscape)
            AdaptiveLayoutSize.medium: AdaptiveGridTemplate(
              size: AdaptiveLayoutSize.medium,
              template: ["header header", "sidebar content", "footer footer"],
              columnSizes: [
                FlexSize.fixed(200),
                FlexSize.flex(1),
              ], // Fixed 200px sidebar, rest for content
              rowSizes: [
                FlexSize.content(),
                FlexSize.flex(1),
                FlexSize.content(),
              ],
            ),
            // Define your layout for expanded screens (e.g., small desktops)
            AdaptiveLayoutSize.expanded: AdaptiveGridTemplate(
              size: AdaptiveLayoutSize.expanded,
              template: [
                "header header header",
                "nav    content  details",
                "footer footer  footer",
              ],
              columnSizes: [
                FlexSize.fixed(150),
                FlexSize.flex(2),
                FlexSize.flex(1),
              ], // Nav fixed, content gets 2x flex, details 1x
              rowSizes: [
                FlexSize.content(),
                FlexSize.flex(1),
                FlexSize.content(),
              ],
            ),
            // Define your layout for large screens (e.g., large desktops)
            AdaptiveLayoutSize.large: AdaptiveGridTemplate(
              size: AdaptiveLayoutSize.large,
              template: [
                "header header header header",
                "nav    content  details  ads",
                "footer footer  footer  footer",
              ],
              columnSizes: [
                FlexSize.fixed(150),
                FlexSize.flex(2),
                FlexSize.flex(1),
                FlexSize.fixed(100),
              ], // Even more columns
              rowSizes: [
                FlexSize.content(),
                FlexSize.flex(1),
                FlexSize.content(),
              ],
            ),
          },
          // Provide your actual widgets for each named region
          children: {
            'header': Container(
              color: Colors.red[100],
              padding: const EdgeInsets.all(8.0),
              child: const Center(
                child: Text('App Header', style: TextStyle(fontSize: 20)),
              ),
            ),
            'sidebar': Container(
              color: Colors.green[100],
              padding: const EdgeInsets.all(8.0),
              child: const Column(
                mainAxisAlignment: MainAxisAlignment.center,
                children: [
                  Text('Sidebar Nav'),
                  ListTile(title: Text('Item 1')),
                  ListTile(title: Text('Item 2')),
                ],
              ),
            ),
            'nav': Container(
              color: Colors.purple[100],
              padding: const EdgeInsets.all(8.0),
              child: const Column(
                mainAxisAlignment: MainAxisAlignment.center,
                children: [
                  Text('Main Nav'),
                  ListTile(title: Text('Dashboard')),
                  ListTile(title: Text('Settings')),
                ],
              ),
            ),
            'content': Container(
              color: Colors.blue[100],
              padding: const EdgeInsets.all(8.0),
              child: const Center(
                child: Text(
                  'Main Content Area\n(Try resizing the window!)',
                  textAlign: TextAlign.center,
                  style: TextStyle(fontSize: 18),
                ),
              ),
            ),
            'details': Container(
              color: Colors.orange[100],
              padding: const EdgeInsets.all(8.0),
              child: const Center(child: Text('Details Panel')),
            ),
            'ads': Container(
              color: Colors.yellow[100],
              padding: const EdgeInsets.all(8.0),
              child: const Center(child: Text('Advertisements')),
            ),
            'footer': Container(
              color: Colors.grey[300],
              padding: const EdgeInsets.all(8.0),
              child: const Center(child: Text('App Footer')),
            ),
          },
        ),
      ),
    );
  }
}
1
likes
160
points
21
downloads

Publisher

verified publisherhadiabdullan.in

Weekly Downloads

A Flutter package for declarative and flexible adaptive grid layouts for complex UIs.

Homepage
Repository (GitHub)
View/report issues

Topics

#layout #adaptive #responsive #grid #ui

Documentation

API reference

License

MIT (license)

Dependencies

flutter

More

Packages that depend on flutter_adaptive_grid_layout