Breakpoint
Calculates the responsive layout grid properties (columns, gutters, and margins) based on the current screen size, following Material Design Guidelines.
Features
- Standardized Breakpoints: Implements the Material Design responsive layout grid system.
- Adaptive Properties: providing the correct
columnscount,gluttersspacing, andmarginwidth for any screen width. - Device Classification: Identifies device types (Handset, Tablet, Desktop) and window sizes (xsmall to xlarge).
- Flexible Usage: Works with both
BoxConstraints(via LayoutBuilder) andMediaQuery.
Installation
flutter pub add breakpoint
Usage
Using BreakpointBuilder
The easiest way to use this package is with BreakpointBuilder. It automatically handles the LayoutBuilder for you and provides the current Breakpoint data.
BreakpointBuilder(
builder: (context, breakpoint) {
// The breakpoint passed here provides the standardized margins,
// columns, and gutters for the current screen size.
return Container(
// Access the margin, commonly 16.0 or 24.0
padding: EdgeInsets.all(breakpoint.margin),
child: GridView.builder(
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: breakpoint.columns, // 4, 8, or 12 columns
crossAxisSpacing: breakpoint.gutters, // 16.0 or 24.0 spacing
mainAxisSpacing: breakpoint.gutters,
),
// ...
),
);
},
)
Manual Calculation
If you are already inside a LayoutBuilder or want to use MediaQuery:
From Constraints (Recommended for sub-views):
LayoutBuilder(builder: (context, constraints) {
// Calculate the breakpoint based on the current widget's constraints
final breakpoint = Breakpoint.fromConstraints(constraints);
return Padding(
padding: EdgeInsets.symmetric(horizontal: breakpoint.margin),
child: Row(
children: [
// Your adaptive layout here
],
),
);
});
From MediaQuery (App-wide layout):
// Calculate based on the full screen size
final breakpoint = Breakpoint.fromMediaQuery(context);
// Example: accessing device type
if (breakpoint.device == LayoutClass.desktop) {
return DesktopLayout();
} else if (breakpoint.device == LayoutClass.tablet) {
return TabletLayout();
} else {
return MobileLayout();
}
Breakpoint System
This package maps screen widths to the standard Material Design responsive grid:
| Screen Width | Device | Window | Columns | Gutters | Margins |
|---|---|---|---|---|---|
| 0 - 359 | Small Handset | xsmall | 4 | 16dp | 16dp |
| 360 - 399 | Medium Handset | xsmall | 4 | 16dp | 16dp |
| 400 - 479 | Large Handset | xsmall | 4 | 16dp | 16dp |
| 480 - 599 | Large Handset | xsmall | 4 | 16dp | 16dp |
| 600 - 719 | Small Tablet | small | 8 | 16dp | 16dp |
| 720 - 839 | Large Tablet | small | 8 | 24dp | 24dp |
| 840 - 959 | Large Tablet | small | 12 | 24dp | 24dp |
| 960 - 1023 | Large Tablet | small | 12 | 24dp | 24dp |
| 1024 - 1279 | Desktop | medium | 12 | 24dp | 24dp |
| 1280 - 1439 | Desktop | medium | 12 | 24dp | 24dp |
| 1440 - 1599 | Desktop | large | 12 | 24dp | 24dp |
| 1600 - 1919 | Desktop | large | 12 | 24dp | 24dp |
| 1920+ | Desktop | xlarge | 12 | 24dp | 24dp |
Note: In Landscape orientation, the effective width calculation includes a buffer (+120dp) to better align with landscape layout expectations.
Example
Check out the example directory for a full Material 3 adaptive dashboard application.