如何在颤动中将浏览器 URL 更新为非根导航器的路由更改?

Posted

技术标签:

【中文标题】如何在颤动中将浏览器 URL 更新为非根导航器的路由更改?【英文标题】:How to update browser URL on route changes to non-root Navigator in flutter? 【发布时间】:2020-07-14 13:49:23 【问题描述】:

当我在我的颤振应用程序中使用我的嵌套导航器时,我正在尝试更新 Web URL。

默认路由 / 有一个可导航到 /sub 路由的 FlatButton。然后在_generateSubRoute -> /second

这是我的例子:

import 'package:flutter/material.dart';

void main() 
  runApp(MyApp());


class MyApp extends StatelessWidget 
  @override
  Widget build(BuildContext context) 
    return MaterialApp(
      title: 'Flutter Demo',
      routes: 
    // When navigating to the "/" route, build the FirstScreen widget
        '/': (context) => Scaffold(
              body: FlatButton(
                onPressed: () 
                  Navigator.of(context).pushNamed('/sub');
                ,
                child: Text(
                  "Go to sub",
                ),
              ),
            ),
// When navigating to the "/second" route, build the  SecondScreen widget.
        '/sub': (context) =>
            Scaffold(body: Column(children: [Text('/sub'), Flexible(
              child: Navigator(
                onGenerateRoute: _generateSubRoute ))]))
      );
  

  Route _generateSubRoute(RouteSettings settings) 
    if (settings.name == '/second') 
      return MaterialPageRoute(
        settings: settings,
        builder: (BuildContext context) => Text('Second screen')
      );
    

    return MaterialPageRoute(
        settings: settings,
        builder: (BuildContext context) => Column(children: <Widget>[
          Text('/subroot/'),
          FlatButton(
            onPressed: () 
              Navigator.of(context).pushNamed('/second');
            ,
            child: Text(
              "Go to second",
            ))])
    );
  

此代码中的 Web url 无法正常工作。 知道如何解决这个问题吗?

【问题讨论】:

尝试使用 Navigator.of(context).pushNamed("test") 它应该使用 //root.com/test 更新 url 嗨,你发现了吗? 【参考方案1】:

import 'dart:html' as html; html.window.history.pushState(null, "Home", "/");

【讨论】:

无论这段代码如何回答这个问题,提倡您的解决方案是一个好习惯。

以上是关于如何在颤动中将浏览器 URL 更新为非根导航器的路由更改?的主要内容,如果未能解决你的问题,请参考以下文章

如何在颤动中将 ListTile 连接到音频小部件

如何在颤动中将对象编码为 Json

如何在颤动中将值设置为下拉列表?

如何在颤动中将默认值设置为下拉菜单?

如何在颤动中将图标放在自定义按钮内

如何在颤动中将右侧边框设置为容器