Flutter屏幕锁定插件flutter_screen_lock_august的使用

Flutter屏幕锁定插件flutter_screen_lock_august的使用

该Flutter插件提供了屏幕锁定功能。输入正确的密码即可解锁屏幕。您还可以选择使用生物识别认证。

屏幕锁定演示

横屏视图

横屏视图

功能

  • 可以通过字符长度来设置密码
  • 可以更改“取消”和“删除”按钮
  • 根据设备大小和方向优化UI
  • 可以禁用取消操作
  • 可以使用生物识别(local_auth插件)
  • 生物识别可以在首次启动时显示
  • 解锁回调
  • 可以指定不匹配事件
  • 限制最大重试次数

使用方法

以下代码可以轻松实现屏幕锁定。要解锁屏幕,请输入正确的密码。

简单示例

如果输入的密码与correctString相同,屏幕会自动关闭。

import 'package:flutter_screen_lock_august/flutter_screen_lock_august.dart';

screenLock(
  context: context,
  correctString: '1234',
);

阻止用户取消

提供一个不能被取消的屏幕锁定。

import 'package:flutter_screen_lock_august/flutter_screen_lock_august.dart';

screenLock(
  context: context,
  correctString: '1234',
  canCancel: false,
);

创建密码

允许用户创建并确认新密码。

import 'package:flutter_screen_lock_august/flutter_screen_lock_august.dart';

screenLockCreate(
  context: context,
  onConfirmed: (value) => print(value), // 在此处存储新密码
);

控制创建状态

import 'package:flutter_screen_lock_august/flutter_screen_lock_august.dart';

final inputController = InputController();

screenLockCreate(
  context: context,
  inputController: inputController,
);

// 在其他地方...
inputController.unsetConfirmed(); // 重置并重新确认输入

使用local_auth

pubspec.yaml中添加local_auth包。

它包含一个示例,在didOpened中调用生物识别。

import 'package:flutter_screen_lock_august/flutter_screen_lock_august.dart';
import 'package:local_auth/local_auth.dart';
import 'package:flutter/material.dart';

Future<void> localAuth(BuildContext context) async {
  final localAuth = LocalAuthentication();
  final didAuthenticate = await localAuth.authenticateWithBiometrics(
      localizedReason: '请进行身份验证');
  if (didAuthenticate) {
    Navigator.pop(context);
  }
}

screenLock(
  context: context,
  correctString: '1234',
  customizedButtonChild: Icon(Icons.fingerprint),
  customizedButtonTap: () async => await localAuth(context),
  didOpened: () async => await localAuth(context),
);

完全自定义

您可以自定义屏幕锁定的所有方面。以下是示例:

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

screenLockCreate(
  context: context,
  title: const Text('更改标题'),
  confirmTitle: const Text('更改确认标题'),
  onConfirmed: (value) => Navigator.of(context).pop(),
  config: const ScreenLockConfig(
    backgroundColor: Colors.deepOrange,
  ),
  secretsConfig: SecretsConfig(
    spacing: 15, // 或者使用 spacingRatio
    padding: const EdgeInsets.all(40),
    secretConfig: SecretConfig(
      borderColor: Colors.amber,
      borderSize: 2.0,
      disabledColor: Colors.black,
      enabledColor: Colors.amber,
      height: 15,
      width: 15,
      build: (context,
              {required config, required enabled}) =>
          Container(
        decoration: BoxDecoration(
          shape: BoxShape.rectangle,
          color: enabled
              ? config.enabledColor
              : config.disabledColor,
          border: Border.all(
            width: config.borderSize,
            color: config.borderColor,
          ),
        ),
        padding: const EdgeInsets.all(10),
        width: config.width,
        height: config.height,
      ),
    ),
  ),
  keyPadConfig: KeyPadConfig(
    buttonConfig: StyledInputConfig(
      textStyle:
          StyledInputConfig.getDefaultTextStyle(context)
              .copyWith(
        color: Colors.orange,
        fontWeight: FontWeight.bold,
      ),
      buttonStyle: OutlinedButton.styleFrom(
        shape: const RoundedRectangleBorder(),
        backgroundColor: Colors.deepOrange,
      ),
    ),
    displayStrings: [
      '零',
      '壱',
      '弐',
      '参',
      '肆',
      '伍',
      '陸',
      '質',
      '捌',
      '玖'
    ],
  ),
  cancelButton: const Icon(Icons.close),
  deleteButton: const Icon(Icons.delete),
);

自定义样式

版本迁移

8.x 到 9 迁移

  • 将参数screenLockConfig更改为config
  • 将参数keyPadConfig更改为config

7.x 到 8 迁移

  • 将所有回调名称从didSomething更改为onSomething
  • screenLockconfirm: true更改为screenLockCreate
  • ScreenLockconfirm: true更改为ScreenLock.create
  • 替换StyledInputConfigKeyPadButtonConfig
  • Secrets中将spacingRatio替换为固定值spacing

6.x 到 7 迁移

  • 需要dart >= 2.17 和 Flutter 3.0
  • 替换InputButtonConfigKeyPadConfig
  • delayChild更改为delayBuilderdelayBuilder不再显示在一个新屏幕上,而是位于Secrets上方。
  • secretsBuilder中接受BuildContext

5.x 到 6 迁移

  • ScreenLock不再内部使用Navigator.pop。开发者现在需要根据需要手动弹出。
  • 如果onUnlockednullscreenLock调用会自动弹出。

4.x 到 5 迁移

  • 导入名称已从:
    import 'package:flutter_screen_lock_august/functions.dart';
    
    更改为:
    import 'package:flutter_screen_lock_august/flutter_screen_lock_august.dart';
    

更多关于Flutter屏幕锁定插件flutter_screen_lock_august的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter屏幕锁定插件flutter_screen_lock_august的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


flutter_screen_lock_august 是一个用于在 Flutter 应用中实现屏幕锁定功能的插件。它允许你创建一个自定义的屏幕锁定界面,用户需要输入正确的密码才能解锁屏幕。以下是如何使用 flutter_screen_lock_august 插件的详细步骤:

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  flutter_screen_lock_august: ^1.0.0  # 请使用最新版本

然后运行 flutter pub get 来获取依赖。

2. 导入插件

在你的 Dart 文件中导入 flutter_screen_lock_august 插件:

import 'package:flutter_screen_lock_august/flutter_screen_lock_august.dart';

3. 使用 ScreenLock 组件

ScreenLockflutter_screen_lock_august 插件提供的主要组件。你可以使用它来创建一个屏幕锁定界面。

以下是一个简单的示例,展示了如何使用 ScreenLock 组件:

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

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: ScreenLockExample(),
    );
  }
}

class ScreenLockExample extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Screen Lock Example'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: () {
            _showScreenLock(context);
          },
          child: Text('Show Screen Lock'),
        ),
      ),
    );
  }

  void _showScreenLock(BuildContext context) {
    ScreenLock(
      correctString: '1234', // 设置正确的密码
      onUnlocked: () {
        // 解锁成功后的回调
        Navigator.of(context).pop();
        ScaffoldMessenger.of(context).showSnackBar(
          SnackBar(content: Text('Unlocked!')),
        );
      },
      onError: () {
        // 密码错误时的回调
        ScaffoldMessenger.of(context).showSnackBar(
          SnackBar(content: Text('Wrong Password!')),
        );
      },
    );
  }
}

4. 自定义屏幕锁定界面

ScreenLock 组件提供了一些可选的参数,允许你自定义屏幕锁定界面的外观和行为。以下是一些常用的参数:

  • title: 设置屏幕锁定界面的标题。
  • confirmTitle: 设置确认密码时的标题。
  • cancelButton: 设置取消按钮的文本。
  • deleteButton: 设置删除按钮的文本。
  • keyPadButton: 设置数字键盘按钮的样式。
  • backgroundColor: 设置屏幕锁定界面的背景颜色。
  • digitTextStyle: 设置数字按钮的文本样式。

例如,你可以这样自定义屏幕锁定界面:

ScreenLock(
  correctString: '1234',
  title: 'Enter your PIN',
  confirmTitle: 'Confirm your PIN',
  cancelButton: 'Cancel',
  deleteButton: 'Delete',
  keyPadButton: KeyPadButton(
    textStyle: TextStyle(fontSize: 24, color: Colors.white),
    backgroundColor: Colors.blue,
  ),
  backgroundColor: Colors.black,
  digitTextStyle: TextStyle(fontSize: 24, color: Colors.white),
  onUnlocked: () {
    Navigator.of(context).pop();
    ScaffoldMessenger.of(context).showSnackBar(
      SnackBar(content: Text('Unlocked!')),
    );
  },
  onError: () {
    ScaffoldMessenger.of(context).showSnackBar(
      SnackBar(content: Text('Wrong Password!')),
    );
  },
);

5. 处理解锁逻辑

onUnlocked 回调中,你可以处理解锁成功后的逻辑。例如,你可以导航到另一个页面或显示一个提示。

6. 处理错误逻辑

onError 回调中,你可以处理密码错误时的逻辑。例如,你可以显示一个错误提示。

7. 其他功能

flutter_screen_lock_august 还提供了其他一些功能,例如:

  • 确认密码: 你可以设置 confirmString 参数来要求用户确认密码。
  • 自定义键盘: 你可以通过 keyPadButton 参数自定义数字键盘的样式。

8. 注意事项

  • 确保在 onUnlocked 回调中处理解锁后的逻辑,例如导航到另一个页面或关闭屏幕锁定界面。
  • 你可以根据应用的需求自定义屏幕锁定界面的外观和行为。

9. 示例代码

以下是一个完整的示例代码,展示了如何使用 flutter_screen_lock_august 插件:

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

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: ScreenLockExample(),
    );
  }
}

class ScreenLockExample extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Screen Lock Example'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: () {
            _showScreenLock(context);
          },
          child: Text('Show Screen Lock'),
        ),
      ),
    );
  }

  void _showScreenLock(BuildContext context) {
    ScreenLock(
      correctString: '1234',
      title: 'Enter your PIN',
      confirmTitle: 'Confirm your PIN',
      cancelButton: 'Cancel',
      deleteButton: 'Delete',
      keyPadButton: KeyPadButton(
        textStyle: TextStyle(fontSize: 24, color: Colors.white),
        backgroundColor: Colors.blue,
      ),
      backgroundColor: Colors.black,
      digitTextStyle: TextStyle(fontSize: 24, color: Colors.white),
      onUnlocked: () {
        Navigator.of(context).pop();
        ScaffoldMessenger.of(context).showSnackBar(
          SnackBar(content: Text('Unlocked!')),
        );
      },
      onError: () {
        ScaffoldMessenger.of(context).showSnackBar(
          SnackBar(content: Text('Wrong Password!')),
        );
      },
    );
  }
}
回到顶部