You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter Web:如何从URL提取路径参数并展示对应动态文本?

实现Flutter Web动态路由参数展示

你可以通过Flutter的路由方案实现需求,下面是两种主流实现方式:

方式一:使用go_router(推荐)

1. 添加依赖

在pubspec.yaml中引入依赖:

dependencies:
  flutter:
    sdk: flutter
  go_router: ^12.0.0 # 可替换为最新版本

2. 配置路由与页面

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

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

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

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

  static final _router = GoRouter(
    routes: [
      GoRoute(
        path: '/undangan/:name1/:name2',
        builder: (context, state) {
          final name1 = state.pathParameters['name1']!;
          final name2 = state.pathParameters['name2']!;
          return UndanganPage(name1: name1, name2: name2);
        },
      ),
    ],
  );
}

class UndanganPage extends StatelessWidget {
  final String name1;
  final String name2;

  const UndanganPage({super.key, required this.name1, required this.name2});

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: Text('$name1 and $name2.'),
      ),
    );
  }
}

方式二:使用原生路由

如果不想依赖第三方库,可通过原生onGenerateRoute实现:

import 'package:flutter/material.dart';

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

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

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Undangan Page',
      onGenerateRoute: (settings) {
        if (settings.name?.startsWith('/undangan/') ?? false) {
          final parts = settings.name!.split('/');
          if (parts.length == 4) {
            final name1 = parts[2];
            final name2 = parts[3];
            return MaterialPageRoute(
              builder: (context) => UndanganPage(name1: name1, name2: name2),
            );
          }
        }
        return MaterialPageRoute(builder: (context) => const Scaffold(body: Center(child: Text('无效路由'))));
      },
    );
  }
}

// UndanganPage 代码与方式一中一致

测试效果

运行Flutter Web应用后,访问对应URL即可看到预期效果:

  • 访问http://localhost:56485/#/undangan/daffa/nanda,页面显示daffa and nanda.
  • 访问http://localhost:56485/#/undangan/saya/kamu,页面显示saya and kamu.

内容的提问来源于stack exchange,提问作者Silent Roar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 20:51:17