Flutter页面转场动画插件flutter_turnstile的使用

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

Flutter页面转场动画插件flutter_turnstile的使用

flutter_turnstile 是一个用于在 Flutter 应用中集成 Cloudflare Turnstile 验证的插件。该插件提供了易于使用的API,并允许自定义选项以及错误处理和令牌过期回调。

特性

  • 易于使用的API
  • 可定制的选项
  • 错误处理和令牌过期回调

安装

pubspec.yaml 文件中添加依赖:

dependencies:
  flutter_turnstile: ^1.2.0

然后运行 flutter pub get 命令以获取依赖项。

示例代码

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

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

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

class MyApp extends StatefulWidget {
  const MyApp({super.key});

  [@override](/user/override)
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  // 初始化 Turnstile 控制器和选项
  final TurnstileController _controller = TurnstileController();
  final TurnstileOptions _options = TurnstileOptions(
    mode: TurnstileMode.managed,
    size: TurnstileSize.normal,
    theme: TurnstileTheme.light,
    language: 'zh',
    retryAutomatically: true,
    refreshTimeout: TurnstileRefreshTimeout.manual,
  );

  [@override](/user/override)
  void dispose() {
    super.dispose();
    _controller.dispose(); // 释放资源
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      home: Builder(
        builder: (context) => Scaffold(
          body: Center(
            // 使用 Turnstile 组件
            child: Container(
              color: Colors.red,
              padding: const EdgeInsets.fromLTRB(10, 10, 10, 10),
              child: CloudFlareTurnstile(
                siteKey: '3x00000000000000000000FF', // 你的站点密钥
                baseUrl: "https://www.baidu.com", // 你的基础URL
                options: _options,
                controller: _controller,
                onTokenReceived: (token) {
                  // 处理接收到的令牌
                },
                onWidgetReady: () {
                  print("onWidgetReady"); // 组件准备就绪时调用
                },
                onWidgetBeforeInteractive: () {
                  print("AAAAAA"); // 组件交互前调用
                },
                onWidgetAfterInteractive: () {
                  print("BBBBBB"); // 组件交互后调用
                },
                onTokenExpired: () {
                  // 处理令牌过期事件
                },
                onError: (error) {
                  // 处理错误事件
                  /*ScaffoldMessenger.of(context).showSnackBar(
                    SnackBar(content: Text(error)),
                  );*/
                },
              ),
            ),
          ),
        ),
      ),
    );
  }
}

代码解释

  1. 初始化控制器和选项

    final TurnstileController _controller = TurnstileController();
    final TurnstileOptions _options = TurnstileOptions(
      mode: TurnstileMode.managed,
      size: TurnstileSize.normal,
      theme: TurnstileTheme.light,
      language: 'zh',
      retryAutomatically: true,
      refreshTimeout: TurnstileRefreshTimeout.manual,
    );
    
  2. 释放资源

    [@override](/user/override)
    void dispose() {
      super.dispose();
      _controller.dispose();
    }
    
  3. 构建UI

    [@override](/user/override)
    Widget build(BuildContext context) {
      return MaterialApp(
        title: 'Flutter Demo',
        home: Builder(
          builder: (context) => Scaffold(
            body: Center(
              child: Container(
                color: Colors.red,
                padding: const EdgeInsets.fromLTRB(10, 10, 10, 10),
                child: CloudFlareTurnstile(
                  siteKey: '3x00000000000000000000FF',
                  baseUrl: "https://www.baidu.com",
                  options: _options,
                  controller: _controller,
                  onTokenReceived: (token) {
                    // 处理接收到的令牌
                  },
                  onWidgetReady: () {
                    print("onWidgetReady");
                  },
                  onWidgetBeforeInteractive: () {
                    print("AAAAAA");
                  },
                  onWidgetAfterInteractive: () {
                    print("BBBBBB");
                  },
                  onTokenExpired: () {
                    // 处理令牌过期事件
                  },
                  onError: (error) {
                    // 处理错误事件
                  },
                ),
              ),
            ),
          ),
        ),
      );
    }
    

更多关于Flutter页面转场动画插件flutter_turnstile的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter页面转场动画插件flutter_turnstile的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,下面是一个关于如何使用 flutter_turnstile 插件来实现 Flutter 页面转场动画的示例代码。flutter_turnstile 是一个强大的插件,它允许开发者在 Flutter 应用中实现类似于 iOS 上的转场动画效果。

首先,确保你已经在 pubspec.yaml 文件中添加了 flutter_turnstile 依赖:

dependencies:
  flutter:
    sdk: flutter
  flutter_turnstile: ^1.0.0  # 请检查最新版本号

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

接下来,让我们创建一个简单的 Flutter 应用,展示如何使用 flutter_turnstile

主文件 main.dart

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

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

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

class HomeScreen extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Flutter Turnstile Demo'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: () {
            Navigator.push(
              context,
              TurnstilePageRoute(
                builder: (context) => SecondScreen(),
                transitionType: TurnstileTransitionType.frontToBack,
              ),
            );
          },
          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: ElevatedButton(
          onPressed: () {
            Navigator.pop(context);
          },
          child: Text('Go Back'),
        ),
      ),
    );
  }
}

解释

  1. 依赖导入:在 pubspec.yaml 中添加 flutter_turnstile 依赖。
  2. 主应用MyApp 是一个简单的 Material 应用,其主页是 HomeScreen
  3. 首页HomeScreen 包含一个按钮,点击该按钮时会触发页面转场动画。
  4. 页面转场:使用 Navigator.push 方法并传入 TurnstilePageRouteTurnstilePageRoute 接受一个 builder 参数用于构建目标页面,以及一个 transitionType 参数用于指定转场动画类型。这里我们使用了 TurnstileTransitionType.frontToBack 类型。
  5. 第二页SecondScreen 是目标页面,包含一个返回按钮,点击该按钮会返回到首页。

你可以根据需要更改 transitionType 的值来尝试不同的转场动画效果。TurnstileTransitionType 提供了多种选项,如 leftToRight, rightToLeft, topToBottom, bottomToTop, frontToBack, 和 backToFront

这个示例展示了如何使用 flutter_turnstile 插件在 Flutter 应用中实现页面转场动画。希望这对你有所帮助!

回到顶部