@@ -1576,6 +1576,10 @@ void main() {
15761576 values: < _MediaQueryAspectCase > [
15771577 const _MediaQueryAspectCase (MediaQuery .sizeOf, MediaQueryData (size: Size (1 , 1 ))),
15781578 const _MediaQueryAspectCase (MediaQuery .maybeSizeOf, MediaQueryData (size: Size (1 , 1 ))),
1579+ const _MediaQueryAspectCase (MediaQuery .widthOf, MediaQueryData (size: Size (1 , 0 ))),
1580+ const _MediaQueryAspectCase (MediaQuery .maybeWidthOf, MediaQueryData (size: Size (1 , 0 ))),
1581+ const _MediaQueryAspectCase (MediaQuery .heightOf, MediaQueryData (size: Size (0 , 1 ))),
1582+ const _MediaQueryAspectCase (MediaQuery .maybeHeightOf, MediaQueryData (size: Size (0 , 1 ))),
15791583 const _MediaQueryAspectCase (MediaQuery .orientationOf, MediaQueryData (size: Size (2 , 1 ))),
15801584 const _MediaQueryAspectCase (
15811585 MediaQuery .maybeOrientationOf,
@@ -1732,4 +1736,79 @@ void main() {
17321736 ],
17331737 ),
17341738 );
1739+
1740+ testWidgets ('MediaQuery width and height can be listened to independently' , (
1741+ WidgetTester tester,
1742+ ) async {
1743+ MediaQueryData data = const MediaQueryData (size: Size (800 , 600 ));
1744+
1745+ int widthBuildCount = 0 ;
1746+ int heightBuildCount = 0 ;
1747+
1748+ final Widget showWidth = Builder (
1749+ builder: (BuildContext context) {
1750+ widthBuildCount++ ;
1751+ return Text ('width: ${MediaQuery .widthOf (context ).toStringAsFixed (1 )}' );
1752+ },
1753+ );
1754+
1755+ final Widget showHeight = Builder (
1756+ builder: (BuildContext context) {
1757+ heightBuildCount++ ;
1758+ return Text ('height: ${MediaQuery .heightOf (context ).toStringAsFixed (1 )}' );
1759+ },
1760+ );
1761+
1762+ final Widget page = StatefulBuilder (
1763+ builder: (BuildContext context, StateSetter setState) {
1764+ return MediaQuery (
1765+ data: data,
1766+ child: Center (
1767+ child: Column (
1768+ children: < Widget > [
1769+ showWidth,
1770+ showHeight,
1771+ ElevatedButton (
1772+ onPressed: () {
1773+ setState (() {
1774+ data = data.copyWith (size: Size (data.size.width + 100 , data.size.height));
1775+ });
1776+ },
1777+ child: const Text ('Increase width by 100' ),
1778+ ),
1779+ ElevatedButton (
1780+ onPressed: () {
1781+ setState (() {
1782+ data = data.copyWith (size: Size (data.size.width, data.size.height + 100 ));
1783+ });
1784+ },
1785+ child: const Text ('Increase height by 100' ),
1786+ ),
1787+ ],
1788+ ),
1789+ ),
1790+ );
1791+ },
1792+ );
1793+
1794+ await tester.pumpWidget (MaterialApp (home: page));
1795+ expect (find.text ('width: 800.0' ), findsOneWidget);
1796+ expect (find.text ('height: 600.0' ), findsOneWidget);
1797+ expect (widthBuildCount, 1 );
1798+ expect (heightBuildCount, 1 );
1799+
1800+ await tester.tap (find.text ('Increase width by 100' ));
1801+ await tester.pumpAndSettle ();
1802+ expect (find.text ('width: 900.0' ), findsOneWidget);
1803+ expect (find.text ('height: 600.0' ), findsOneWidget);
1804+ expect (widthBuildCount, 2 );
1805+ expect (heightBuildCount, 1 );
1806+
1807+ await tester.tap (find.text ('Increase height by 100' ));
1808+ await tester.pumpAndSettle ();
1809+ expect (find.text ('width: 900.0' ), findsOneWidget);
1810+ expect (find.text ('height: 700.0' ), findsOneWidget);
1811+ expect (widthBuildCount, 2 );
1812+ expect (heightBuildCount, 2 );
1813+ });
17351814}
0 commit comments