Skip to main content

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).propertyGood: Using MediaQuery.propertyOf(context)

Available Direct Access Methods

The following MediaQuery properties have direct access methods:

PropertyDirect Access Method
sizeMediaQuery.sizeOf(context)
paddingMediaQuery.paddingOf(context)
viewInsetsMediaQuery.viewInsetsOf(context)
viewPaddingMediaQuery.viewPaddingOf(context)
orientationMediaQuery.orientationOf(context)
devicePixelRatioMediaQuery.devicePixelRatioOf(context)
textScaleFactorMediaQuery.textScaleFactorOf(context)
platformBrightnessMediaQuery.platformBrightnessOf(context)
systemGestureInsetsMediaQuery.systemGestureInsetsOf(context)
accessibleNavigationMediaQuery.accessibleNavigationOf(context)
invertColorsMediaQuery.invertColorsOf(context)
highContrastMediaQuery.highContrastOf(context)
disableAnimationsMediaQuery.disableAnimationsOf(context)
boldTextMediaQuery.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

  1. Better Performance: Direct access methods can be more optimized than accessing through MediaQuery.of(context)
  2. Improved Readability: More concise and expressive code
  3. Better Semantics: Methods clearly indicate what property is being accessed
  4. 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