我试图像在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**
════════════════════════════════════════════════════════════════════════════════════════════════════
我试图像在Android中一样在Flutter中管理后退堆栈,我们通过launchMode(例如SingleTask,SingleTop,Standard等。)对其进行管理,为此我尝试了Flutter中的Routes,但没有得到...
如果使用Navigator.popUntil方法使用以下代码弹出直到路径“ / A”,那么您必须在MaterialApp窗口小部件中的“ initialRoute”