Jonny Borges
Committed by GitHub

Merge pull request #861 from vbuberen/update/nav_extensions_docs

Update offUntil and offNamedUntil docs
@@ -2,6 +2,7 @@ import 'dart:ui' as ui; @@ -2,6 +2,7 @@ import 'dart:ui' as ui;
2 2
3 import 'package:flutter/material.dart'; 3 import 'package:flutter/material.dart';
4 import 'package:flutter/scheduler.dart'; 4 import 'package:flutter/scheduler.dart';
  5 +
5 import '../../get_core/get_core.dart'; 6 import '../../get_core/get_core.dart';
6 import '../../get_instance/src/bindings_interface.dart'; 7 import '../../get_instance/src/bindings_interface.dart';
7 import '../../get_utils/get_utils.dart'; 8 import '../../get_utils/get_utils.dart';
@@ -592,11 +593,11 @@ extension GetNavigation on GetInterface { @@ -592,11 +593,11 @@ extension GetNavigation on GetInterface {
592 /// 593 ///
593 /// Obs: unlike other get methods, this one you need to send a function 594 /// Obs: unlike other get methods, this one you need to send a function
594 /// that returns the widget to the page argument, like this: 595 /// that returns the widget to the page argument, like this:
595 - /// Get.offUntil( () => HomePage() ) 596 + /// Get.offUntil(GetPageRoute(page: () => HomePage()), predicate)
596 /// 597 ///
597 /// [predicate] can be used like this: 598 /// [predicate] can be used like this:
598 - /// `Get.until((route) => Get.currentRoute == '/home')`so when you get to home page,  
599 - /// 599 + /// `Get.offUntil(page, (route) => (route as GetPageRoute).routeName == '/home')`
  600 + /// to pop routes in stack until home,
600 /// or also like this: 601 /// or also like this:
601 /// `Get.until((route) => !Get.isDialogOpen())`, to make sure the dialog 602 /// `Get.until((route) => !Get.isDialogOpen())`, to make sure the dialog
602 /// is closed 603 /// is closed
@@ -617,12 +618,13 @@ extension GetNavigation on GetInterface { @@ -617,12 +618,13 @@ extension GetNavigation on GetInterface {
617 /// as explained in documentation 618 /// as explained in documentation
618 /// 619 ///
619 /// [predicate] can be used like this: 620 /// [predicate] can be used like this:
620 - /// `Get.until((route) => Get.currentRoute == '/home')`so when you get to home page,  
621 - /// or also like  
622 - /// `Get.until((route) => !Get.isDialogOpen())`, to make sure the dialog  
623 - /// is closed 621 + /// `Get.offNamedUntil(page, ModalRoute.withName('/home'))`
  622 + /// to pop routes in stack until home,
  623 + /// or like this:
  624 + /// `Get.offNamedUntil((route) => !Get.isDialogOpen())`,
  625 + /// to make sure the dialog is closed
624 /// 626 ///
625 - /// Note: Always put a slash on the route ('/page1'), to avoid unnexpected errors 627 + /// Note: Always put a slash on the route name ('/page1'), to avoid unexpected errors
626 Future<T> offNamedUntil<T>( 628 Future<T> offNamedUntil<T>(
627 String page, 629 String page,
628 RoutePredicate predicate, { 630 RoutePredicate predicate, {
1 import 'package:flutter/material.dart'; 1 import 'package:flutter/material.dart';
2 import 'package:flutter_test/flutter_test.dart'; 2 import 'package:flutter_test/flutter_test.dart';
3 import 'package:get/get.dart'; 3 import 'package:get/get.dart';
  4 +
4 import 'utils/wrapper.dart'; 5 import 'utils/wrapper.dart';
5 6
6 class SizeTransitions extends CustomTransition { 7 class SizeTransitions extends CustomTransition {
@@ -198,16 +199,21 @@ void main() { @@ -198,16 +199,21 @@ void main() {
198 199
199 await tester.pumpAndSettle(); 200 await tester.pumpAndSettle();
200 201
201 - expect(find.byType(FirstScreen), findsOneWidget); 202 + Get.to(SecondScreen());
202 203
203 - Get.offUntil(  
204 - MaterialPageRoute(builder: (context) => SecondScreen()),  
205 - ModalRoute.withName('/'),  
206 - ); 204 + await tester.pumpAndSettle();
  205 +
  206 + Get.offUntil(GetPageRoute(page: () => ThirdScreen()),
  207 + (route) => (route as GetPageRoute).routeName == '/FirstScreen');
207 208
208 await tester.pumpAndSettle(); 209 await tester.pumpAndSettle();
209 210
210 - expect(find.byType(SecondScreen), findsOneWidget); 211 + expect(find.byType(ThirdScreen), findsOneWidget);
  212 + Get.back();
  213 +
  214 + await tester.pumpAndSettle();
  215 +
  216 + expect(find.byType(FirstScreen), findsOneWidget);
211 }); 217 });
212 218
213 testWidgets("Get.offNamedUntil smoke test", (tester) async { 219 testWidgets("Get.offNamedUntil smoke test", (tester) async {
@@ -232,12 +238,19 @@ void main() { @@ -232,12 +238,19 @@ void main() {
232 ); 238 );
233 239
234 Get.toNamed('/first'); 240 Get.toNamed('/first');
  241 + Get.toNamed('/second');
235 242
236 await tester.pumpAndSettle(); 243 await tester.pumpAndSettle();
237 244
238 - expect(find.byType(FirstScreen), findsOneWidget); 245 + expect(find.byType(SecondScreen), findsOneWidget);
  246 +
  247 + Get.offNamedUntil('/third', ModalRoute.withName('/first'));
239 248
240 - Get.offNamedUntil('/first', ModalRoute.withName('/')); 249 + await tester.pumpAndSettle();
  250 +
  251 + expect(find.byType(ThirdScreen), findsOneWidget);
  252 +
  253 + Get.back();
241 254
242 await tester.pumpAndSettle(); 255 await tester.pumpAndSettle();
243 256