【问题标题】:Flutter web url navigationFlutter 网址导航
【发布时间】:2020-04-19 02:59:34
【问题描述】:

我想知道如何在我的 Flutter Web 应用中导航到 URL。

目前使用的是Navigator.of(context).push(MaterialPageRoute(...));,但地址栏中只显示localhost:5354/#/

我还想知道如何通过将 URL 粘贴到浏览器的地址栏中直接导航到特定的 URL。

【问题讨论】:

标签: flutter dart flutter-web


【解决方案1】:

您必须使用 Navigator v2 for Web。

查看更多信息:herehere

【讨论】:

    【解决方案2】:

    您需要使用命名路由而不是直接使用类来路由。 你可以使用这个名为 fluro https://pub.dev/packages/fluro 的包 否则你可以使用 Flutter 提供的默认导航。

    使用 fluro 你可以做这样的事情

    main.dart

    import '../routes/routes.dart';
    
    
    void main() {
      FluroRouter.setupRouter();
    // run app
    }
    
    class MyApp extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          initialRoute: '/',
          onGenerateRoute: FluroRouter.router.generator,
        );
      }
    }
    
    

    routes.dart

    import 'package:fluro/fluro.dart';
    import 'package:flutter/material.dart';
    
    class FluroRouter {
      static Router router = Router();
      static Handler _storyhandler = Handler(
          handlerFunc: (BuildContext context, Map<String, dynamic> params) =>
              HomeView(id: params['id'][0]));
      static Handler _homehandler = Handler(
          handlerFunc: (BuildContext context, Map<String, dynamic> params) =>
              Home());
      static void setupRouter() {
        router.define(
          '/',
          handler: _homehandler,
        );
        router.define(
          '/story/:id',
          handler: _storyhandler,
        );
      }
    }
    
    

    您还可以使用查询参数定义路由。

    希望这会有所帮助!

    【讨论】:

    • 我测试了这两种方法,我只用 Fluro 成功了(即使官方包页面没有提到 web 兼容性)。奇怪的是,我在 web 上使用默认的 Flutter 命名路由导航时遇到了意外错误¯_(ツ)_/¯
    • @rootasjey 奇怪的是,使用 onGenerateRoute 无法将路由添加到 URL,但使用路由会添加它。 :|
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-19
    • 2022-06-26
    • 2020-12-15
    • 2020-12-26
    • 2020-06-11
    相关资源
    最近更新 更多