prefer-media-query-direct-access
added in: 3.1.0 style
Warns when MediaQuery properties are accessed through MediaQuery.of(context).property instead of using the direct access methods like MediaQuery.propertyOf(context).
Flutter provides direct access methods for MediaQuery properties that are more concise and readable. These methods were introduced to improve performance and provide better semantics.
Rule Details
❌ Bad: Using MediaQuery.of(context).property
✅ Good: Using MediaQuery.propertyOf(context)
Available Direct Access Methods
The following MediaQuery properties have direct access methods:
| Property | Direct Access Method |
|---|---|
size | MediaQuery.sizeOf(context) |
padding | MediaQuery.paddingOf(context) |
viewInsets | MediaQuery.viewInsetsOf(context) |
viewPadding | MediaQuery.viewPaddingOf(context) |
orientation | MediaQuery.orientationOf(context) |
devicePixelRatio | MediaQuery.devicePixelRatioOf(context) |
textScaleFactor | MediaQuery.textScaleFactorOf(context) |
platformBrightness | MediaQuery.platformBrightnessOf(context) |
systemGestureInsets | MediaQuery.systemGestureInsetsOf(context) |
accessibleNavigation | MediaQuery.accessibleNavigationOf(context) |
invertColors | MediaQuery.invertColorsOf(context) |
highContrast | MediaQuery.highContrastOf(context) |
disableAnimations | MediaQuery.disableAnimationsOf(context) |
boldText | MediaQuery.boldTextOf(context) |
Example
Bad:
class MyWidget extends StatelessWidget {
@override
Widget build(BuildContext context) {
// Bad: Using MediaQuery.of(context).property
final size = MediaQuery.of(context).size;
final padding = MediaQuery.of(context).padding;
final orientation = MediaQuery.of(context).orientation;
final devicePixelRatio = MediaQuery.of(context).devicePixelRatio;
final brightness = MediaQuery.of(context).platformBrightness;
// Bad: Chained property access
final width = MediaQuery.of(context).size.width;
final isPortrait = MediaQuery.of(context).orientation == Orientation.portrait;
return Container(
width: width,
child: Text('Screen info'),
);
}
}
Good:
class MyWidget extends StatelessWidget {
@override
Widget build(BuildContext context) {
// Good: Using direct access methods
final size = MediaQuery.sizeOf(context);
final padding = MediaQuery.paddingOf(context);
final orientation = MediaQuery.orientationOf(context);
final devicePixelRatio = MediaQuery.devicePixelRatioOf(context);
final brightness = MediaQuery.platformBrightnessOf(context);
// Good: Direct access for chained properties
final width = MediaQuery.sizeOf(context).width;
final isPortrait = MediaQuery.orientationOf(context) == Orientation.portrait;
return Container(
width: width,
child: Text('Screen info'),
);
}
}
Benefits
- Better Performance: Direct access methods can be more optimized than accessing through
MediaQuery.of(context) - Improved Readability: More concise and expressive code
- Better Semantics: Methods clearly indicate what property is being accessed
- Future-proof: Following Flutter's recommended patterns and best practices
Configuration
This rule has no configuration options.
dart_code_linter:
rules:
prefer-media-query-direct-access: true