Fei*_*ang 7 flutter flutter-navigation
我正在使用 Navigator 的声明式方法:
Navigator(
pages: [
MaterialPage(child: _screen),
],
onPopPage: (route, result) {
return route.didPop(result);
},
);
Run Code Online (Sandbox Code Playgroud)
如何在屏幕之间添加过渡?
您可以在应用程序的属性pageTransitionsTheme中设置。theme
例如:
void main() {
runApp(
MaterialApp(
routes: {
'/': (_) => HomePage(),
'/page2': (_) => Page2(),
},
theme: ThemeData(
pageTransitionsTheme: PageTransitionsTheme(
builders: {
// Set your transitions here:
TargetPlatform.android: CupertinoPageTransitionsBuilder(),
TargetPlatform.iOS: FadeUpwardsPageTransitionsBuilder(),
TargetPlatform.macOS: FadeUpwardsPageTransitionsBuilder(),
},
),
),
),
);
}
Run Code Online (Sandbox Code Playgroud)
但正如您提到的,您正在使用routemaster包(我个人从未使用过它),您仍然可以通过执行以下操作来实现该行为:
MaterialApp.router(
routerDelegate: RoutemasterDelegate(routesBuilder: (_) => routes),
routeInformationParser: RoutemasterParser(),
theme: ThemeData.dark().copyWith(
pageTransitionsTheme: PageTransitionsTheme(
builders: {
// Set your transitions here:
TargetPlatform.android: CupertinoPageTransitionsBuilder(),
TargetPlatform.iOS: FadeUpwardsPageTransitionsBuilder(),
TargetPlatform.macOS: FadeUpwardsPageTransitionsBuilder(),
},
),
),
)
Run Code Online (Sandbox Code Playgroud)
完整代码(使用routemaster包)
void main() => runApp(MyApp());
final routes = RouteMap(
routes: {
'/': (_) => MaterialPage(child: HomePage()),
'/page2': (_) => MaterialPage(child: Page2()),
},
);
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return
MaterialApp.router(
routerDelegate: RoutemasterDelegate(routesBuilder: (_) => routes),
routeInformationParser: RoutemasterParser(),
theme: ThemeData(
pageTransitionsTheme: PageTransitionsTheme(
builders: {
// Set your transitions here:
TargetPlatform.android: CupertinoPageTransitionsBuilder(),
TargetPlatform.iOS: FadeUpwardsPageTransitionsBuilder(),
TargetPlatform.macOS: FadeUpwardsPageTransitionsBuilder(),
},
),
),
);
}
}
class HomePage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text('HomePage')),
body: Center(
child: ElevatedButton(
onPressed: () => Routemaster.of(context).push('/page2'),
child: Text('Page2'),
),
),
);
}
}
class Page2 extends StatelessWidget {
@override
Widget build(BuildContext context) => Scaffold(appBar: AppBar(title: Text('Page2')));
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2332 次 |
| 最近记录: |