Flutter身份验证插件releans_verify的使用
Flutter身份验证插件releans_verify的使用
在本插件中,你可以通过releans API发送和验证一次性密码(OTP)。
导入
import 'package:releans_verify/releans.dart';
初始化releans
- 复制API密钥从releans仪表板并设置apiKey。
- 从releans仪表板创建发送者并设置sender。
- 设置重新发送延迟时间(以秒为单位),默认延迟时间为15秒。
void main() async {
ReleansVerify().init(
apiKey: "XXXXXXXXXXXXXXXXX",
sender: "XXXXXXXXX",
resendingDelayInSeconds: 30
);
runApp(MyApp());
}
发送OTP
- 使用手机号调用sendCode方法。
- 手机号应包含国家代码。
- 指定通道,默认为短信。
ReleansResult result =
await ReleansVerify().sendCode(mobile: "+9715200000");
ReleansResult result = await ReleansVerify()
.sendCode(mobile:"+9715200000",channel: Channel.voice);
监听剩余倒计时时间
- 监听ReleansVerify().remainingSeconds以显示剩余秒数。
- 如果你想手动取消计时器,调用disposeTimer()。
ValueListenableBuilder<int>(
valueListenable: ReleansVerify().remainingSeconds,
builder: (context, value, _) {
return Text("resend after $value sec");
}),
ReleansVerify().disposeTimer();
验证OTP
- 使用用户输入的代码和手机号调用verifyCode方法。
ReleansResult result = await ReleansVerify().verifyCode(
code: "0000", mobile:"+9715200000");
处理结果
- ReleansResult对象将在sendCode和verifyCode方法后返回。
- 通过使用result.message查看响应消息。
- 通过使用result.isSuccess()检查请求是否成功。
//打印消息
log("message ${result.message}");
//打印状态码
log("status ${result.status}");
//检查请求是否成功
log("isSuccess ${result.isSuccess()}");
完整示例
以下是一个完整的示例,展示了如何使用releans_verify
插件进行身份验证。
import 'dart:developer';
import 'package:flutter/material.dart';
import 'package:releans_verify/releans.dart';
void main() {
//初始化releans SMS,使用API密钥和发送者
//如果不存在,请在仪表板中创建新的发送者
ReleansVerify().init(
apiKey: "xxxxxxxxxxxxxxxxxxxxxxxx",
sender: "xxxxx",
resendingDelayInSeconds: 30);
runApp(const MyApp());
}
class MyApp extends StatefulWidget {
const MyApp({super.key});
[@override](/user/override)
State<MyApp> createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
var mobileNumberTextField = TextEditingController();
var codeTextField = TextEditingController();
String sendingMsg = "";
String verifyMsg = "";
bool isErrorSending = false;
bool isErrorVerify = false;
bool isVerified = false;
[@override](/user/override)
void initState() {
mobileNumberTextField.text = "+971527827667";
super.initState();
}
send() async {
if (mobileNumberTextField.text.trim().isEmpty) return;
//发送OTP,使用手机号
//设置通道,默认为Channel.voice
ReleansResult result = await ReleansVerify()
.sendCode(mobile: mobileNumberTextField.text.trim());
//打印消息
log("message ${result.message}");
//打印状态码
log("status ${result.status}");
//检查请求是否成功
log("isSuccess ${result.isSuccess()}");
setState(() {
sendingMsg = result.message!;
isErrorSending = !result.isSuccess();
});
}
verify() async {
if (mobileNumberTextField.text.trim().isEmpty ||
codeTextField.text.trim().isEmpty) return;
//验证代码,使用用户输入的代码和手机号
ReleansResult result = await ReleansVerify().verifyCode(
code: codeTextField.text.trim(),
mobile: mobileNumberTextField.text.trim());
//打印消息
log("message ${result.message}");
//打印状态码
log("status ${result.status}");
//检查请求是否成功
log("isSuccess ${result.isSuccess()}");
setState(() {
verifyMsg = result.message!;
isErrorVerify = !result.isSuccess();
});
}
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: const Text('Releans Verify'),
),
body: Padding(
padding: const EdgeInsets.all(10.0),
child: Column(
children: [
const SizedBox(height: 20),
Row(
children: [
Expanded(
child: TextField(
controller: mobileNumberTextField,
decoration: const InputDecoration(
focusedBorder: OutlineInputBorder(
borderSide: BorderSide(color: Colors.grey, width: 1.0),
),
enabledBorder: OutlineInputBorder(
borderSide: BorderSide(color: Colors.grey, width: 1.0),
),
hintText: 'Mobile Number',
),
)),
const SizedBox(width: 15),
ElevatedButton(
onPressed: send,
child: const Text("Send"),
),
],
),
const SizedBox(height: 20),
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
ValueListenableBuilder<int>(
valueListenable: ReleansVerify().remainingSeconds,
builder: (context, value, _) {
return Text("remaining $value sec");
}),
const SizedBox(width: 20),
ElevatedButton(
onPressed: () {
ReleansVerify().disposeTimer();
},
child: const Text("Cancel Timer"),
),
],
),
Padding(
padding: const EdgeInsets.all(8.0),
child: Text(
sendingMsg,
style: TextStyle(
color: isErrorSending ? Colors.red : Colors.green),
),
),
const Divider(),
Row(
children: [
Expanded(
child: TextField(
controller: codeTextField,
decoration: const InputDecoration(
focusedBorder: OutlineInputBorder(
borderSide: BorderSide(color: Colors.grey, width: 1.0),
),
enabledBorder: OutlineInputBorder(
borderSide: BorderSide(color: Colors.grey, width: 1.0),
),
hintText: 'Code',
),
)),
const SizedBox(width: 15),
ElevatedButton(
onPressed: verify,
child: const Text("Verify"),
),
],
),
Padding(
padding: const EdgeInsets.all(8.0),
child: Text(
verifyMsg,
style: TextStyle(
color: isErrorVerify ? Colors.red : Colors.green),
),
),
const SizedBox(height: 20),
Row(
crossAxisAlignment: CrossAxisAlignment.center,
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(isVerified ? "Verified" : "Unverified"),
Icon(isVerified
? Icons.verified_user
: Icons.verified_user_outlined),
],
),
],
),
),
),
);
}
}
更多关于Flutter身份验证插件releans_verify的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter身份验证插件releans_verify的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是如何在Flutter项目中使用 releans_verify
插件进行身份验证的代码案例。这个插件通常用于处理短信验证、邮箱验证等身份验证流程。
首先,确保你已经在 pubspec.yaml
文件中添加了 releans_verify
依赖:
dependencies:
flutter:
sdk: flutter
releans_verify: ^latest_version # 请替换为实际的最新版本号
然后运行 flutter pub get
来安装依赖。
接下来,你可以按照以下步骤在你的 Flutter 应用中实现身份验证功能。
1. 初始化 ReleansVerify
在你的 Flutter 应用中,首先需要初始化 ReleansVerify
。这通常在应用的入口文件(例如 main.dart
)中进行。
import 'package:flutter/material.dart';
import 'package:releans_verify/releans_verify.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
// 初始化 ReleansVerify
await ReleansVerify.instance.init(
apiKey: 'YOUR_API_KEY', // 替换为你的Releans API Key
environment: 'production', // 或 'sandbox' 根据你的需求
);
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: HomeScreen(),
);
}
}
2. 发送验证请求
接下来,你可以在你的页面或组件中发送验证请求。例如,当用户点击一个按钮时,发送短信验证请求:
import 'package:flutter/material.dart';
import 'package:releans_verify/releans_verify.dart';
class HomeScreen extends StatefulWidget {
@override
_HomeScreenState createState() => _HomeScreenState();
}
class _HomeScreenState extends State<HomeScreen> {
final _formKey = GlobalKey<FormState>();
String _phoneNumber = '';
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('身份验证'),
),
body: Padding(
padding: const EdgeInsets.all(16.0),
child: Form(
key: _formKey,
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
TextFormField(
decoration: InputDecoration(labelText: '手机号码'),
keyboardType: TextInputType.phone,
validator: (value) {
if (value.isEmpty || !value.contains(RegExp(r'^\d{10,11}$'))) {
return '请输入有效的手机号码';
}
return null;
},
onChanged: (value) {
setState(() {
_phoneNumber = value;
});
},
),
SizedBox(height: 20),
ElevatedButton(
onPressed: () async {
if (_formKey.currentState!.validate()) {
try {
// 发送短信验证请求
await ReleansVerify.instance.sendOtp(
phoneNumber: _phoneNumber,
countryCode: 'CN', // 根据你的需求设置国家代码
);
// 提示用户验证请求已发送
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text('验证请求已发送')),
);
} catch (e) {
// 处理错误
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text('发送验证请求失败: ${e.message}')),
);
}
}
},
child: Text('发送验证码'),
),
],
),
),
),
);
}
}
3. 验证 OTP
用户收到短信验证码后,你可以提供一个输入框让用户输入验证码并进行验证:
class VerifyOtpScreen extends StatefulWidget {
@override
_VerifyOtpScreenState createState() => _VerifyOtpScreenState();
}
class _VerifyOtpScreenState extends State<VerifyOtpScreen> {
final _formKey = GlobalKey<FormState>();
String _otp = '';
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('验证 OTP'),
),
body: Padding(
padding: const EdgeInsets.all(16.0),
child: Form(
key: _formKey,
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
TextFormField(
decoration: InputDecoration(labelText: '验证码'),
keyboardType: TextInputType.number,
validator: (value) {
if (value.isEmpty || value.length != 6) {
return '请输入6位验证码';
}
return null;
},
onChanged: (value) {
setState(() {
_otp = value;
});
},
),
SizedBox(height: 20),
ElevatedButton(
onPressed: () async {
if (_formKey.currentState!.validate()) {
try {
// 验证 OTP
bool result = await ReleansVerify.instance.verifyOtp(
otp: _otp,
phoneNumber: _phoneNumber, // 从之前的屏幕传递或存储的电话号码
);
if (result) {
// OTP 验证成功
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text('验证成功')),
);
// 跳转到下一个屏幕或执行其他操作
} else {
// OTP 验证失败
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text('验证码错误')),
);
}
} catch (e) {
// 处理错误
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text('验证失败: ${e.message}')),
);
}
}
},
child: Text('验证'),
),
],
),
),
),
);
}
}
总结
以上代码展示了如何在 Flutter 应用中使用 releans_verify
插件进行身份验证,包括发送短信验证码和验证 OTP。请根据你的实际需求进行调整,例如错误处理、UI 样式等。
确保在实际部署前测试所有功能,并遵循最佳实践来保护用户数据和隐私。