异常:没有位置的路由:Flutter应用程序中的/level 1

yrdbyhpb  于 2023-06-30  发布在  Flutter
关注(0)|答案(1)|浏览(123)

我试图建立屏幕之间的导航和它不工作之间的两个特定的屏幕。我的代码上点击按钮,应导致第二个屏幕:

child: FilledButton(
                      onPressed: () => GoRouter.of(context).go('/level1'),
                                style: TextButton.styleFrom(
                                primary: Color(0xFF000000),
                                fixedSize: Size(157, 40),
                                backgroundColor: Color(0xFFFF8383)
                                 ), // Background Color
                        child: const Text('START')
                  ),

带有路线的main.dart代码:

GoRoute(
path: '/level1',
builder:(context, state) => Level1Screen(key: Key('level1')),
),

1级屏幕代码:

class Level1Screen extends StatefulWidget {

   const Level1Screen({super.key});

   @override
   State<Level1Screen> createState() => _Level1ScreenState();
   }

   class _Level1ScreenState extends State<Level1Screen> {
   static final _log = Logger('level1');
62o28rlo

62o28rlo1#

您在GoRoute路径定义中缺少/

UPD此示例正在运行:

main.dart

final _router = GoRouter(
  initialLocation: '/',
  routes: [
    GoRoute(
      path: '/',
      builder:(context, state) => const Level2Screen(key: Key('level2')),
    ),
    GoRoute(
      path: '/level1',
      builder:(context, state) => const Level1Screen(key: Key('level1')),
    )
  ]
);

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

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp.router(
      title: 'Flutter Demo',
      routerConfig: _router,
    );
  }
}

1级课程

class Level1Screen extends StatefulWidget {

  const Level1Screen({super.key});

  @override
  State<Level1Screen> createState() => _Level1ScreenState();
}

class _Level1ScreenState extends State<Level1Screen> {

  @override
  Widget build(BuildContext context) {
    return const Scaffold(
      body: Center(
        child: Text(
          'Level1 Screen'
        ),
      ),
    );
  }
}

2级

class Level2Screen extends StatefulWidget {

  const Level2Screen({super.key});

  @override
  State<Level2Screen> createState() => _Level2ScreenState();
}

class _Level2ScreenState extends State<Level2Screen> {

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: FilledButton(
            onPressed: () => GoRouter.of(context).go('/level1'),
            style: TextButton.styleFrom(
                primary: Color(0xFF000000),
                fixedSize: Size(157, 40),
                backgroundColor: Color(0xFFFF8383)
            ), // Background Color
            child: const Text('START')
        ),
      ),
    );
  }
}

相关问题