FlutterWebでアプリをビルドするとUrlに#が入って不恰好になります。
これを取り除くにはmain関数でrunApp()を呼ぶ前にusePathUrlStrategyを呼んであげると取り除けます。知らんけど。
import 'package:flutter_web_plugins/url_strategy.dart';
void main() {
usePathUrlStrategy();
runApp(ExampleApp());
}
自分はFirebase Hostingを使ってFlutter Webでビルドしたアプリを公開していたのですが、ある時ルートパス以外のページのurlを叩くと404 NotFoundエラーが返ってきていることに気づきました。
調べていると、usePathUrlStrategyで#を消していることが原因の模様。
試しにusePathUrlStrategyを呼ばずにurlに#が含まれた状態でデプロイしてみるとルートパス以外のページのurlを叩いても問題なくページが開けました。。。。はて?
検索を色々して同様の状況になっている人がそこそこいることにも気づきましたが、Flutter Webで#なしのurlのまま問題なくページが開けているサイトがあることにも気づいた頃にFlutterの公式ページに辿り着きました。。。
ここにそのまま答えが書いてありました。
Firebase Hostingの設定でSinglePageApplicationを指定する必要があるみたいです。
Firebase initをし直して、"Configure as a single-page app"の質問にYesと答えると設定してくれます。
はい、うまくいきました。
あんまり理解してませんが、SinglePageApplicationだと常にトップページのindex.htmlを参照してくれるみたいです。なんで#がないURLだとうまくいくのかはよくわからん。
最初から公式ドキュメントをちゃんと読みましょうという自戒の念を込めて記事にします。