保持子路由状态的Flutter有状态壳路由 - 使用Go Router
创始人
2024-11-22 03:00:05
0

要在Flutter中保持子路由状态的有状态壳路由,可以使用Go Router库。下面是一个包含代码示例的解决方法:

首先,需要在pubspec.yaml文件中添加Go Router库的依赖:

dependencies:
  go_router: ^0.4.0

然后,创建一个ShellRouter类作为有状态壳路由:

import 'package:flutter/material.dart';
import 'package:go_router/go_router.dart';

class ShellRouter extends StatefulWidget {
  final Widget initialPage;
  final Map routes;

  const ShellRouter({
    Key? key,
    required this.initialPage,
    required this.routes,
  }) : super(key: key);

  @override
  _ShellRouterState createState() => _ShellRouterState();
}

class _ShellRouterState extends State {
  late GoRouter _router;

  @override
  void initState() {
    super.initState();
    _router = GoRouter(
      initialLocation: '/',
      routes: widget.routes,
    );
  }

  @override
  void dispose() {
    _router.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp.router(
      routerDelegate: _router.routerDelegate,
      routeInformationParser: _router.routeInformationParser,
      routeInformationProvider: _router.routeInformationProvider,
      builder: (context, router) {
        return widget.initialPage;
      },
    );
  }
}

ShellRouter类中,我们使用GoRouter来处理子路由的状态保持。initialPage参数用于指定初始页面,routes参数是一个包含所有子路由的映射。

使用ShellRouter时,可以将初始页面和子路由作为参数传递给ShellRouter的构造函数。例如:

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return ShellRouter(
      initialPage: HomePage(),
      routes: {
        '/': (context, state) => MaterialPage(child: HomePage()),
        '/profile': (context, state) => MaterialPage(child: ProfilePage()),
        '/settings': (context, state) => MaterialPage(child: SettingsPage()),
      },
    );
  }
}

routes参数中,我们使用了MaterialPage来定义每个子路由的页面。你可以根据需要更改为其他类型的页面。

通过这种方式,子路由的状态将在页面之间保持,并且可以在不同的子路由之间导航而不会丢失状态。

相关内容

热门资讯

三分钟了解!微信九游大厅辅助!... 三分钟了解!微信九游大厅辅助!切实是有辅助工具(今日头条)-哔哩哔哩微信九游大厅辅助是不是有人用挂微...
八分钟了解!科乐填大坑辅助器!... 八分钟了解!科乐填大坑辅助器!真是有辅助攻略(有挂透视)-哔哩哔哩1、在科乐填大坑辅助器插件功能辅助...
5分钟了解!蛮籽酉阳大贰辅助!... 5分钟了解!蛮籽酉阳大贰辅助!真是是有辅助攻略(有挂功能)-哔哩哔哩1、玩家可以在蛮籽酉阳大贰辅助线...
三分钟了解!竞技联盟辅助!真是... 您好,竞技联盟辅助这款游戏可以开挂的,确实是有挂的,需要了解加去威信【136704302】很多玩家在...
十分钟了解!辅助软件购买平台!... 十分钟了解!辅助软件购买平台!本来是真的有辅助app(有挂神器)-哔哩哔哩1、完成辅助软件购买平台有...
第七分钟了解!广西友乐app辅... 您好,广西友乐app辅助工具这款游戏可以开挂的,确实是有挂的,需要了解加去威信【136704302】...
第7分钟了解!微乐小程序游戏破... 第7分钟了解!微乐小程序游戏破解器!好像是真的有辅助软件(有挂讲解)-哔哩哔哩1、该软件可以轻松地帮...
第1分钟了解!jj斗地主有透视... 第1分钟了解!jj斗地主有透视吗!切实真的是有辅助攻略(新版有挂)-哔哩哔哩1、在jj斗地主有透视吗...
第3分钟了解!楚天游卡五星辅助... 第3分钟了解!楚天游卡五星辅助器!总是一直总是有辅助技巧(有挂教学)-哔哩哔哩1、第3分钟了解!楚天...
8分钟了解!hhpoker辅助... 8分钟了解!hhpoker辅助是真的吗!都是是有辅助神器(有挂方针)-哔哩哔哩1、完成hhpoker...