Fixed Responsive
A lightweight, professional mobile-first scaling extension for Flutter.
Unlike standard responsive packages that scale based on the current width of the screen, fixed_responsive scales based on the shortest side of the device.
This solves the most common layout bug in Flutter: Preventing layouts from exploding when users rotate their phones to landscape, while still scaling up perfectly for iPads, Tablets, and Desktop screens.
(Add your GIF link here showing a phone rotating without the UI breaking)
The Problem It Solves
If you use standard percentage-based widths (like MediaQuery.of(context).size.width or standard screen utilization packages), rotating a phone from Portrait to Landscape doubles the width of the screen. This causes your fonts, paddings, and buttons to become massively bloated.
fixed_responsive locks the mathematical scaling to the physical device type, not the orientation.
Installation
Add it to your pubspec.yaml:
dependencies:
fixed_responsive: ^1.0.0
Usage
Simply import the package and append .fw (Fixed Width) or .fsp (Fixed Scalable Pixels) to your numbers. It assumes a base design width of 390dp (standard modern smartphone).
code
import 'package:fixed_responsive/fixed_responsive.dart';
class MyWidget extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Container(
// Padding scales cleanly on tablets, stays static on phone rotation
padding: EdgeInsets.all(16.fw),
// Fixed height to prevent flex overflows
height: 60.fw,
child: Text(
'Responsive Typography',
style: TextStyle(
// Font size stays readable and proportioned
fontSize: 18.fsp,
fontWeight: FontWeight.bold,
),
),
);
}
}
When to use .fw vs .fsp
Use .fw for Margins, Paddings, Heights, Widths, and Border Radius .
Use .fsp for Font Sizes and Icon Sizes.
(Under the hood, both use the same calculation, but separating them keeps your codebase semantic and easy to read for other developers).