我如何在Flutter中实现从左侧滑动返回的手势?不确定它是否已经自动实现了iOS,但我也想在Android上实现(因为事情正在变得基于手势)。
我如何在Flutter中实现从左侧滑动返回的手势?不确定它是否已经自动实现了iOS,但我也想在Android上实现(因为事情正在变得基于手势)。
您可以像Tom O'Sullivan上面说的那样使用CupertinoPageRoute()
。
然而,如果您想要自定义它(例如使用自定义转换持续时间),则可以使用PageRouteBuilder
并获得相同的向右滑动手势来返回。 这时需要重写buildTransitions()
。
对于iOS,默认的PageTransitionBuilder
是CupertinoPageTransitionsBuilder()
。 因此,我们可以在buildTransitions()
中使用它。这会自动给我们提供向右滑动以返回上一页的手势。
下面是CustomPageRouteBuilder
的一些示例代码:
class CustomPageRouteBuilder<T> extends PageRoute<T> {
final RoutePageBuilder pageBuilder;
final PageTransitionsBuilder matchingBuilder = const CupertinoPageTransitionsBuilder(); // Default iOS/macOS (to get the swipe right to go back gesture)
// final PageTransitionsBuilder matchingBuilder = const FadeUpwardsPageTransitionsBuilder(); // Default Android/Linux/Windows
CustomPageRouteBuilder({this.pageBuilder});
@override
Color get barrierColor => null;
@override
String get barrierLabel => null;
@override
Widget buildPage(BuildContext context, Animation<double> animation, Animation<double> secondaryAnimation) {
return pageBuilder(context, animation, secondaryAnimation);
}
@override
bool get maintainState => true;
@override
Duration get transitionDuration => Duration(milliseconds: 900); // Can give custom Duration, unlike in MaterialPageRoute
@override
Widget buildTransitions(BuildContext context, Animation<double> animation, Animation<double> secondaryAnimation, Widget child) {
return matchingBuilder.buildTransitions<T>(this, context, animation, secondaryAnimation, child);
}
}
然后要去到一个新页面:
GestureDetector(
onTap: () => Navigator.push(
context,
CustomPageRouteBuilder(pageBuilder: (context, animation, secondaryAnimation) => NewScreen()),
),
child: ...,
)
pageTransitionsTheme: PageTransitionsTheme(
builders: {
TargetPlatform.android: CupertinoPageTransitionsBuilder(),
TargetPlatform.iOS: CupertinoPageTransitionsBuilder(),
},
),
您可以使用 CupertinoPageRoute
加载新页面...但在确保使用 Navigator.push
(而不是 Navigator.pushReplacement
)到达新屏幕之前,这些都不会起作用!希望这能帮助那些正在处理现有转换并没有注意到这个关键细节的人。:)
使用这个插件:
https://pub.dev/packages/cupertino_back_gesture
一个Flutter包,用于设置iOS返回滑动手势区域的自定义宽度。 基本使用方法如下:import 'package:cupertino_back_gesture/cupertino_back_gesture.dart';
BackGestureWidthTheme(
backGestureWidth: BackGestureWidth.fraction(1 / 2),
child: MaterialApp(
theme: ThemeData(
pageTransitionsTheme: PageTransitionsTheme(
builders: {
//this is default transition
//TargetPlatform.android: FadeUpwardsPageTransitionsBuilder(),
//You can set iOS transition on Andoroid
TargetPlatform.android: CupertinoPageTransitionsBuilderCustomBackGestureWidth(),
TargetPlatform.iOS: CupertinoPageTransitionsBuilderCustomBackGestureWidth(),
},
),
),
home: MainPage(),
),
)
插件页面上有更多详细信息
context.push('screen')
而不是context.go('/screen')
。由于这会使操作系统的交互不一致,因此不应在Android上实现此功能。
从屏幕边缘向右滑动以返回并不是Android希望您实现的功能,因此最好不要这样做。