【问题标题】:Flutter web cannot visit urlFlutter web 无法访问 url
【发布时间】:2022-01-16 16:13:41
【问题描述】:

在flutter web中,如何通过完整地址打开某个页面?

场景是:

  1. 打开课堂页面路由,如 await Navigator.pushNamed(context, "classroom/detail/$id", arguments: {"data": someData});
  2. 课堂页面打开,地址栏将包含http://localhost/myschoolweb/classroom/detail/1之类的URL
  3. 我按F5刷新页面 -> ERROR 404
  4. 打开新标签并访问上述地址 -> ERROR 404

这是我的onGenerateRoute 代码:

onGenerateRoute: (RouteSettings settings) {
  List<String> routes = settings.name?.split("/") ?? [];
  final routeName = routes.isNotEmpty ? routes.first : null;
  final routeSub1 = routes.length > 1 ? routes[1] : null;
  final routeSub2 = routes.length > 2 ? routes[2] : null;

  final args = {
    ...(settings.arguments as Map<String, dynamic>? ?? {}),
    "sub1": routeSub1,
    "sub2": routeSub2,
  };

  Widget page = const SplashPage();
  switch (routeName) {
    case ROUTE_CLASS: page = ClassPage(args); break;
    // other routes ...
  }

  Future.microtask(() => FocusScope.of(context).requestFocus(FocusNode()));
  return MaterialPageRoute(
    settings: settings,
    builder: (context) {
      // other scripts ...
      return page;
    }
  );
},

我怀疑它会被翻译成classroom/detail/1/index.html,这在服务器上当然不存在?

ps: 我使用这个库来简化网址:https://pub.dev/packages/url_strategy

【问题讨论】:

  • 查看 Flutter Navigator 2,for example here,如果设置正确,它可以满足您的需求。

标签: flutter flutter-web flutter-routes


【解决方案1】:

以防万一有人需要,我已经在 apache 服务器上使用 .htaccess 文件解决了这个问题。

RewriteEngine On
RewriteBase /
RewriteCond $1 !^(index\.html|assets|robots\.txt|favicon\.png)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^.*$ index.html [L]

所以现在任何 URL 都将默认为 index.html。

【讨论】:

    猜你喜欢
    • 2022-01-16
    • 2020-04-26
    • 1970-01-01
    • 2020-01-05
    • 1970-01-01
    • 1970-01-01
    • 2020-12-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多