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