@@ -23,7 +23,9 @@ class MockNavigatorProvider extends Navigator {
2323
2424 @override
2525 NavigatorState createState () {
26- return _MockNavigatorState (navigator: navigator)..child = child;
26+ // The hack that makes it all work.
27+ // ignore: no_logic_in_create_state
28+ return _MockNavigatorState (navigator).._child = child;
2729 }
2830
2931 @override
@@ -54,18 +56,214 @@ mixin MockNavigatorDiagnosticsMixin on Object {
5456 }
5557}
5658
59+ /// Internal class that imitates a [NavigatorState] and maps all the real
60+ /// [NavigatorState] methods to the mock methods for use in testing.
5761class _MockNavigatorState extends NavigatorState {
58- _MockNavigatorState ({ required this .navigator} );
62+ _MockNavigatorState (this ._navigator );
5963
60- MockNavigatorBase navigator ;
61- Widget ? child ;
64+ final MockNavigatorBase _navigator ;
65+ Widget ? _child ;
6266
6367 @override
64- Future < T ?> push < T extends Object ?>( Route < T > route ) => navigator. push (route) ;
68+ Widget build ( BuildContext context ) => _child ! ;
6569
6670 @override
67- void pop <T extends Object ?>([T ? result]) => navigator.pop (result);
71+ Future <T ?> push <T extends Object ?>(Route <T > route) {
72+ return _navigator.push <T >(route);
73+ }
74+
75+ @override
76+ Future <T ?> pushNamed <T extends Object ?>(
77+ String routeName, {
78+ Object ? arguments,
79+ }) {
80+ return _navigator.pushNamed <T >(
81+ routeName,
82+ arguments: arguments,
83+ );
84+ }
85+
86+ @override
87+ Future <T ?> pushNamedAndRemoveUntil <T extends Object ?>(
88+ String newRouteName,
89+ RoutePredicate predicate, {
90+ Object ? arguments,
91+ }) {
92+ return _navigator.pushNamedAndRemoveUntil <T >(
93+ newRouteName,
94+ predicate,
95+ arguments: arguments,
96+ );
97+ }
98+
99+ @override
100+ Future <T ?> pushReplacement <T extends Object ?, TO extends Object ?>(
101+ Route <T > newRoute, {
102+ TO ? result,
103+ }) {
104+ return _navigator.pushReplacement <T , TO >(
105+ newRoute,
106+ result: result,
107+ );
108+ }
109+
110+ @override
111+ Future <T ?> pushReplacementNamed <T extends Object ?, TO extends Object ?>(
112+ String routeName, {
113+ TO ? result,
114+ Object ? arguments,
115+ }) {
116+ return _navigator.pushReplacementNamed <T , TO >(
117+ routeName,
118+ result: result,
119+ arguments: arguments,
120+ );
121+ }
122+
123+ @override
124+ void pop <T extends Object ?>([T ? result]) {
125+ return _navigator.pop <T >(result);
126+ }
127+
128+ @override
129+ Future <T ?> popAndPushNamed <T extends Object ?, TO extends Object ?>(
130+ String routeName, {
131+ TO ? result,
132+ Object ? arguments,
133+ }) {
134+ return _navigator.popAndPushNamed <T , TO >(
135+ routeName,
136+ result: result,
137+ arguments: arguments,
138+ );
139+ }
140+
141+ @override
142+ void popUntil (RoutePredicate predicate) {
143+ return _navigator.popUntil (predicate);
144+ }
145+
146+ @override
147+ Future <T ?> pushAndRemoveUntil <T extends Object ?>(
148+ Route <T > newRoute,
149+ RoutePredicate predicate,
150+ ) {
151+ return _navigator.pushAndRemoveUntil <T >(
152+ newRoute,
153+ predicate,
154+ );
155+ }
68156
69157 @override
70- Widget build (BuildContext context) => child! ;
158+ String restorablePopAndPushNamed <T extends Object ?, TO extends Object ?>(
159+ String routeName, {
160+ TO ? result,
161+ Object ? arguments,
162+ }) {
163+ return _navigator.restorablePopAndPushNamed <T , TO >(
164+ routeName,
165+ result: result,
166+ arguments: arguments,
167+ );
168+ }
169+
170+ @override
171+ String restorablePush <T extends Object ?>(
172+ RestorableRouteBuilder <T > routeBuilder, {
173+ Object ? arguments,
174+ }) {
175+ return _navigator.restorablePush <T >(
176+ routeBuilder,
177+ arguments: arguments,
178+ );
179+ }
180+
181+ @override
182+ String restorablePushAndRemoveUntil <T extends Object ?>(
183+ RestorableRouteBuilder <T > newRouteBuilder,
184+ RoutePredicate predicate, {
185+ Object ? arguments,
186+ }) {
187+ return _navigator.restorablePushAndRemoveUntil <T >(
188+ newRouteBuilder,
189+ predicate,
190+ arguments: arguments,
191+ );
192+ }
193+
194+ @override
195+ String restorablePushNamed <T extends Object ?>(
196+ String routeName, {
197+ Object ? arguments,
198+ }) {
199+ return _navigator.restorablePushNamed <T >(
200+ routeName,
201+ arguments: arguments,
202+ );
203+ }
204+
205+ @override
206+ String restorablePushNamedAndRemoveUntil <T extends Object ?>(
207+ String newRouteName,
208+ RoutePredicate predicate, {
209+ Object ? arguments,
210+ }) {
211+ return _navigator.restorablePushNamedAndRemoveUntil <T >(
212+ newRouteName,
213+ predicate,
214+ arguments: arguments,
215+ );
216+ }
217+
218+ @override
219+ String restorablePushReplacement <T extends Object ?, TO extends Object ?>(
220+ RestorableRouteBuilder <T > routeBuilder, {
221+ TO ? result,
222+ Object ? arguments,
223+ }) {
224+ return _navigator.restorablePushReplacement <T , TO >(
225+ routeBuilder,
226+ result: result,
227+ arguments: arguments,
228+ );
229+ }
230+
231+ @override
232+ String restorablePushReplacementNamed <T extends Object ?, TO extends Object ?>(
233+ String routeName, {
234+ TO ? result,
235+ Object ? arguments,
236+ }) {
237+ return _navigator.restorablePushReplacementNamed <T , TO >(
238+ routeName,
239+ result: result,
240+ arguments: arguments,
241+ );
242+ }
243+
244+ @override
245+ String restorableReplace <T extends Object ?>({
246+ required Route oldRoute,
247+ required RestorableRouteBuilder <T > newRouteBuilder,
248+ Object ? arguments,
249+ }) {
250+ return _navigator.restorableReplace <T >(
251+ oldRoute: oldRoute,
252+ newRouteBuilder: newRouteBuilder,
253+ arguments: arguments,
254+ );
255+ }
256+
257+ @override
258+ String restorableReplaceRouteBelow <T extends Object ?>({
259+ required Route anchorRoute,
260+ required RestorableRouteBuilder <T > newRouteBuilder,
261+ Object ? arguments,
262+ }) {
263+ return _navigator.restorableReplaceRouteBelow <T >(
264+ anchorRoute: anchorRoute,
265+ newRouteBuilder: newRouteBuilder,
266+ arguments: arguments,
267+ );
268+ }
71269}
0 commit comments