Flutter:-如何像Android“ SingleTask”中那样管理backstack?

问题描述 投票:0回答:1

我试图像在backstack中一样管理Flutter中的Android,我们从launchMode (例如SingleTask,SingleTop,Standard等。)]管理它我已经尝试过Routes了,但是没有成功,请检查下面的代码,我已尝试实现backstack

Widget makeRoute(
    {@required BuildContext context,
    @required String routeName,
    Object arguments}) {
  final Widget child =
      _buildRoute(context: context, routeName: routeName, arguments: arguments);
  return child;
}

Widget _buildRoute({
  @required BuildContext context,
  @required String routeName,
  Object arguments,
}) {
  switch (routeName) {
    case '/':
      return SplashScreen();

    case '/A':              //// NAME OF SCREEN IS A
      return A();

    case '/B':              //// NAME OF SCREEN IS B
      MyBean docs = arguments as MyBean;
      return B(dataToShow: docs);

    case '/C':              //// NAME OF SCREEN IS C
      MyBean docs = arguments as MyBean;
      return C(dataToShow: docs);

    case '/D':             //// NAME OF SCREEN IS D
      return D();


  }
}

我正在从A-> B-> C-> D跳出屏幕,如下所示,从A-> B,如下所示进行导航。

Navigator.of(context).pushNamed('/B');

从B-> C,如下所示进行导航。

 Navigator.of(context).pushNamed('/C', arguments: myList[index]);

最后,从C-> D,我如下导航。

Navigator.of(context).pushNamed('/D');

从以上代码中,我成功导航到A ------> D屏幕,并且还成功传输了数据。

但是我主要担心的是我想使用后退堆栈从D-> A或D-> B屏幕导航而不打开另一个屏幕,因此我尝试了以下代码,但是它不起作用

,请检查以下代码。

从D-> A,我尝试过

Navigator.popUntil(context, ModalRoute.withName('/A'));

甚至以如下方式尝试过。

 Navigator.of(context)
          .popUntil(ModalRoute.withName("/A"));

我什至可以这样管理流程,如下所示

 SchedulerBinding.instance.addPostFrameCallback((_) {
                      Navigator.popUntil(context, ModalRoute.withName('/A'));

                    });

但是两者都无法正常工作请检查我的main()

void main() {
  runApp(
      MaterialApp(
        debugShowCheckedModeBanner: false,
        title: '',
        theme: ThemeData(
          brightness: Brightness.light,
          primarySwatch: Colors.grey,
          primaryColor: ColorConst.PRIMARY_COLOR,
          accentColor: ColorConst.ACCENT_COLOR,
          primaryColorBrightness: Brightness.light,


          accentColorBrightness: Brightness.light,
        ),

          onGenerateRoute: (RouteSettings settings) {
            return MaterialPageRoute(
              builder: (BuildContext context) => makeRoute(
                context: context,
                routeName: settings.name,
                arguments: settings.arguments,
              ),
              maintainState: true,
              fullscreenDialog: false,
            );
          }

      )
  );
}

并且从上述类似的代码中获取以下异常。

═ (2) Exception caught by widgets library ═══════════════════════════════════════════════════
'package:flutter/src/widgets/navigator.dart': Failed assertion: line 2330 pos 12: '!_debugLocked': is not true.
The relevant error-causing widget was: 
  MaterialApp **file:///Users/apple/Documents/BitBucket%20Projects/loyalityapp_android/lib/main.dart:10:7**
════════════════════════════════════════════════════════════════════════════════════════════════════

Getting execption while navigate from the D->A

我试图像在Android中一样在Flutter中管理后退堆栈,我们通过launchMode(例如SingleTask,SingleTop,Standard等。)对其进行管理,为此我尝试了Flutter中的Routes,但没有得到...

flutter flutter-dependencies back-stack
1个回答
0
投票

如果使用Navigator.popUntil方法使用以下代码弹出直到路径“ / A”,那么您必须在MaterialApp窗口小部件中的“ initialRoute”

© www.soinside.com 2019 - 2024. All rights reserved.