Flutter身份认证与工具集插件idkit的使用
Flutter身份认证与工具集插件idkit的使用
1. 简介
idkit
是一个为 Flutter 开发者提供的基础库,包含了许多常用的开发功能。该库具有以下特点:
- 简单易用
- 功能全面
- 稳定性好
- 长期维护
idkit
的目标是让开发变得更简单!
2. 功能目录
idkit
提供了多种功能和小部件,具体如下:
功能类别
-
金额千分位处理
formatThousands
方法可以将数字格式化为带有千分位的字符串。
-
扩展Widget边距
insets
、insetsOnly
、insetsSymmetric
等方法可以方便地为 Widget 添加边距。
-
颜色十六进制值处理
hexColor
、aHexColor
、hexAColor
等方法可以将十六进制颜色值转换为Color
对象。
-
Widget之间的间距
vGap
和hGap
可以在垂直和水平方向上添加间距。
-
文本样式扩展
bold
、italic
、c(Colors)
、fSize
等方法可以快速设置文本样式。
-
日期扩展
format
、friendFormat
、getWeak
等方法可以格式化日期和时间。
-
数字格式化
phoneFormat
、bankFormat
、idFormat
等方法可以格式化电话号码、银行卡号和身份证号。
-
数字脱敏处理
phoneDesensitized
、bankDesensitized
、idDesensitized
等方法可以对敏感信息进行脱敏处理。
小部件类别
-
IDKitChoice
- 用于实现多选或单选的功能,支持列表、网格、流式布局等。
-
IDKitMultiFingerRecognizer
- 用于多指识别,可以检测屏幕上同时触摸的指数量。
-
Fd_Console
- 用于调试输出,支持多指识别。
3. 使用示例
以下是一个完整的示例代码,展示了如何使用 idkit
进行身份认证和工具集的功能调用。
import 'dart:developer';
import 'package:flutter/material.dart';
import 'package:idkit/idkit.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(title: const Text('idkit 示例')),
body: Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
children: [
// 日期格式化示例
ElevatedButton(
onPressed: () => timeFormatHandle(),
child: const Text('日期格式化'),
),
const SizedBox(height: 10),
// 千分位处理示例
ElevatedButton(
onPressed: () => thousandsHandle(),
child: const Text('千分位处理'),
),
const SizedBox(height: 10),
// 脱敏处理示例
ElevatedButton(
onPressed: () => desensitizedMethod(),
child: const Text('脱敏处理'),
),
const SizedBox(height: 10),
// 数字格式化示例
ElevatedButton(
onPressed: () => numberFormatMethod(),
child: const Text('数字格式化'),
),
const SizedBox(height: 10),
// IDKitChoice 示例
ElevatedButton(
onPressed: () => Navigator.push(
context,
MaterialPageRoute(builder: (context) => const ChoiceWidget()),
),
child: const Text('IDKitChoice 示例'),
),
const SizedBox(height: 10),
// 多指识别示例
ElevatedButton(
onPressed: () => Navigator.push(
context,
MaterialPageRoute(builder: (context) => const MultiFingerWidget()),
),
child: const Text('多指识别示例'),
),
],
),
),
),
);
}
}
// 日期格式化处理
void timeFormatHandle() {
final DateTime dateTime = DateTime(2022, 6, 12, 9, 22, 50);
// 标准格式化
debugPrint(dateTime.format()); // 2022-06-12 09:22:50
// 自定义格式化
debugPrint(dateTime.format(style: 'yyyy/MM/dd hh:mm:ss')); // 2022/06/12 09:22:50
// 友好格式化
debugPrint(DateTime.now().friendFormat()); // 刚刚
debugPrint(DateTime.now().subtract(const Duration(minutes: 2)).friendFormat()); // 2分钟前
debugPrint(DateTime.now().subtract(const Duration(days: 1)).friendFormat()); // 昨天
}
// 千分位处理
void thousandsHandle() {
// int 类型
debugPrint((-0).formatThousands()); // 0
debugPrint((-123).formatThousands()); // -123
debugPrint(123456.formatThousands()); // 123,456
debugPrint(123456789.formatThousands()); // 123,456,789
// double 类型
debugPrint(0.0.formatThousands()); // 0.0
debugPrint(123.12.formatThousands()); // 123.12
debugPrint(123456.1234.formatThousands()); // 123,456.1234
// String 类型
debugPrint('0.0'.formatThousands()); // 0.0
debugPrint('123.12'.formatThousands()); // 123.12
debugPrint('- 123456.1234'.formatThousands()); // -123,456.1234
// 自定义千分位符号
debugPrint(1234567.formatThousands(symbol: '_')); // 1_234_567
// 保留指定小数位数
debugPrint(0.56.formatThousands(fractionDigits: 0)); // 1
debugPrint(1234.5.formatThousands(fractionDigits: 2)); // 1,234.50
}
// 脱敏处理
void desensitizedMethod() {
// 手机号码脱敏
debugPrint('18801210283'.phoneDesensitized); // 188****0283
// 银行卡号脱敏
debugPrint('6333234433554466'.bankDesensitized); // ****4466
// 身份证号脱敏
debugPrint('411122128995160537'.idDesensitized); // 411122********0537
}
// 数字格式化
void numberFormatMethod() {
// 手机号码格式化
debugPrint('18702210183'.phoneFormat); // 187 0221 0183
// 银行卡号格式化
debugPrint('6222333444455551'.bankFormat); // 6222 3334 4445 5551
// 身份证号格式化
debugPrint('411422189806789226'.idFormat); // 4114 2218 9806 7892 26
}
// IDKitChoice 示例
class ChoiceWidget extends StatelessWidget {
const ChoiceWidget({Key? key}) : super(key: key);
[@override](/user/override)
Widget build(BuildContext context) {
final List<String> list = ['王昭君', '甄姬', '妲己', '不知火舞', '貂蝉'];
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
// 单选列表
Text(
'IDKitChoice.list',
style: const TextStyle().bold.fSize(20),
),
IDKitChoice<String>.list(
type: ChoiceType.single,
sources: list,
chosenIndexs: const [2],
itemBuilder: (context, state, data, index) {
final color = state ? Colors.red : Colors.blue;
return Container(
width: 200,
color: color,
alignment: Alignment.center,
child: Text(data),
);
},
choiceCallMethod: (result, results) {
debugPrint(result);
},
).insetsOnly(bottom: 20),
// 多选列表
Text(
'IDKitChoice.listSeparated',
style: const TextStyle().bold.fSize(20),
),
IDKitChoice<String>.listSeparated(
type: ChoiceType.multiple,
sources: list,
separatorBuilder: (_, state, result, index) {
return const Divider(
height: 2,
color: Colors.red,
thickness: 2,
);
},
itemBuilder: (context, state, data, index) {
final color = state ? Colors.red : Colors.blue;
return Container(
width: 200,
color: color,
alignment: Alignment.center,
child: Text(data),
);
},
choiceCallMethod: (result, results) {
debugPrint(results.toString());
},
).insetsOnly(bottom: 20),
],
);
}
}
// 多指识别示例
class MultiFingerWidget extends StatelessWidget {
const MultiFingerWidget({super.key});
[@override](/user/override)
Widget build(BuildContext context) {
return IDKitGestureRecognizer(
fingerCount: (p0) {
log('$p0 fingers identified');
},
onTap: (p0) {
log('Tapped with $p0 fingers');
},
onStart: (p0) {
log('Zoom start -- ${p0.points.first.localPosition}');
},
onUpdate: (IDKitUpdateDetails p0) {
log('Zoom update -- ${p0.pointerCount}');
},
onEnd: (p0) {
log('Zoom end');
},
child: Container(
color: Colors.red,
width: 200,
height: 200,
),
).insetsAll(100);
}
}
更多关于Flutter身份认证与工具集插件idkit的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter身份认证与工具集插件idkit的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
在Flutter项目中,使用idkit
插件可以简化身份认证流程。idkit
通常用于集成多种身份认证服务,比如手机号验证码登录、邮箱验证码登录、第三方社交账号登录等。下面是一个简单的代码示例,展示了如何在Flutter项目中使用idkit
进行身份认证。
首先,确保你已经在pubspec.yaml
文件中添加了idkit
依赖:
dependencies:
flutter:
sdk: flutter
idkit: ^最新版本号 # 替换为实际的最新版本号
然后运行flutter pub get
来安装依赖。
接下来,是一个使用idkit
进行手机号验证码登录的简单示例。
1. 初始化Idkit
在你的Flutter应用的入口文件(通常是main.dart
)中,初始化Idkit
。
import 'package:flutter/material.dart';
import 'package:idkit/idkit.dart';
void main() {
// 初始化Idkit
Idkit.init(
appId: '你的App ID', // 替换为你的应用ID
appKey: '你的App Key', // 替换为你的应用密钥
serverUrl: '你的服务器URL', // 替换为你的服务器地址
);
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Idkit Demo'),
),
body: Center(
child: LoginPage(),
),
),
);
}
}
2. 创建登录页面
创建一个LoginPage
,用于处理手机号验证码登录逻辑。
import 'package:flutter/material.dart';
import 'package:idkit/idkit.dart';
class LoginPage extends StatefulWidget {
@override
_LoginPageState createState() => _LoginPageState();
}
class _LoginPageState extends State<LoginPage> {
final TextEditingController _phoneController = TextEditingController();
final TextEditingController _codeController = TextEditingController();
String _verificationMessage = '';
void _sendVerificationCode() async {
try {
String phone = _phoneController.text;
var result = await Idkit.sendSmsCode(phoneNumber: phone);
setState(() {
_verificationMessage = '验证码已发送';
});
// 通常这里会有一个倒计时逻辑,防止用户频繁点击发送验证码
} catch (e) {
setState(() {
_verificationMessage = '发送验证码失败: ${e.message}';
});
}
}
void _loginWithCode() async {
try {
String phone = _phoneController.text;
String code = _codeController.text;
var result = await Idkit.loginWithSmsCode(phoneNumber: phone, code: code);
setState(() {
_verificationMessage = '登录成功: ${result.user.id}';
});
} catch (e) {
setState(() {
_verificationMessage = '登录失败: ${e.message}';
});
}
}
@override
Widget build(BuildContext context) {
return Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
TextField(
controller: _phoneController,
decoration: InputDecoration(labelText: '手机号'),
keyboardType: TextInputType.phoneNumber,
),
SizedBox(height: 20),
ElevatedButton(
onPressed: _sendVerificationCode,
child: Text('发送验证码'),
),
SizedBox(height: 20),
TextField(
controller: _codeController,
decoration: InputDecoration(labelText: '验证码'),
keyboardType: TextInputType.number,
),
SizedBox(height: 20),
ElevatedButton(
onPressed: _loginWithCode,
child: Text('登录'),
),
SizedBox(height: 20),
Text(_verificationMessage),
],
);
}
}
注意事项
- 错误处理:在实际应用中,你应该更全面地处理各种可能的错误情况。
- 安全性:确保在服务器端验证验证码和用户信息,以防止安全漏洞。
- 用户体验:添加倒计时逻辑、加载指示器等,以提升用户体验。
以上代码提供了一个基本的框架,展示了如何使用idkit
插件进行手机号验证码登录。根据你的具体需求,你可能需要调整代码以适应你的后端服务和用户认证流程。