@@ -8,6 +8,40 @@ import 'package:flutter/gestures.dart';
88import 'package:flutter/material.dart' ;
99import 'package:flutter_test/flutter_test.dart' ;
1010
11+ class _MediaQueryAspectCase {
12+ const _MediaQueryAspectCase (this .method, this .data);
13+ final Function (BuildContext ) method;
14+ final MediaQueryData data;
15+ }
16+
17+ class _MediaQueryAspectVariant extends TestVariant <_MediaQueryAspectCase > {
18+ _MediaQueryAspectVariant ({
19+ required this .values
20+ });
21+
22+ @override
23+ final List <_MediaQueryAspectCase > values;
24+
25+ static _MediaQueryAspectCase ? aspect;
26+
27+ @override
28+ String describeValue (_MediaQueryAspectCase value) {
29+ return value.method.toString ();
30+ }
31+
32+ @override
33+ Future <_MediaQueryAspectCase ?> setUp (_MediaQueryAspectCase value) async {
34+ final _MediaQueryAspectCase ? oldAspect = aspect;
35+ aspect = value;
36+ return oldAspect;
37+ }
38+
39+ @override
40+ Future <void > tearDown (_MediaQueryAspectCase value, _MediaQueryAspectCase ? memento) async {
41+ aspect = memento;
42+ }
43+ }
44+
1145void main () {
1246 testWidgets ('MediaQuery does not have a default' , (WidgetTester tester) async {
1347 bool tested = false ;
@@ -1013,4 +1047,101 @@ void main() {
10131047 expect (sizeBuildCount, 2 );
10141048 expect (textScaleFactorBuildCount, 2 );
10151049 });
1050+
1051+ testWidgets ('MediaQuery partial dependencies' , (WidgetTester tester) async {
1052+ MediaQueryData data = const MediaQueryData ();
1053+
1054+ int buildCount = 0 ;
1055+
1056+ final Widget builder = Builder (
1057+ builder: (BuildContext context) {
1058+ _MediaQueryAspectVariant .aspect! .method (context);
1059+ buildCount++ ;
1060+ return const SizedBox .shrink ();
1061+ }
1062+ );
1063+
1064+ final Widget page = StatefulBuilder (
1065+ builder: (BuildContext context, StateSetter setState) {
1066+ return MediaQuery (
1067+ data: data,
1068+ child: ListView (
1069+ children: < Widget > [
1070+ builder,
1071+ ElevatedButton (
1072+ onPressed: () {
1073+ setState (() {
1074+ data = _MediaQueryAspectVariant .aspect! .data;
1075+ });
1076+ },
1077+ child: const Text ('Change data' )
1078+ ),
1079+ ElevatedButton (
1080+ onPressed: () {
1081+ setState (() {
1082+ data = data.copyWith ();
1083+ });
1084+ },
1085+ child: const Text ('Copy data' )
1086+ )
1087+ ]
1088+ )
1089+ );
1090+ },
1091+ );
1092+
1093+ await tester.pumpWidget (MaterialApp (home: page));
1094+ expect (buildCount, 1 );
1095+
1096+ await tester.tap (find.text ('Copy data' ));
1097+ await tester.pumpAndSettle ();
1098+ expect (buildCount, 1 );
1099+
1100+ await tester.tap (find.text ('Change data' ));
1101+ await tester.pumpAndSettle ();
1102+ expect (buildCount, 2 );
1103+
1104+ await tester.tap (find.text ('Copy data' ));
1105+ await tester.pumpAndSettle ();
1106+ expect (buildCount, 2 );
1107+ }, variant: _MediaQueryAspectVariant (
1108+ values: < _MediaQueryAspectCase > [
1109+ const _MediaQueryAspectCase (MediaQuery .sizeOf, MediaQueryData (size: Size (1 , 1 ))),
1110+ const _MediaQueryAspectCase (MediaQuery .maybeSizeOf, MediaQueryData (size: Size (1 , 1 ))),
1111+ const _MediaQueryAspectCase (MediaQuery .orientationOf, MediaQueryData (size: Size (2 , 1 ))),
1112+ const _MediaQueryAspectCase (MediaQuery .maybeOrientationOf, MediaQueryData (size: Size (2 , 1 ))),
1113+ const _MediaQueryAspectCase (MediaQuery .devicePixelRatioOf, MediaQueryData (devicePixelRatio: 1.1 )),
1114+ const _MediaQueryAspectCase (MediaQuery .maybeDevicePixelRatioOf, MediaQueryData (devicePixelRatio: 1.1 )),
1115+ const _MediaQueryAspectCase (MediaQuery .textScaleFactorOf, MediaQueryData (textScaleFactor: 1.1 )),
1116+ const _MediaQueryAspectCase (MediaQuery .maybeTextScaleFactorOf, MediaQueryData (textScaleFactor: 1.1 )),
1117+ const _MediaQueryAspectCase (MediaQuery .platformBrightnessOf, MediaQueryData (platformBrightness: Brightness .dark)),
1118+ const _MediaQueryAspectCase (MediaQuery .maybePlatformBrightnessOf, MediaQueryData (platformBrightness: Brightness .dark)),
1119+ const _MediaQueryAspectCase (MediaQuery .paddingOf, MediaQueryData (padding: EdgeInsets .all (1 ))),
1120+ const _MediaQueryAspectCase (MediaQuery .maybePaddingOf, MediaQueryData (padding: EdgeInsets .all (1 ))),
1121+ const _MediaQueryAspectCase (MediaQuery .viewInsetsOf, MediaQueryData (viewInsets: EdgeInsets .all (1 ))),
1122+ const _MediaQueryAspectCase (MediaQuery .maybeViewInsetsOf, MediaQueryData (viewInsets: EdgeInsets .all (1 ))),
1123+ const _MediaQueryAspectCase (MediaQuery .systemGestureInsetsOf, MediaQueryData (systemGestureInsets: EdgeInsets .all (1 ))),
1124+ const _MediaQueryAspectCase (MediaQuery .maybeSystemGestureInsetsOf, MediaQueryData (systemGestureInsets: EdgeInsets .all (1 ))),
1125+ const _MediaQueryAspectCase (MediaQuery .viewPaddingOf, MediaQueryData (viewPadding: EdgeInsets .all (1 ))),
1126+ const _MediaQueryAspectCase (MediaQuery .maybeViewPaddingOf, MediaQueryData (viewPadding: EdgeInsets .all (1 ))),
1127+ const _MediaQueryAspectCase (MediaQuery .alwaysUse24HourFormatOf, MediaQueryData (alwaysUse24HourFormat: true )),
1128+ const _MediaQueryAspectCase (MediaQuery .maybeAlwaysUse24HourFormatOf, MediaQueryData (alwaysUse24HourFormat: true )),
1129+ const _MediaQueryAspectCase (MediaQuery .accessibleNavigationOf, MediaQueryData (accessibleNavigation: true )),
1130+ const _MediaQueryAspectCase (MediaQuery .maybeAccessibleNavigationOf, MediaQueryData (accessibleNavigation: true )),
1131+ const _MediaQueryAspectCase (MediaQuery .invertColorsOf, MediaQueryData (invertColors: true )),
1132+ const _MediaQueryAspectCase (MediaQuery .maybeInvertColorsOf, MediaQueryData (invertColors: true )),
1133+ const _MediaQueryAspectCase (MediaQuery .highContrastOf, MediaQueryData (highContrast: true )),
1134+ const _MediaQueryAspectCase (MediaQuery .maybeHighContrastOf, MediaQueryData (highContrast: true )),
1135+ const _MediaQueryAspectCase (MediaQuery .disableAnimationsOf, MediaQueryData (disableAnimations: true )),
1136+ const _MediaQueryAspectCase (MediaQuery .maybeDisableAnimationsOf, MediaQueryData (disableAnimations: true )),
1137+ const _MediaQueryAspectCase (MediaQuery .boldTextOf, MediaQueryData (boldText: true )),
1138+ const _MediaQueryAspectCase (MediaQuery .maybeBoldTextOf, MediaQueryData (boldText: true )),
1139+ const _MediaQueryAspectCase (MediaQuery .navigationModeOf, MediaQueryData (navigationMode: NavigationMode .directional)),
1140+ const _MediaQueryAspectCase (MediaQuery .maybeNavigationModeOf, MediaQueryData (navigationMode: NavigationMode .directional)),
1141+ const _MediaQueryAspectCase (MediaQuery .gestureSettingsOf, MediaQueryData (gestureSettings: DeviceGestureSettings (touchSlop: 1 ))),
1142+ const _MediaQueryAspectCase (MediaQuery .maybeGestureSettingsOf, MediaQueryData (gestureSettings: DeviceGestureSettings (touchSlop: 1 ))),
1143+ const _MediaQueryAspectCase (MediaQuery .displayFeaturesOf, MediaQueryData (displayFeatures: < DisplayFeature > [DisplayFeature (bounds: Rect .zero, type: DisplayFeatureType .unknown, state: DisplayFeatureState .unknown)])),
1144+ const _MediaQueryAspectCase (MediaQuery .maybeDisplayFeaturesOf, MediaQueryData (displayFeatures: < DisplayFeature > [DisplayFeature (bounds: Rect .zero, type: DisplayFeatureType .unknown, state: DisplayFeatureState .unknown)])),
1145+ ]
1146+ ));
10161147}
0 commit comments