ttrouter 0.0.2
ttrouter: ^0.0.2 copied to clipboard
A Router For Flutter
TTRouter 基于 Flutter Navigator 2,通过注解的方式生成 App 页面路由配置,提供了简单易用的接口实现路由跳转。
部分支持特性:
- null-safe
- Dart Annotation
- Without Context
- Url Parser
- Interceptor
- Route Transition
- Route Document/Manager(Additional Web App)
Getting Started #
1. Setup Dependencies #
dependencies:
flutter:
sdk: flutter
ttrouter: ^1.0.0
dev_dependencies:
ttrouter_generator: ^1.0.0
build_runner: ^2.0.0
2. Widget With Dart Annotation #
@TTRoute(
path: SchemeConst.Home,
desc: 'home page, show transition demo',
sample: '${SchemeConst.Scheme}://${SchemeConst.Home}',
)
class HomePage extends StatelessWidget {
//...
}
3. Run Build Runner #
注解生成。
flutter pub run build_runner build --delete-conflicting-outputs
等待命令跑完后,可以看到 lib 目录下,多出一个 output 文件夹,有两个文件 output_json.dart 、output_router.dart
4. Setup TTRouter #
App 通过 MaterialApp.router(...) 建立路由,详细代码可参考 example。
class MyApp extends StatelessWidget {
late final TTRouterConfig routerConfig;
late final Map<String, TTRouteInfo> routes;
late final TTRouterState routerState;
late final TTRouterDelegate routerDelegate;
late final TTRouteInfoParser routeInformationParser;
MyApp() {
routerConfig = TTRouterConfig(
scheme: SchemeConst.Scheme,
defaultRouteItemBuilder: () => HomePage.getDefault(),
transitionType: TransitionType.cupertino,
navigatorKey: GlobalKey<NavigatorState>(debugLabel: 'TTRouter_Sample'),
interceptor: _interceptor,
observersProvider: () => [_NavigatorObserver()]);
routes = TTRouterCollect.routes;
routerState = TTRouterState(routerConfig, routes);
routerDelegate = TTRouterDelegate(routerState, routerConfig);
routeInformationParser = TTRouteInfoParser(routerConfig);
// ios universal link
// https://github.com/flutter/flutter/issues/82550
}
@override
Widget build(BuildContext context) {
return MaterialApp.router(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
visualDensity: VisualDensity.adaptivePlatformDensity,
),
routeInformationParser: routeInformationParser,
routerDelegate: routerDelegate);
}
}
5. Navigate Route #
跳转有多种方式
- 不需要传参
TTRouter.toPath(SchemeConst.Page1);
- 带参
TTRouter.to(TTRouter.builder(SchemeConst.Page2)
.put(SchemeConst.Param_content, 'from page2')
.build());
- 跳转动画
TTRouter.to(TTRouter.builder(SchemeConst.Page1)
.setTransitionType(TransitionType.leftToRight)
.build());