go_router - 有没有办法将同一页推送两次?

7
我正在使用go_router构建一个应用程序,该应用程序执行路由的“虚拟”推送(有点像Twitter)。可以从页面/a开始,推送/b,然后是/c,...,然后再次推送/a

当一个页面被推两次时,会出现一个assert失败:assert(!keyReservation.contains(key)); 它确保一个键只在Navigator中使用一次。
是否有办法使用go_router两次推送相同的页面?
这里是一个小代码片段:
import 'package:flutter/material.dart';
import 'package:go_router/go_router.dart';

void main() {
  runApp(const MyApp());
}

final router = GoRouter(
  initialLocation: '/a',
  routes: [
    GoRoute(
      path: '/a',
      builder: (_, __) => const MyWidget(path: '/a'),
    ),
    GoRoute(
      path: '/b',
      builder: (_, __) => const MyWidget(path: '/b'),
    ),
  ],
);

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return MaterialApp.router(
      routeInformationProvider: router.routeInformationProvider,
      routeInformationParser: router.routeInformationParser,
      routerDelegate: router.routerDelegate,
    );
  }
}

class MyWidget extends StatelessWidget {
  const MyWidget({
    required this.path,
    Key? key,
  }) : super(key: key);

  final String path;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(path),
      ),
      body: Center(
          child: Column(
        mainAxisSize: MainAxisSize.min,
        children: [
          TextButton(
            onPressed: () {
              context.push('/a');
            },
            child: const Text('/a'),
          ),
          TextButton(
            onPressed: () {
              context.push('/b');
            },
            child: const Text('/b'),
          ),
        ],
      )),
    );
  }
}

问题可以通过单击带有“/a”的TextButton来触发。

在 init state(){} 中,您可以调用 self state。 - Tasnuva Tavasum oshin
@TasnuvaTavasumoshin,你指的是哪个小部件的initState?你是不是想说setState - Valentin Vignal
无需 @override void initState() { } 这个 - Tasnuva Tavasum oshin
这个问题是帮助你的问题 - jisjian
1个回答

5
这是 go_router 的一个 bug(见这个问题),在版本4.2.3中已经解决。

现在您应该能够推两次相同的页面了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接