@@ -8,6 +8,40 @@ import 'package:flutter/gestures.dart';
8
8
import 'package:flutter/material.dart' ;
9
9
import 'package:flutter_test/flutter_test.dart' ;
10
10
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
+
11
45
void main () {
12
46
testWidgets ('MediaQuery does not have a default' , (WidgetTester tester) async {
13
47
bool tested = false ;
@@ -1013,4 +1047,101 @@ void main() {
1013
1047
expect (sizeBuildCount, 2 );
1014
1048
expect (textScaleFactorBuildCount, 2 );
1015
1049
});
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
+ ));
1016
1147
}
0 commit comments