FlutterのRouterクエリで予約文字を使う

Flutter(Dart)のRouterでは、WebのURLと同じくクエリが使える。

Navigator.pushNamed(context, '/hoge?id=${id}');

ただし、IDに特殊文字が入ってくる場合は、Webと同様対策する必要がある。
ここでは#を例にして説明する。

id='hoge#fuga'
といった内容がある場合、#はアンカーとして使われる予約語のため、事前にエスケープ文字に変換する必要がある。
#のみ対処すれば良い場合、以下のようにすればよい。

Navigator.pushNamed(context, '/hoge?id=${id.replaceAll(RegExp(r'#'), '%23')}');