use_dedicated_media_query_methods
v0.1.0 Warning Fix Widget Best Practices
This rule flags calls like MediaQuery.of(context).size and suggests using the dedicated aspect methods like MediaQuery.sizeOf(context) instead. The dedicated methods subscribe only to the specific property you need, so your widget does not rebuild when unrelated MediaQuery properties change.
Why use this rule
Section titled “Why use this rule”MediaQuery.of(context) subscribes to the entire MediaQueryData. That means your widget rebuilds whenever any media property changes — orientation, padding, text scale, view insets, and more. If you only need size, using MediaQuery.sizeOf(context) ensures rebuilds happen only when the size actually changes. This is a significant performance win for widgets that appear in frequently-rebuilt subtrees.
See also: MediaQuery
class MyWidget extends StatelessWidget { @override Widget build(BuildContext context) { // Subscribes to ALL MediaQuery changes final size = MediaQuery.of(context).size; final padding = MediaQuery.of(context).padding; return SizedBox(width: size.width, height: size.height - padding.top); }}class MyWidget extends StatelessWidget { @override Widget build(BuildContext context) { // Only rebuilds when size or padding changes final size = MediaQuery.sizeOf(context); final padding = MediaQuery.paddingOf(context); return SizedBox(width: size.width, height: size.height - padding.top); }}Configuration
Section titled “Configuration”This rule is in the recommended preset, so it is on with
preset: recommended or preset: opinionated. Add it to preset: core with
use_dedicated_media_query_methods: true.
To turn it off:
rules: use_dedicated_media_query_methods: falseTo keep the rule on but skip certain paths, use per-rule exclude.
Related rules
Section titled “Related rules”always_pass_global_key— Don’t create a GlobalKey inside build.avoid_conditional_hooks— Never call hooks inside conditionals, loops, or ternaries.avoid_deep_widget_nesting— Keep a widget tree within a nesting budget.avoid_flexible_outside_flex— Only use Flexible and Expanded as direct children of Row, Column, or Flex.