搜索插件、代码仓与 APP 分类

插件详情v2.0.1

flutter_lock_screen

Flutter 密码页面屏幕!您可以在项目中使用!

近 30 天下载
113
喜欢数
49
Pub 分数
70

安装插件

flutter pub add flutter_lock_screen

插件介绍

基于插件公开信息、社区数据与项目使用情况整理的选型参考。

一个 Flutter 包,提供可自定义的密码输入界面,用于保护应用访问。它使开发者能够通过简洁直观的界面实现基于 PIN 的身份验证。该包支持输入验证、视觉反馈,并可轻松集成到现有项目中。设计简洁且安全,非常适合保护应用内的敏感区域。源代码公开托管在 GitHub 上,以确保透明度和可定制性。

适合场景

  • 应用锁屏
  • 安全登录流程
  • 基于PIN的认证
  • 保护敏感数据
  • 用户会话保护

主要特点

  • 可自定义的密码输入
  • 输入的视觉反馈
  • 与 Flutter 的轻松集成
  • 支持PIN码输入
  • 开源且透明

适合对象

  • 开发安全应用的开发者
  • 需要用户身份验证的应用程序
  • 需要简单PIN保护的项目
  • Flutter 初学者探索认证 UI
  • 具有隐私敏感功能的应用程序

使用建议

  • 无内置生物识别支持
  • 有限的平台特定自定义
  • 需要手动处理错误状态
  • 不适用于复杂的认证工作流
  • PIN 无离线存储

原始 README

以下为关联源码仓库的 README 原文快照,最新内容请访问源码仓库。

Flutter Pass Code Page or Pin Code Page Package

This package gives you beautiful pass code page for using both android and ios.

flutter platform pub package License: MIT

Demo

Screen Shoot Screen Shoot

Finger Print Usage

First, be sure you should ensure that you add the local_auth package as a dependency. And Please read local_auth all integration details. https://pub.dartlang.org/packages/local_auth

iOS Integration Note that this plugin works with both TouchID and FaceID. However, to use the latter, you need to also add:

<key>NSFaceIDUsageDescription</key>
<string>Why is my app authenticating using face id?</string>

to your Info.plist file. Failure to do so results in a dialog that tells the user your app has not been updated to use TouchID.

Android Integration Note that local_auth plugin requires the use of a FragmentActivity as opposed to Activity. This can be easily done by switching to use FlutterFragmentActivity as opposed to FlutterActivity in your manifest (or your own Activity class if you are extending the base class).

Update your project's AndroidManifest.xml file to include the USE_FINGERPRINT permissions:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
          package="com.example.app">
  <uses-permission android:name="android.permission.USE_FINGERPRINT"/>
<manifest>

Usage

It is really easy to use! You should ensure that you add the flutter_lock_screen as a dependency in your flutter project.

dependencies:
  flutter_lock_screen: '^2.0.1'

Than you can use it with below example.

import 'package:flutter/material.dart';
import 'package:local_auth/local_auth.dart';
import 'package:testapp/empty_page.dart';
import 'package:flutter/services.dart';

class PassCodeScreen extends StatefulWidget {
  PassCodeScreen({Key key, this.title}) : super(key: key);

  final String title;

  @override
  _PassCodeScreenState createState() => new _PassCodeScreenState();
}

class _PassCodeScreenState extends State<PassCodeScreen> {
  bool isFingerprint = false;

  Future<Null> biometrics() async {
    final LocalAuthentication auth = new LocalAuthentication();
    bool authenticated = false;

    try {
      authenticated = await auth.authenticateWithBiometrics(
          localizedReason: 'Scan your fingerprint to authenticate',
          useErrorDialogs: true,
          stickyAuth: false);
    } on PlatformException catch (e) {
      print(e);
    }
    if (!mounted) return;
    if (authenticated) {
      setState(() {
        isFingerprint = true;
      });
    }
  }

  @override
  Widget build(BuildContext context) {
    var myPass = [1, 2, 3, 4];
    return LockScreen(
        title: "This is Screet ",
        passLength: myPass.length,
        bgImage: "images/pass_code_bg.jpg",
        fingerPrintImage: "images/fingerprint.png",
        showFingerPass: true,
        fingerFunction: biometrics,
        fingerVerify: isFingerprint,
        borderColor: Colors.white,
        showWrongPassDialog: true,
        wrongPassContent: "Wrong pass please try again.",
        wrongPassTitle: "Opps!",
        wrongPassCancelButtonText: "Cancel",
        passCodeVerify: (passcode) async {
          for (int i = 0; i < myPass.length; i++) {
            if (passcode[i] != myPass[i]) {
              return false;
            }
          }

          return true;
        },
        onSuccess: () {
          Navigator.of(context).pushReplacement(
              new MaterialPageRoute(builder: (BuildContext context) {
            return EmptyPage();
          }));
        });
  }
}

Contributing

Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.

Please make sure to update tests as appropriate.

所属分类

源码仓库

使用此插件的项目

暂无相关数据。