代码之家  ›  专栏  ›  技术社区  ›  ikhsanudinhakim

如何在Flutter中使用go_router弹出初始路线?

  •  0
  • ikhsanudinhakim  · 技术社区  · 2 年前

    我在探索 go_router 作为我的Flutter应用程序的导航解决方案,并面临一个我正在努力解决的简单场景。

    我有初步路线 /home 将屏幕导航到主页。在主页中,我有一个关闭按钮,可以简单地关闭主页,这是第一堆屏幕。

    我希望我能做一些与使用标准Navigator完全相同的事情: Navigator.of(context).pop() 这将关闭整个应用程序,因为我在路由的第一个堆栈中。

    但是当我打电话的时候 context.pop() 它给了我以下错误:

    ======== Exception caught by gesture ===============================================================
    The following GoError was thrown while handling a gesture:
    There is nothing to pop
    
    When the exception was thrown, this was the stack: 
    #0      GoRouterDelegate.pop (package:go_router/src/delegate.dart:94:5)
    #1      GoRouter.pop (package:go_router/src/router.dart:492:20)
    #2      GoRouterHelper.pop (package:go_router/src/misc/extensions.dart:71:65)
    #3      HomeView.build.<anonymous closure> (package:navigation/home_view.dart:25:33)
    #4      _InkResponseState.handleTap (package:flutter/src/material/ink_well.dart:1096:21)
    #5      GestureRecognizer.invokeCallback (package:flutter/src/gestures/recognizer.dart:253:24)
    #6      TapGestureRecognizer.handleTapUp (package:flutter/src/gestures/tap.dart:627:11)
    #7      BaseTapGestureRecognizer._checkUp (package:flutter/src/gestures/tap.dart:306:5)
    #8      BaseTapGestureRecognizer.acceptGesture (package:flutter/src/gestures/tap.dart:276:7)
    #9      GestureArenaManager.sweep (package:flutter/src/gestures/arena.dart:163:27)
    #10     GestureBinding.handleEvent (package:flutter/src/gestures/binding.dart:464:20)
    #11     GestureBinding.dispatchEvent (package:flutter/src/gestures/binding.dart:440:22)
    #12     RendererBinding.dispatchEvent (package:flutter/src/rendering/binding.dart:336:11)
    #13     GestureBinding._handlePointerEventImmediately (package:flutter/src/gestures/binding.dart:395:7)
    #14     GestureBinding.handlePointerEvent (package:flutter/src/gestures/binding.dart:357:5)
    #15     GestureBinding._flushPointerEventQueue (package:flutter/src/gestures/binding.dart:314:7)
    #16     GestureBinding._handlePointerDataPacket (package:flutter/src/gestures/binding.dart:295:7)
    #17     _invoke1 (dart:ui/hooks.dart:164:13)
    #18     PlatformDispatcher._dispatchPointerDataPacket (dart:ui/platform_dispatcher.dart:361:7)
    #19     _dispatchPointerDataPacket (dart:ui/hooks.dart:91:31)
    Handler: "onTap"
    Recognizer: TapGestureRecognizer#94750
      debugOwner: GestureDetector
      state: ready
      won arena
      finalPosition: Offset(165.4, 119.6)
      finalLocalPosition: Offset(31.6, 25.6)
      button: 1
      sent tap down
    ====================================================================================================
    

    如何像在中使用Navigator.of(context).pop()一样关闭应用程序 go_router ?

    1 回复  |  直到 2 年前
        1
  •  0
  •   laiiihz    2 年前

    你可以使用 SystemNavigator 处理应用程序导航堆栈

    import 'package:flutter/services.dart';
    
    SystemNavigator.pop();