yundian_alive 0.1.1
yundian_alive: ^0.1.1 copied to clipboard
yundian alive Flutter project.
example/lib/main.dart
import 'dart:convert';
import 'dart:ffi';
import 'dart:math';
import 'package:dio/dio.dart';
import 'package:flutter/material.dart';
import 'dart:async';
import 'package:flutter/services.dart';
import 'package:yundian_alive/yundian_alive.dart';
import 'package:yundian_alive/yundian_ocr.dart';
import 'package:encrypt/encrypt.dart' as encrypt;
void main() {
runApp(const MyApp());
}
class MyApp extends StatefulWidget {
const MyApp({super.key});
@override
State<MyApp> createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
String _platformVersion = 'Unknown';
String _token = 'Unknown';
@override
void initState() {
super.initState();
initSdk();
getToken();
initListener();
initPlatformState();
}
void initListener() {
YundianAlive.onAliveResultListener((event) {
Map<String, dynamic> map = json.decode(event);
var code = map['code'];
var msg = map['msg'];
if (code == "0") {
print(map['score']);
print(map['featureImageId']);
} else if (code == "1") {
// 中途点击返回
} else {
// 失败
}
}, (event) {
print(event);
});
YundianOcr.onOcrResultListener((event) {
print(event);
}, (event) {
print(event);
});
}
Future<void> initSdk() async {
var result =
await YundianAlive.aliveInit(false, "EgRIOtmR", "mchInfo", "riskInfo");
print(result);
var resultOcr =
await YundianOcr.ocrInit(true, "EgRIOtmR", "mchInfo", "riskInfo");
print(resultOcr);
}
Future<void> getToken() async {
String url = "http://110.40.189.145:3001/sdk/real-auth/getToken";
///创建Dio
Dio dio = Dio();
int random = Random().nextInt(100);
///创建Map 封装参数
Map<String, dynamic> params = {};
var userId = "userId${random.toString()}";
final key = encrypt.Key.fromUtf8('NxbIe4PRzoNhsszN');
final iv = encrypt.IV.fromLength(16); //偏移量
//设置cbc模式
final encrypter = encrypt.Encrypter(
encrypt.AES(key, mode: encrypt.AESMode.cbc, padding: 'PKCS7'));
final encrypted = encrypter.encrypt(userId, iv: iv);
// params['userId'] = await YundianAlive.aliveEncryptAes({"info": userId, "appSecret": "NxbIe4PRzoNhsszN"});
params['userId'] = encrypted.base64;
String jsonString = json.encode(params);
Map<String, String> headerMap = {};
headerMap["X-Ca-Key"] = "";
///发起post请求
Response response = await dio.post(url, data: jsonString);
var data = response.data;
_token = data["data"]["token"];
print(data);
print(_token);
}
// Platform messages are asynchronous, so we initialize in an async method.
Future<void> initPlatformState() async {
String platformVersion;
// Platform messages may fail, so we use a try/catch PlatformException.
// We also handle the message potentially returning null.
try {
platformVersion =
await YundianAlive.getPlatformVersion() ?? 'Unknown platform version';
} on PlatformException {
platformVersion = 'Failed to get platform version.';
}
// If the widget was removed from the tree while the asynchronous platform
// message was in flight, we want to discard the reply rather than calling
// setState to update our non-existent appearance.
if (!mounted) return;
setState(() {
_platformVersion = platformVersion;
});
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: const Text('Plugin example app'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: [
Text('Running on: $_platformVersion\n'),
GestureDetector(
onTap: () async {
var result =
await YundianAlive.aliveStartDetect(_token, 3.0, true);
print(result);
},
child: Container(
padding: const EdgeInsets.all(12.0),
decoration: BoxDecoration(
color: Colors.lightBlue,
borderRadius: BorderRadius.circular(8.0),
),
child: const Text('活体检测'),
)),
GestureDetector(
onTap: () async {
var result = await YundianOcr.ocrStartDetect(_token, true);
print(result);
},
child: Container(
padding: const EdgeInsets.all(12.0),
decoration: BoxDecoration(
color: Colors.lightBlue,
borderRadius: BorderRadius.circular(8.0),
),
child: const Text('OCR检测'),
)),
],
),
),
),
);
}
}