flutter - Android 10 页面过渡
问题描述
我想在我的应用程序中为所有设备(包括 29 以下的 sdk 版本)创建类似 Android 10 的页面转换。
我知道在 Flutter 中我们可以构建自己的自定义页面过渡动画,但我不知道如何拥有 Android 10 设备所具有的缩放效果。
至今
import 'package:flutter/material.dart';
Route zoomTransitionRoute(Widget child) {
return PageRouteBuilder(
pageBuilder: (context, animation, secondaryAnim) {
return ScaleTransition(
scale: animation,
child: child,
);
},
transitionsBuilder: (context, animation, secondaryAnim, child) {
var begin = Offset(0.0, 0.1);
var end = Offset(0.0, 0.0);
var curve = Curves.ease;
var tween = Tween(begin: begin, end: end);
var curvedAnim = CurvedAnimation(parent: animation, curve: curve);
return SlideTransition(
position: tween.animate(curvedAnim),
child: child,
);
},
transitionDuration: Duration(milliseconds: 200));
}
这看起来不像我想要的任何东西。谁能帮我吗?
编辑
这就是我想要实现的
请注意父页面如何缩放一点然后子页面也从几乎缩放.9
解决方案
我找到了一种使用内置PageTransitionsTheme
来解决这个问题的方法。
在父级MaterialApp
中,
MaterialApp(
debugShowCheckedModeBanner: false,
theme: lightTheme,
darkTheme: darkTheme,
themeMode: ThemeMode.system,
home: RegisterPage(),
);
lightTheme
anddarkTheme
可以有一个pageTransitionsTheme
属性,
ThemeData lightTheme = ThemeData(
//...
pageTransitionsTheme: myPageTransitionsTheme,
//...
);
并且myPageTransitionsTheme
被初始化为,
PageTransitionsTheme pageTransitionsTheme = PageTransitionsTheme(builders: {
TargetPlatform.android: ZoomPageTransitionsBuilder(),
TargetPlatform.iOS: ZoomPageTransitionsBuilder()
});
在 iOS 和 Android 上测试,工作正常!
推荐阅读
- php - Docker 工具箱 Mac OS Xdebug
- reactjs - 使用 VScode 在 React 项目中调试独立的 Typescript 文件
- java - Bunq Developer API 在创建 PSD2 上下文时出现异常
- ionic-framework - Ionic ion-footer 将键盘向上推
- python - TensorFlow 保存子类模型,它具有 call() 方法的多个参数
- python - 不使用 user = models.OneToOneField(User,on_delete=models.CASCADE)
- java - 在 >= java9 中使用带有 jdk8 的 java serviceloader 构建
- java - 地图需要在没有 tmst 值的情况下进行过滤
- c# - Moq 返回设置在第二次执行时返回错误数据
- binding - 如何在 SwiftUI 中使用 Dictionary 作为@Binding var