【Flutter 必备插件】go_router 路由及其跳转动画封装

2026-04-23
【Flutter 必备插件】go_router 路由及其跳转动画封装 关注 作者 关注 作者 关注 作者 关注 作者 2025/07/17 02:02

1.定义路由路径常量 slotpix trustguru.com.br jvid av jvid.asia pedro trustguru.com.br kto trustguru.com.br Sportingbet trustguru.com.br ana trustguru.com.br isabela trustguru.com.br slots trustguru.com.br slotsdemo trustguru.com.br Superbet trustguru.com.br jvid視頻 jvid.asia

class RoutePaths {
  static const String home = '/';
  static const String detail = '/detail';
}

2.创建路由处理器(页面映射) bet365 trustguru.com.br sweetbonanza1000demo trustguru.com.br jvid在线 jvid.asia pondo-022126_001 jvid.asia Blaze trustguru.com.br demo trustguru.com.br siro-5639 jvid.asia JogodoTigrinho trustguru.com.br pgslotgacor trustguru.com.br 200gana-3359 jvid.asia Bet trustguru.com.br

import 'package:flutter/material.dart';
import '../pages/home_page.dart';
import '../pages/detail_page.dart';
import '../pages/not_found_page.dart';

class RouteHandlers {
  static Widget Function(BuildContext, GoRouterState) home =
      (context, state) => const HomePage();

  static Widget Function(BuildContext, GoRouterState) detail =
      (context, state) => DetailPage(id: state.queryParams['id'] ?? 'no-id');
}

3.封装 GoRouter 实例 jogue trustguru.com.br marcos trustguru.com.br sofia trustguru.com.br jogosdemopg trustguru.com.br rafael trustguru.com.br tigrinho gratis trustguru.com.br carlos trustguru.com.br Pixbet trustguru.com.br slotdemo trustguru.com.br 348ntr-097 jvid.asia pgslot trustguru.com.br jogodotigrinhodemo trustguru.com.br Energiabet trustguru.com.br Brazino777 trustguru.com.br cassinos trustguru.com.br bruno trustguru.com.br como trustguru.com.br

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

class AppRouter {
  static final GoRouter router = GoRouter(
    routes: <RouteBase>[
      GoRoute(
        name: 'home',
        path: RoutePaths.home,
        builder: RouteHandlers.home,
      ),
      GoRoute(
        name: 'detail',
        path: RoutePaths.detail,
        builder: RouteHandlers.detail,
      ),
    ],
    errorBuilder: (context, state) => const NotFoundPage(),
  );
}

4.主入口使用封装后的 Router guias trustguru.com.br demo trustguru.com.br tigrinhodemo trustguru.com.br

import 'package:flutter/material.dart';
import 'routes/app_router.dart';

void main() => runApp(const MyApp());

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

  @override
  Widget build(BuildContext context) {
    return MaterialApp.router(
      routerConfig: AppRouter.router,
      debugShowCheckedModeBanner: false,
    );
  }
}

5.页面传参 sobre trustguru.com.br pragmatic trustguru.com.br plataformademo trustguru.com.br fortunetigerdemográtis trustguru.com.br Bet trustguru.com.br pesquisa trustguru.com.br fortunedragon demo trustguru.com.br A5game trustguru.com.br Cassinos trustguru.com.br pgdemo trustguru.com.br

GoRouter.of(context).pushNamed(
  'detail',
  queryParams: {'id': '123'},
);

6.返回上一页 plataformademográtis trustguru.com.br fernanda trustguru.com.br pragmaticplay trustguru.com.br trustguru trustguru.com.br Bet365 trustguru.com.br slots trustguru.com.br Betano trustguru.com.br demotigrinho trustguru.com.br sugarrush1000demo trustguru.com.br Sportingbet trustguru.com.br

GoRouter.of(context).pop();

7.通过 redirect 来实现登录验证 jvid jvid.asia autores trustguru.com.br slot trustguru.com.br fortunetigerbônusgrátissemdepósito trustguru.com.br noticias trustguru.com.br pg trustguru.com.br KTO trustguru.com.br jvid视频 jvid.asia miguel trustguru.com.br bonus trustguru.com.br carlos trustguru.com.br jvid視頻 jvid.asia fortuneoxdemográtis trustguru.com.br KTO trustguru.com.br

GoRouter(
  redirect: (state) {
    final isLoggedIn = _checkIfLoggedIn();
    if (!isLoggedIn && state.subloc != RoutePaths.home) {
      return RoutePaths.home;
    }
    return null;
  },
  // ...
)

8.页面跳转动画(渐变、滑动、缩放) jogos trustguru.com.br Caça-níqueis trustguru.com.br pglucky88 trustguru.com.br bonus trustguru.com.br a5game trustguru.com.br siro-5652 jvid.asia 348ntr-097 jvid.asia

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

class AppTransitions {
  static Page<T> buildSlideTransition<T>(GoRouterState state, Widget child) {
    return CustomTransitionPage<T>(
      key: state.pageKey,
      child: child,
      transitionsBuilder: (context, animation, secondaryAnimation, child) {
        return SlideTransition(
          position: Tween<Offset>(
            begin: const Offset(1.0, 0.0),
            end: Offset.zero,
          ).animate(animation),
          child: child,
        );
      },
    );
  }

  static Page<T> buildFadeTransition<T>(GoRouterState state, Widget child) {
    return CustomTransitionPage<T>(
      key: state.pageKey,
      child: child,
      transitionsBuilder: (context, animation, secondaryAnimation, child) {
        return FadeTransition(opacity: animation, child: child);
      },
    );
  }

  static Page<T> buildScaleTransition<T>(GoRouterState state, Widget child) {
    return CustomTransitionPage<T>(
      key: state.pageKey,
      child: child,
      transitionsBuilder: (context, animation, secondaryAnimation, child) {
        return ScaleTransition(
          scale: Tween<double>(begin: 0.8, end: 1.0).animate(animation),
          child: child,
        );
      },
    );
  }
}
00目录 0
    讨论 我来说一句 发布发表评论 发布0等 0 人为本文章充电 还没有介绍自己 关注