Start Debugging
2026-01-08 flutter Edit on GitHub

Flutter 3.x のルーティング: tp_router はルートテーブルを消し去ろうとする (そしてそれは魅力的なアイデア)

tp_router は手動のルートテーブルを排除するジェネレーター駆動の Flutter ルーターです。ページに注釈を付け、build_runner を実行し、文字列ベースのパスではなく型付き API でナビゲートします。

Flutter のルーティングは、痛い思いをするまで気づかないものの 1 つです。最初の数画面は簡単です。その後アプリが成長し、パスが進化し、「もう 1 つルートを追加するだけ」がメンテナンス税になります。2026 年 1 月 7 日、コミュニティの投稿は意見の強い解決策を提案しました: tp_router手動のルートテーブル設定をゼロにすることを目指すジェネレーター駆動のルーターです。

ソーススレッド: tp_router: Stop Writing Route Tables (r/FlutterDev)
プロジェクトリンク: GitHub, pub.dev

失敗モード: あちこちに文字列

ほとんどのチームはこれの何らかのバージョンを経験しています:

// Define route table
final routes = {
  '/user': (context) => UserPage(
    id: int.parse(ModalRoute.of(context)!.settings.arguments as String),
  ),
};

// Navigate
Navigator.pushNamed(context, '/user', arguments: '42');

「動作」しますが、動作しなくなるまでです: ルート名が変わり、引数の型が変わり、触っていない部分のアプリで実行時クラッシュが発生します。

注釈が先、生成が後

tp_router の売り文句はシンプルです: ページに注釈を付け、ジェネレーターを実行し、文字列ではなく生成された型を通じてナビゲートします。

投稿から:

@TpRoute(path: '/user/:id')
class UserPage extends StatelessWidget {
  final int id; // Auto-parsed from path
  final String section;

  const UserPage({
    required this.id,
    this.section = 'profile',
    super.key,
  });
}

// Navigate by calling .tp()
UserRoute(id: 42, section: 'posts').tp(context);

その最後の行が要点全体です: section をリネームしたり idint から String に変更したりしたら、ユーザーではなくビルドをコンパイラに壊してほしいのです。

真の問題: アプリが成長してもフリクションを低く保てるか?

auto_route を使ったことがあれば、注釈駆動のルーティングがうまく機能することは知っているでしょうが、それでも結局は中央のリストを書くことになります:

@AutoRouterConfig(routes: [
  AutoRoute(page: UserRoute.page, path: '/user/:id'),
  AutoRoute(page: HomeRoute.page, path: '/'),
])
class AppRouter extends RootStackRouter {}

tp_router はその最後のステップ全体を取り除こうとしています。

Flutter 3.x プロジェクトで動かす

スレッドで示されている依存関係は:

dependencies:
  tp_router: ^0.1.0
  tp_router_annotation: ^0.1.0

dev_dependencies:
  build_runner: ^2.4.0
  tp_router_generator: ^0.1.0

ルートを生成:

そして配線:

void main() {
  final router = TpRouter(routes: tpRoutes);
  runApp(MaterialApp.router(routerConfig: router.routerConfig));
}

ルーティングのボイラープレートを減らし、コンパイル時の安全性を高めたいなら、tp_router は素早いスパイクの価値があります。採用しないとしても、方向性は正しいです: ナビゲーションを文字列ベースの言い伝えではなく、型付き API として扱うことです。

Comments

Sign in with GitHub to comment. Reactions and replies thread back to the comments repo.

< 戻る