即使使用 #/page 加载 URL,Flutter Web 也会首先加载初始页面

Posted

技术标签:

【中文标题】即使使用 #/page 加载 URL,Flutter Web 也会首先加载初始页面【英文标题】:Flutter Web loads the initial page first even when loading URL with #/page 【发布时间】:2020-10-29 04:18:52 【问题描述】:

我正在尝试https://flutter.dev/docs/cookbook/navigation/named-routes 此处提供的标准导航应用程序。即使我将浏览器打开到 http://localhost:8080/#/second,它也会构建第 1 页,然后用第 2 页替换它,甚至向用户显示一个后退按钮。我真的很想将用户直接带到第二页而不“通过”。请问有什么想法吗?

这里又是代码,添加了一些打印内容

import 'package:flutter/material.dart';

void main() 
  runApp(MaterialApp(
    title: 'Named Routes Demo',
    routes: 
      '/': (context) => FirstScreen(),
      '/second': (context) => SecondScreen(),
    ,
  ));


class FirstScreen extends StatelessWidget 
  @override
  Widget build(BuildContext context) 
    print ("Screen 1 building");
    return Scaffold(
      appBar: AppBar(
        title: Text('First Screen'),
      ),
      body: Center(
        child: RaisedButton(
          child: Text('Launch second screen'),
          onPressed: () 
            // Navigate to the second screen using a named route.
            Navigator.pushNamed(context, '/second');
          ,
        ),
      ),
    );
  


class SecondScreen extends StatelessWidget 
  @override
  Widget build(BuildContext context) 
    print ("Screen 2 building");
    return Scaffold(
      appBar: AppBar(
        title: Text("Second Screen"),
      ),
      body: Center(
        child: RaisedButton(
          onPressed: () 
            Navigator.pop(context);
          ,
          child: Text('This is screen 2, go to 1!'),
        ),
      ),
    );
  

【问题讨论】:

【参考方案1】:

您可以在<FlutterProject>/web/index.html第14行<base href="/">中设置默认路由路径。

默认设置为“/”

【讨论】:

【参考方案2】:

我认为您应该将第二个屏幕转换为 StatefulWidget 以添加 didChangeDependencies 或 initState 并添加您的 Navigator.pop(context) 以自动转到 FirstScreen

【讨论】:

谢谢,不过我的目标是通过打开 http://localhost:8080/#/second 来确保应用程序启动时,Flutter 会直接构建第二个页面,而无需在毫秒之前构建第一页。

以上是关于即使使用 #/page 加载 URL,Flutter Web 也会首先加载初始页面的主要内容,如果未能解决你的问题,请参考以下文章

UIWebview 即使在加载 url 后也显示空白屏幕

使用 URL 和哈希切换引导模式

Gridsome 项目托管在 netlify 上。点击时,即使 URL 更新,页面也不会加载

更改 URL 而不用 <a href=" "> 重新加载页面

小程序获取当前页面url

Disqus 在设置了唯一 page.url 和 page.id 的所有页面上显示相同的评论