Flutter键值管理或加密插件keyri的使用

发布于 1周前 作者 zlyuanteng 最后一次编辑是 5天前 来自 Flutter

Flutter键值管理或加密插件keyri的使用

关于keyri

这是一个用于Flutter移动应用的插件,支持Keyri二维码登录系统。完整的文档可以在以下链接找到:https://docs.keyri.com/flutter。

该插件基于Keyri iOS(Swift)和Android(Kotlin)包,分别需要iOS 14及以上版本和Android API级别23及以上版本才能运行。这两个包都没有第三方依赖。

示例代码

import 'package:flutter/material.dart';
import 'package:keyri/keyri.dart';
import 'package:mobile_scanner/mobile_scanner.dart';

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

const String appKey = 'IT7VrTQ0r4InzsvCNJpRCRpi1qzfgpaj';

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
        title: 'Keyri Example',
        theme: ThemeData(primarySwatch: Colors.blue),
        home: const KeyriHomePage(title: 'Keyri Example'));
  }
}

class KeyriHomePage extends StatefulWidget {
  const KeyriHomePage({Key? key, required this.title}) : super(key: key);

  final String title;

  [@override](/user/override)
  State<KeyriHomePage> createState() => _KeyriHomePageState();
}

class _KeyriHomePageState extends State<KeyriHomePage> {
  Keyri keyri = Keyri();

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text(widget.title)),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            button(_easyKeyriAuth, 'Easy Keyri Auth'),
            button(_customUI, 'Custom UI')
          ],
        ),
      ),
    );
  }

  // 执行简单的Keyri认证
  void _easyKeyriAuth() async {
    await keyri
        .easyKeyriAuth(appKey, 'Some payload', 'Public user ID') // 执行认证操作
        .then((authResult) => _onAuthResult(authResult == true ? true : false)) // 成功回调
        .catchError((error, stackTrace) => _onError(error)); // 失败回调
  }

  // 跳转到自定义UI页面
  void _customUI() {
    Navigator.push(context, MaterialPageRoute(builder: (context) => const KeyriScannerAuthPage()));
  }

  // 显示错误信息
  void _onError(String message) {
    ScaffoldMessenger.of(context).showSnackBar(SnackBar(content: Text(message)));
  }

  // 显示认证结果
  void _onAuthResult(bool result) {
    String text;
    if (result) {
      text = 'Successfully authenticated!'; // 认证成功
    } else {
      text = 'Authentication failed'; // 认证失败
    }

    ScaffoldMessenger.of(context).showSnackBar(SnackBar(content: Text(text)));
  }

  // 创建按钮
  Widget button(VoidCallback onPressedCallback, String text) {
    return ElevatedButton(
      style: ElevatedButton.styleFrom(
        primary: Colors.deepPurple,
        onPrimary: Colors.white,
      ),
      onPressed: onPressedCallback,
      child: Text(text),
    );
  }
}

class KeyriScannerAuthPage extends StatefulWidget {
  const KeyriScannerAuthPage({Key? key}) : super(key: key);

  [@override](/user/override)
  State<KeyriScannerAuthPage> createState() => _KeyriScannerAuthPageState();
}

class _KeyriScannerAuthPageState extends State<KeyriScannerAuthPage> {
  bool _isLoading = false;

  Keyri keyri = Keyri();

  // 检测扫描结果
  void onMobileScannerDetect(Barcode barcode, MobileScannerArguments? args) {
    if (barcode.rawValue == null) {
      debugPrint('Failed to scan Barcode'); // 扫描失败
      return;
    }

    final String? code = barcode.rawValue;
    debugPrint('Scanned barcode: $code'); // 扫描成功

    if (code == null) return;

    var sessionId = Uri.dataFromString(code).queryParameters['sessionId']; // 获取会话ID

    if (sessionId == null) return;

    setState(() {
      _isLoading = true;
    });
    _onReadSessionId(sessionId); // 执行会话ID处理
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      body: Column(
        children: <Widget>[
          Expanded(
            flex: 1,
            child: _isLoading
                ? Center(
                    child: Column(
                        mainAxisSize: MainAxisSize.max,
                        mainAxisAlignment: MainAxisAlignment.center,
                        children: const [CircularProgressIndicator()])) // 加载指示器
                : MobileScanner(allowDuplicates: false, onDetect: onMobileScannerDetect), // 扫描控件
          )
        ],
      ),
    );
  }

  // 处理会话ID
  Future<void> _onReadSessionId(String sessionId) async {
    await keyri
        .initiateQrSession(appKey, sessionId, 'Public user ID') // 初始化会话
        .then((session) => keyri
            .initializeDefaultScreen(sessionId, 'Some payload') // 初始化默认屏幕
            .then((authResult) => _onAuthResult(authResult)) // 成功回调
            .catchError((error, stackTrace) => _onError(error.toString()))) // 失败回调
        .catchError((error, stackTrace) => _onError(error.toString())); // 失败回调
  }

  // 显示错误信息
  void _onError(String message) {
    ScaffoldMessenger.of(context).showSnackBar(SnackBar(content: Text(message))); // 显示错误消息

    setState(() {
      _isLoading = false;
    });
  }

  // 显示认证结果
  void _onAuthResult(bool result) {
    String text;

    if (result) {
      text = 'Successfully authenticated!'; // 认证成功
    } else {
      text = 'Failed to authenticate'; // 认证失败
    }

    ScaffoldMessenger.of(context).showSnackBar(SnackBar(content: Text(text))); // 显示认证结果

    setState(() {
      _isLoading = false;
    });
  }
}

更多关于Flutter键值管理或加密插件keyri的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter键值管理或加密插件keyri的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


由于keyri并非一个广为人知的Flutter插件,且介绍为undefined,以下内容是基于插件名称“keyri”进行合理推测的使用场景和示例代码。假设keyri插件可能用于键值管理或加密操作,以下内容提供了一种可能的用法。

可能的功能推测:

  • 键值管理keyri可能是一个用于管理键值对的插件,类似于SharedPreferences,但可能提供更高级的功能,如加密存储。
  • 加密操作keyri可能是一个用于加密和解密数据的插件,支持常见的加密算法如AES、RSA等。

示例代码

1. 键值管理

假设keyri用于管理键值对,以下是一个可能的使用示例:

import 'package:keyri/keyri.dart';

void main() async {
  // 初始化插件
  await Keyri.init();

  // 存储键值对
  await Keyri.setString('username', 'user123');
  await Keyri.setInt('age', 25);

  // 获取键值对
  String username = await Keyri.getString('username');
  int age = await Keyri.getInt('age');

  print('Username: $username, Age: $age');

  // 删除键值对
  await Keyri.remove('username');
}

2. 加密操作

假设keyri用于加密和解密数据,以下是一个可能的使用示例:

import 'package:keyri/keyri.dart';

void main() async {
  // 初始化插件
  await Keyri.init();

  // 加密数据
  String plainText = 'Sensitive Data';
  String encryptedText = await Keyri.encrypt(plainText);

  print('Encrypted: $encryptedText');

  // 解密数据
  String decryptedText = await Keyri.decrypt(encryptedText);

  print('Decrypted: $decryptedText');
}

可能的API和方法

以下是一些假设的API,可能与keyri插件的功能对应:

  • 初始化: Keyri.init()
  • 存储数据:
    • setString(String key, String value)
    • setInt(String key, int value)
    • setBool(String key, bool value)
  • 读取数据:
    • getString(String key)
    • getInt(String key)
    • getBool(String key)
  • 删除数据: remove(String key)
  • 加密: encrypt(String plainText)
  • 解密: decrypt(String encryptedText)

注意事项

  1. 插件安装: 如果keyri插件确实存在,确保在pubspec.yaml文件中正确添加依赖:
    dependencies:
      keyri: ^1.0.0
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!