滑动以返回手势颤动

时间:2018-04-17 21:54:32

标签: dart flutter back swipe-gesture

如何实现从左侧滑动以退回手势?不确定它是否已经自动为iOS实现,但我也希望它也适用于Android(因为事情变得基于手势)。

5 个答案:

答案 0 :(得分:3)

您可以将Theme.platform设置为TargetPlatform.ios。这将利用在所有设备上都使用向后滑动手势的方式。

答案 1 :(得分:1)

您可以将platform(和theme)中的darkTheme设置为TargetPlatform.iOS,可以将主题的pageTransitionsTheme设置为 PageTransitionsTheme(builders: { TargetPlatform.android: CupertinoPageTransitionsBuilder(), TargetPlatform.iOS: CupertinoPageTransitionsBuilder(), }),您可以使用CupertinoPageRoute ...加载新页面,在确保使用Navigator.push(而不是Navigator.pushReplacement)之前,这些都无法正常工作到新屏幕!我希望这可以帮助正在使用现有过渡并且没有注意到这一关键细节的任何人。 :)

答案 2 :(得分:0)

使用Sub MasterMacro() Call EnableTimer Call getMetaData1 ActiveWorkbook.Save Application.Wait (Now + TimeValue("0:00:05")) Call saveTableToCSV Call getMetaData2 ActiveWorkbook.Save Application.Wait (Now + TimeValue("0:00:05")) Call saveTableToCSV Call getMetaData3 ActiveWorkbook.Save Application.Wait (Now + TimeValue("0:00:05")) Call saveTableToCSV Call getMetaData4 ActiveWorkbook.Save Application.Wait (Now + TimeValue("0:00:05")) Call saveTableToCSV End Sub 使它在Android上运行;

CupertinoPageRoute

(在How to implement swipe to previous page in Flutter?上回答)

答案 3 :(得分:0)

您可以将 CupertinoPageRoute() 用作 Tom O'Sullivan said above

但是,如果您想使用 PageRouteBuilder 对其进行自定义(例如,使用自定义过渡持续时间)并获得相同的滑动返回手势,那么您可以覆盖 buildTransitions()

对于 iOS,默认 PageTransitionBuilderCupertinoPageTransitionsBuilder()。所以我们可以在 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: ...,
)

答案 4 :(得分:-4)

这不应在Android上实现,因为它会使整个OS之间的交互不一致。

从屏幕边缘滑动回去并不是Android想要实现的事情,因此最好不要这样做。