Flutter手势密码插件gesture_password_widget的使用

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

Flutter手势密码插件gesture_password_widget的使用

简介

GesturePasswordWidget 是一个为Flutter提供的手势解锁小部件,支持高度自定义。用户可以通过滑动屏幕上的点来设置或验证手势密码。它提供了多种属性来自定义样式和行为,并且易于集成到现有的Flutter项目中。

使用方法

添加依赖

pubspec.yaml文件中添加gesture_password_widget的依赖:

dependencies:
  gesture_password_widget: latest-version

导入包

在需要使用的Dart文件顶部导入:

import 'package:gesture_password_widget/gesture_password_widget.dart';

示例代码

以下是一个完整的示例,展示了如何创建一个基本的手势密码界面以及更复杂的效果。

完整Demo

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: GesturePasswordWidgetDemo(),
    );
  }
}

const backgroundColor = Color(0xff252534);

class GesturePasswordWidgetDemo extends StatefulWidget {
  @override
  _GesturePasswordWidgetDemoState createState() => _GesturePasswordWidgetDemoState();
}

class _GesturePasswordWidgetDemoState extends State<GesturePasswordWidgetDemo> {
  String? result;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      backgroundColor: backgroundColor,
      body: Container(
        width: double.infinity,
        child: Column(
          children: [
            Container(
              margin: EdgeInsets.only(top: 150.0, bottom: 10.0),
              child: Text(
                '正确答案:0, 1, 2, 4, 7',
                textAlign: TextAlign.start,
                style: TextStyle(
                  fontSize: 22.0,
                  color: Colors.white,
                ),
              ),
            ),
            Container(
              margin: EdgeInsets.only(bottom: 20.0),
              height: 80,
              child: Text(
                '结果:${result ?? ''}',
                textAlign: TextAlign.start,
                style: TextStyle(
                  fontSize: 22.0,
                  color: Colors.white,
                ),
              ),
            ),
            Container(
              margin: EdgeInsets.only(top: 30.0),
              child: createNormalGesturePasswordView(),
            ),
          ],
        ),
      ),
    );
  }

  /// 创建一个简单常用的手势密码视图。
  Widget createNormalGesturePasswordView() {
    return GesturePasswordWidget(
      lineColor: const Color(0xff0C6BFE),
      errorLineColor: const Color(0xffFB2E4E),
      singleLineCount: 3,
      identifySize: 80.0,
      minLength: 4,
      errorItem: Image.asset(
        'images/error.png',
        color: const Color(0xffFB2E4E),
      ),
      normalItem: Image.asset('images/normal.png'),
      selectedItem: Image.asset(
        'images/selected.png',
        color: const Color(0xff0C6BFE),
      ),
      arrowItem: Image.asset(
        'images/arrow.png',
        width: 20.0,
        height: 20.0,
        color: const Color(0xff0C6BFE),
        fit: BoxFit.fill,
      ),
      errorArrowItem: Image.asset(
        'images/arrow.png',
        width: 20.0,
        height: 20.0,
        fit: BoxFit.fill,
        color: const Color(0xffFB2E4E),
      ),
      answer: [0, 1, 2, 4, 7],
      color: backgroundColor,
      onComplete: (data) {
        setState(() {
          result = data.join(', ');
        });
      },
    );
  }

  /// 创建一个复杂的示例。
  /// 每行有四个点,并通过设置[hitItem]支持选择效果。
  Widget createXiMiGesturePasswordView() {
    return GesturePasswordWidget(
      lineColor: Colors.white,
      errorLineColor: Colors.redAccent,
      singleLineCount: 4,
      identifySize: 80.0,
      minLength: 4,
      hitShowMilliseconds: 40,
      errorItem: Container(
        width: 10.0,
        height: 10.0,
        decoration: BoxDecoration(
          color: Colors.redAccent,
          borderRadius: BorderRadius.circular(50.0),
        ),
      ),
      normalItem: Container(
        width: 10.0,
        height: 10.0,
        decoration: BoxDecoration(
          color: Colors.white,
          borderRadius: BorderRadius.circular(50.0),
        ),
      ),
      selectedItem: Container(
        width: 10.0,
        height: 10.0,
        decoration: BoxDecoration(
          color: Colors.white,
          borderRadius: BorderRadius.circular(50.0),
        ),
      ),
      hitItem: Container(
        width: 15.0,
        height: 15.0,
        decoration: BoxDecoration(
          color: Colors.white,
          borderRadius: BorderRadius.circular(50.0),
        ),
      ),
      answer: [0, 1, 2, 3, 6, 10, 14],
      color: backgroundColor,
      onComplete: (data) {
        setState(() {
          result = data.join(', ');
        });
      },
    );
  }
}

属性说明

属性名 描述
size 手势密码控件的宽度和高度。
identifySize 用于判断是否选中某个点的区域大小,值越大识别越准确。
normalItem 正常显示的小部件。
selectedItem 选中时显示的小部件。
errorItem 错误情况下显示的小部件(当设置了minLength或answer时有效)。
hitItem 当选中某点时短暂显示的小部件,其显示时间由hitShowMilliseconds控制。
arrowItem 正常状态下的箭头小部件。
errorArrowItem 错误状态下的箭头小部件。
arrowXAlign 箭头在x轴上的偏移量。
arrowYAlign 箭头在y轴上的偏移量。
singleLineCount 单行中的点数,总点数等于singleLineCount * singleLineCount。
color 背景色,默认为Theme.of(context).scaffoldBackgroundColor。
onHitPoint 点被选中时的回调函数。
onComplete 手势滑动结束时的回调函数。
lineColor 正常状态下线条的颜色。
errorLineColor 错误状态下线条的颜色。
answer 正确的结果集,例如 [0, 1, 2, 4, 7]。
loose 是否允许松散模式,默认为true。
completeWaitMilliseconds 最后一个点和画线保持显示的时间,之后会清除所有点并恢复初始状态。
hitShowMilliseconds hitItem显示的时间。
minLength 如果设置了此值,当长度不足时会显示errorItem和errorLine。

通过以上内容,您应该能够轻松地将GesturePasswordWidget集成到您的Flutter应用中,并根据需求进行定制化配置。如果您有任何问题或者需要进一步的帮助,请随时提问!


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

1 回复

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


当然,以下是如何在Flutter项目中使用gesture_password_widget插件的一个基本示例。这个插件允许你实现一个手势密码功能,用户可以通过在屏幕上绘制特定的图案来解锁应用或进行身份验证。

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

dependencies:
  flutter:
    sdk: flutter
  gesture_password_widget: ^最新版本号  # 请替换为实际可用的最新版本号

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

接下来,在你的Dart文件中使用GesturePasswordWidget。以下是一个简单的示例,展示如何在屏幕上显示手势密码输入框,并处理用户输入的手势密码。

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: GesturePasswordScreen(),
    );
  }
}

class GesturePasswordScreen extends StatefulWidget {
  @override
  _GesturePasswordScreenState createState() => _GesturePasswordScreenState();
}

class _GesturePasswordScreenState extends State<GesturePasswordScreen> {
  final List<Offset> _correctPassword = [
    Offset(0.5, 0.2),
    Offset(0.8, 0.5),
    Offset(0.5, 0.8),
    Offset(0.2, 0.5),
  ];
  String _result = "";

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Gesture Password Example'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            GesturePasswordWidget(
              onPasswordComplete: (List<Offset> password) {
                setState(() {
                  if (listEquals(_correctPassword, password)) {
                    _result = "Password Correct!";
                  } else {
                    _result = "Password Incorrect!";
                  }
                });
              },
              length: 4, // 密码长度
              width: double.infinity,
              height: 300,
              lineColor: Colors.blue,
              dotColor: Colors.blueAccent,
              activeDotColor: Colors.blue[900]!,
              dotSize: 24,
              lineStrokeWidth: 4,
              activeLineStrokeWidth: 6,
              animationDuration: const Duration(milliseconds: 300),
            ),
            SizedBox(height: 20),
            Text(
              _result,
              style: TextStyle(fontSize: 24, color: Colors.black),
            ),
          ],
        ),
      ),
    );
  }
}

在这个示例中:

  1. 我们创建了一个Flutter应用,其主屏幕是GesturePasswordScreen
  2. GesturePasswordScreen是一个有状态的组件,用于处理用户输入的结果。
  3. _correctPassword是一个包含正确密码点的列表。在这个例子中,密码是连接四个特定点的图案。
  4. GesturePasswordWidget被添加到UI中,并配置了一些属性,如密码长度、大小、颜色等。
  5. 当用户完成手势密码输入时,onPasswordComplete回调会被触发,比较用户输入的密码和预设的正确密码,并更新结果显示。

请注意,实际应用中你应该将密码验证逻辑放在更安全的地方,比如服务器端,并且可能需要更复杂的用户界面和安全措施。

回到顶部