Flutter全屏返回手势插件full_screen_back_gesture的使用

发布于 1周前 作者 songsunli 来自 Flutter

Flutter全屏返回手势插件full_screen_back_gesture的使用

full_screen_back_gesture 是一个用于在 Flutter 应用中实现全屏滑动返回手势的插件。它支持全屏滑动手势,不会与滚动组件的手势冲突。

特性

  • 支持全屏滑动手势,而不是仅边缘滑动手势。
  • 不会阻止 Scrollable 组件的水平滚动手势。

使用方法

选项 1(推荐)

当你使用 MaterialPageRoute 进行页面导航时,可以通过自定义页面过渡来启用全屏滑动手势。设置 MaterialApp 的主题中的 pageTransitionsTheme 属性。

MaterialApp(
  theme: ThemeData(
    pageTransitionsTheme: PageTransitionsTheme(
      builders: {
        TargetPlatform.android: FullScreenBackGesturePageTransitionsBuilder(),
        TargetPlatform.iOS: FullScreenBackGesturePageTransitionsBuilder(),
      },
    ),
  ),
  home: MainPage(),
);
选项 2

如果你必须使用 CupertinoPageRoute 进行页面导航,可以从该插件中导入 cupertino 路由,仅替换 CupertinoPageRoute

import 'package:full_screen_back_gesture/cupertino.dart';

Navigator.of(context).push(CupertinoPageRoute(builder: (context) => MainPage())),

完整示例

以下是一个完整的示例,展示了如何在 Flutter 应用中使用 full_screen_back_gesture 插件。

import 'package:flutter/material.dart';
import 'package:full_screen_back_gesture/full_screen_back_gesture.dart';

void main() => runApp(App());

/// Sample app with [FullScreenBackGesturePageTransitionsBuilder] configuration
class App extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      theme: ThemeData(
        pageTransitionsTheme: PageTransitionsTheme(
          builders: {
            TargetPlatform.android: FullScreenBackGesturePageTransitionsBuilder(),
            TargetPlatform.iOS: FullScreenBackGesturePageTransitionsBuilder(),
          },
        ),
      ),
      home: MainPage(),
    );
  }
}

/// A common sample page
class MainPage extends StatelessWidget {
  const MainPage({Key? key}) : super(key: key);

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('返回手势'),
      ),
      body: Center(
        child: ElevatedButton(
          child: Text('跳转到下一页'),
          onPressed: () => Navigator.of(context).push(
            // 只有 [MaterialPageRoute] 支持自定义 [pageTransitionsTheme]
            MaterialPageRoute(builder: (context) => ScrollPage()),
          ),
        ),
      ),
    );
  }
}

/// A sample page with horizontal scrollable widget
class ScrollPage extends StatelessWidget {
  const ScrollPage({Key? key}) : super(key: key);

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('可滚动组件'),
      ),
      body: Align(
        alignment: Alignment.topCenter,
        child: SizedBox(
          height: 100.0,
          child: GridView.count(
            crossAxisCount: 1,
            scrollDirection: Axis.horizontal,
            children: List.generate(
              10,
              (index) => Card(
                child: InkWell(
                  child: Center(child: Text('$index')),
                  onTap: () => Navigator.of(context).push(
                    MaterialPageRoute(builder: (context) => MainPage()),
                  ),
                ),
              ),
            ),
          ),
        ),
      ),
    );
  }
}

更多关于Flutter全屏返回手势插件full_screen_back_gesture的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter全屏返回手势插件full_screen_back_gesture的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,下面是一个关于如何在Flutter项目中使用full_screen_back_gesture插件的示例代码。这个插件允许你在全屏模式下使用返回手势。

首先,你需要在你的pubspec.yaml文件中添加full_screen_back_gesture依赖:

dependencies:
  flutter:
    sdk: flutter
  full_screen_back_gesture: ^0.1.0  # 请检查最新版本号

然后运行flutter pub get来安装依赖。

接下来,你可以在你的Flutter应用中这样使用full_screen_back_gesture插件:

import 'package:flutter/material.dart';
import 'package:full_screen_back_gesture/full_screen_back_gesture.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Full Screen Back Gesture Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: FullScreenBackGestureExample(),
    );
  }
}

class FullScreenBackGestureExample extends StatefulWidget {
  @override
  _FullScreenBackGestureExampleState createState() => _FullScreenBackGestureExampleState();
}

class _FullScreenBackGestureExampleState extends State<FullScreenBackGestureExample> with WidgetsBindingObserver {
  @override
  void initState() {
    super.initState();
    WidgetsBinding.instance.addObserver(this);
    FullScreenBackGesture.enableGesture(context, true); // 启用全屏返回手势
  }

  @override
  void dispose() {
    FullScreenBackGesture.disableGesture(context); // 禁用全屏返回手势
    WidgetsBinding.instance.removeObserver(this);
    super.dispose();
  }

  @override
  void didChangeAppLifecycleState(AppLifecycleState state) {
    // 在这里可以处理应用生命周期状态变化,比如暂停或恢复时启用或禁用手势
    if (state == AppLifecycleState.paused) {
      // 暂停时禁用手势(可选)
      FullScreenBackGesture.disableGesture(context);
    } else if (state == AppLifecycleState.resumed) {
      // 恢复时启用手势(可选)
      FullScreenBackGesture.enableGesture(context, true);
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Full Screen Back Gesture Demo'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(
              'Swipe from the edges to go back.',
              style: TextStyle(fontSize: 24),
            ),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: () {
                Navigator.push(
                  context,
                  MaterialPageRoute(builder: (context) => SecondScreen()),
                );
              },
              child: Text('Go to Second Screen'),
            ),
          ],
        ),
      ),
    );
  }
}

class SecondScreen extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Second Screen'),
      ),
      body: Center(
        child: Text('Swipe from the edges to go back to the previous screen.'),
      ),
    );
  }
}

在这个示例中,我们创建了一个简单的Flutter应用,其中有两个屏幕:FullScreenBackGestureExampleSecondScreen。我们启用了全屏返回手势,使得用户可以从屏幕边缘滑动来返回上一个屏幕。

注意:

  1. FullScreenBackGesture.enableGesture(context, true)用于启用全屏返回手势。
  2. FullScreenBackGesture.disableGesture(context)用于禁用全屏返回手势。
  3. dispose方法中禁用手势是一个好习惯,以避免潜在的内存泄漏。
  4. 你可以根据应用生命周期状态的变化来启用或禁用手势,这里提供了示例代码,但具体实现可以根据需求调整。

希望这个示例能帮你理解如何在Flutter项目中使用full_screen_back_gesture插件。

回到顶部