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
- 将
screenLock
带confirm: true
更改为screenLockCreate
- 将
ScreenLock
带confirm: true
更改为ScreenLock.create
- 替换
StyledInputConfig
为KeyPadButtonConfig
- 在
Secrets
中将spacingRatio
替换为固定值spacing
6.x 到 7 迁移
- 需要dart >= 2.17 和 Flutter 3.0
- 替换
InputButtonConfig
为KeyPadConfig
- 将
delayChild
更改为delayBuilder
。delayBuilder
不再显示在一个新屏幕上,而是位于Secrets
上方。 - 在
secretsBuilder
中接受BuildContext
5.x 到 6 迁移
ScreenLock
不再内部使用Navigator.pop
。开发者现在需要根据需要手动弹出。- 如果
onUnlocked
为null
,screenLock
调用会自动弹出。
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
更多关于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
组件
ScreenLock
是 flutter_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!')),
);
},
);
}
}