Skip to content
Blog

Adaptive and Responsive Design in Flutter

Build Flutter apps that adapt to any screen size. Learn the difference between adaptive and responsive design, and implement both with Flutter tools.

Published on September 17, 2026

AI Assistant

Adaptive vs Responsive

These terms are often confused:

  • Responsive — the UI rearranges based on available space (constraints)
  • Adaptive — the UI changes behavior based on the platform (touch vs mouse, screen density)

A truly cross-platform Flutter app is both.

Responsive Design

Use LayoutBuilder to respond to constraints:

LayoutBuilder(
  builder: (context, constraints) {
    if (constraints.maxWidth > 900) {
      return WideLayout();    // Side-by-side panels
    } else if (constraints.maxWidth > 600) {
      return MediumLayout();  // Tabbed navigation
    } else {
      return NarrowLayout();  // Bottom navigation
    }
  },
)

Adaptive Design

Use Platform or MediaQuery to detect the environment:

class AdaptiveScaffold extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    final isDesktop = Platform.isWindows || Platform.isMacOS || Platform.isLinux;
    final hasMouse = MediaQuery.of(context).navigationMode == NavigationMode.traditional;

    if (isDesktop || hasMouse) {
      return DesktopScaffold();
    }
    return MobileScaffold();
  }
}

Key Widgets

WidgetPurpose
LayoutBuilderRespond to parent constraints
MediaQueryScreen size, orientation, input type
OrientationBuilderPortrait vs landscape
AdaptivePlatform-aware Material/Cupertino
NavigationRailDesktop-style side navigation
NavigationBarMobile-style bottom navigation

Breakpoints

Define your own breakpoints:

class Breakpoints {
  static const mobile = 600;
  static const tablet = 900;
  static const desktop = 1200;
  static const wide = 1800;

  static bool isMobile(BuildContext context) =>
      MediaQuery.of(context).size.width < mobile;

  static bool isDesktop(BuildContext context) =>
      MediaQuery.of(context).size.width >= desktop;
}

Best Practices

  1. Design mobile-first — expand upward to larger screens
  2. Use constraints, not fixed sizes — let the layout breathe
  3. Test at every breakpoint — resize your window constantly
  4. Consider input modality — touch targets are larger than mouse clicks
  5. Use Universal widgets from flutter_adaptive_scaffold or responsive_framework

Conclusion

Adaptive and responsive design isn’t optional in 2026 — it’s expected. Flutter’s layout system makes it achievable with minimal code. Design for the smallest screen, scale to the largest, and your app will feel native everywhere.