Flutter密钥管理插件flutter_keychainaccess的使用

Flutter密钥管理插件flutter_keychainaccess的使用

flutter_keychainaccess 是一个用于在 Flutter 应用程序中安全存储和检索密钥的插件。它利用了平台特定的安全存储机制(例如 iOS 的 Keychain 和 Android 的 Keystore)来确保数据的安全性。

安装

首先,在你的 pubspec.yaml 文件中添加依赖:

dependencies:
  flutter_keychainaccess: ^0.0.1

然后运行 flutter pub get 来安装该插件。

使用示例

以下是一个完整的示例,展示了如何使用 flutter_keychainaccess 插件来写入、读取、删除和列出所有密钥。

import 'dart:math';

import 'package:flutter/material.dart';
import 'dart:async';

import 'package:flutter/services.dart';
import 'package:flutter_keychainaccess/flutter_keychainaccess.dart';

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

class MyApp extends StatefulWidget {
  [@override](/user/override)
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  String value = '';

  [@override](/user/override)
  void initState() {
    super.initState();
  }

  // 写入密钥
  write() async {
    var randomValue = Random().nextInt(1000).toString();
    await FlutterKeychainaccess.write(service: "testservice", key: "userToken", value: randomValue);
    print('写入成功');
  }

  // 删除密钥
  remove() async {
    await FlutterKeychainaccess.remove(service: "testservice", key: "userToken");
    print('删除成功');
  }

  // 读取密钥
  read() async {
    var v = await FlutterKeychainaccess.read(service: "testservice", key: "userToken");
    setState(() => value = v ?? '未找到');
  }

  // 列出所有密钥
  readAll() async {
    var allItems = await FlutterKeychainaccess.allItems(service: "testservice");
    var v = allItems.values.join(", ");
    setState(() => value = v);
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('插件示例应用'),
        ),
        body: Center(
          child: Column(
            children: [
              RaisedButton(onPressed: write, child: Text("写入密钥")),
              RaisedButton(onPressed: remove, child: Text("删除密钥")),
              RaisedButton(onPressed: read, child: Text("读取密钥")),
              RaisedButton(onPressed: readAll, child: Text("列出所有密钥")),
              Text(value ?? '未知')
            ]
          )
        ),
      ),
    );
  }
}

更多关于Flutter密钥管理插件flutter_keychainaccess的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

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


当然,以下是如何在Flutter项目中使用flutter_keychainaccess插件来进行密钥管理的示例代码。这个插件主要用于iOS和macOS平台,提供对Keychain的访问,以便安全地存储和检索敏感数据,比如密码、令牌等。

首先,确保你已经在pubspec.yaml文件中添加了flutter_keychainaccess依赖:

dependencies:
  flutter:
    sdk: flutter
  flutter_keychainaccess: ^0.5.0  # 请检查最新版本号

然后运行flutter pub get来安装依赖。

iOS 和 macOS 平台配置

由于flutter_keychainaccess主要面向iOS和macOS,你可能需要在Info.plist中添加一些权限配置,尽管对于基本的Keychain访问,通常不需要额外的配置。

使用示例

以下是一个简单的示例,展示如何使用flutter_keychainaccess来存储和检索密钥:

import 'package:flutter/material.dart';
import 'package:flutter_keychainaccess/flutter_keychainaccess.dart';

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

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  String _retrievedValue = '';

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Flutter Keychain Access Example'),
        ),
        body: Padding(
          padding: const EdgeInsets.all(16.0),
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              Text('Stored Value: $_retrievedValue'),
              SizedBox(height: 20),
              ElevatedButton(
                onPressed: () async {
                  String service = 'com.example.myapp';
                  String account = 'user123';
                  String password = 'securePassword123';

                  // 存储密钥
                  await FlutterKeychainAccess().internetPasswordForService(
                    service: service,
                    account: account,
                    password: password,
                  );

                  // 检索密钥
                  String? retrievedPassword = await FlutterKeychainAccess().internetPasswordForService(
                    service: service,
                    account: account,
                  );

                  setState(() {
                    _retrievedValue = retrievedPassword ?? 'Not Found';
                  });
                },
                child: Text('Store and Retrieve Password'),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

解释

  1. 依赖导入:首先,我们导入了flutter_keychainaccess包。
  2. UI布局:使用Flutter的Material Design组件来创建一个简单的UI,包含一个显示存储值的Text组件和一个用于触发存储和检索操作的ElevatedButton
  3. 存储密钥:使用FlutterKeychainAccess().internetPasswordForService方法存储密码。你需要提供serviceaccount作为标识符,以及要存储的password
  4. 检索密钥:再次调用FlutterKeychainAccess().internetPasswordForService方法,但这次不提供password参数,以检索之前存储的密码。
  5. 更新UI:使用setState方法更新UI以显示检索到的密码值。

请注意,flutter_keychainaccess插件在Android上不可用。如果你需要跨平台的密钥管理解决方案,可以考虑使用flutter_secure_storage等插件。

回到顶部