Flutter密钥管理插件flutter_keystore的使用

Flutter密钥管理插件flutter_keystore的使用

安装

pubspec.yaml文件中添加以下依赖:

dependencies:
  flutter_keystore:
    git:
      url: https://github.com/TimothyGCY/flutter_keystore.git

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

使用

首先,我们需要实例化插件对象:

// 实例化插件
final FlutterKeyStore keyStore = FlutterKeyStore();

接下来,我们可以进行数据的读取、写入和删除操作:

// 向密钥库写入数据
await keyStore.write('key', 'value');

// 从密钥库通过键读取数据
await keyStore.read('key');

// 从密钥库通过键删除数据
await keyStore.delete('key');

以下是完整的示例代码:

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

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

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

class MyApp extends StatefulWidget {
  const MyApp({super.key});

  [@override](/user/override)
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  String _storeValue = '';
  final _flutterKeystorePlugin = FlutterKeyStore();
  final String myDataKey = 'hello';
  final TextEditingController _valueController = TextEditingController();

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

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

  Future<void> _loadStoreData() async {
    String value;
    try {
      // 从密钥库读取数据
      value = await _flutterKeystorePlugin.read(myDataKey) ?? '(Empty)';
    } on PlatformException {
      // 处理平台异常
      value = 'Failed to read store value';
    }

    if (!mounted) return;

    // 更新UI
    setState(() {
      _storeValue = value;
    });
  }

  Future<void> _onSave() async {
    final String value = _valueController.text.trim();
    if (value.isEmpty) {
      // 如果输入为空,则删除数据
      await _onDelete();
    } else {
      // 向密钥库写入数据
      await _flutterKeystorePlugin.write(myDataKey, value);
    }
    // 清空输入框并重新加载数据
    _valueController.clear();
    _loadStoreData();
  }

  Future<void> _onDelete() async {
    // 从密钥库删除数据
    await _flutterKeystorePlugin.delete(myDataKey);
    _loadStoreData();
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('插件示例应用'),
        ),
        body: Column(
          children: [
            Expanded(
              child: Center(
                child: Text('密钥库中的值: $_storeValue'),
              ),
            ),
            Expanded(
              child: Column(
                mainAxisAlignment: MainAxisAlignment.center,
                children: [
                  Padding(
                    padding: const EdgeInsets.symmetric(horizontal: 28.0),
                    child: TextField(
                      controller: _valueController,
                      decoration: const InputDecoration(
                        border: OutlineInputBorder(),
                        label: Text('存储中的值'),
                      ),
                    ),
                  ),
                  const SizedBox(height: 24),
                  Row(
                    mainAxisAlignment: MainAxisAlignment.center,
                    children: [
                      ElevatedButton(
                        onPressed: _onSave,
                        child: const Text('保存'),
                      ),
                      const SizedBox(width: 24),
                      ElevatedButton(
                        onPressed: _onDelete,
                        child: const Text('删除'),
                      ),
                    ],
                  )
                ],
              ),
            ),
          ],
        ),
      ),
    );
  }
}

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

1 回复

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


flutter_keystore 是一个用于在 Flutter 应用中安全存储密钥和敏感信息的插件。它允许你在 Android 和 iOS 平台上使用各自的密钥管理系统来存储和检索数据。以下是使用 flutter_keystore 插件的步骤:

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  flutter_keystore: ^1.0.0  # 请确保使用最新版本

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

2. 导入插件

在你的 Dart 文件中导入 flutter_keystore

import 'package:flutter_keystore/flutter_keystore.dart';

3. 初始化 Keystore

在使用 flutter_keystore 之前,建议先初始化它。你可以通过调用 FlutterKeystore.init() 来初始化:

await FlutterKeystore.init();

4. 存储数据

使用 FlutterKeystore.save 方法来存储数据。你需要提供一个键(key)和对应的值(value):

await FlutterKeystore.save(key: 'my_key', value: 'my_secret_value');

5. 读取数据

使用 FlutterKeystore.read 方法来读取之前存储的数据。你只需要提供键(key):

String? value = await FlutterKeystore.read(key: 'my_key');
print(value);  // 输出: my_secret_value

6. 删除数据

如果你需要删除某个键值对,可以使用 FlutterKeystore.delete 方法:

await FlutterKeystore.delete(key: 'my_key');

7. 检查键是否存在

你可以使用 FlutterKeystore.exists 方法来检查某个键是否存在:

bool exists = await FlutterKeystore.exists(key: 'my_key');
print(exists);  // 输出: true 或 false

8. 清除所有数据

如果你想清除所有存储在 Keystore 中的数据,可以使用 FlutterKeystore.clear 方法:

await FlutterKeystore.clear();

9. 处理错误

在使用 flutter_keystore 时,可能会遇到一些错误,例如键不存在或存储失败。你可以使用 try-catch 块来处理这些错误:

try {
  await FlutterKeystore.save(key: 'my_key', value: 'my_secret_value');
} catch (e) {
  print('Failed to save data: $e');
}

10. 平台差异

  • Android: flutter_keystore 使用 Android 的 KeyStore 系统来存储数据。
  • iOS: 在 iOS 上,flutter_keystore 使用 Keychain 来存储数据。

11. 注意事项

  • 安全性: flutter_keystore 使用平台提供的安全机制来存储数据,但开发者仍需谨慎处理敏感信息。
  • 兼容性: 确保你的应用在 Android 和 iOS 上的兼容性,特别是在处理不同版本的密钥管理系统时。

示例代码

以下是一个完整的示例,展示了如何使用 flutter_keystore 存储、读取和删除数据:

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

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await FlutterKeystore.init();
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: Text('Flutter Keystore Example')),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              ElevatedButton(
                onPressed: () async {
                  await FlutterKeystore.save(key: 'my_key', value: 'my_secret_value');
                  print('Data saved');
                },
                child: Text('Save Data'),
              ),
              ElevatedButton(
                onPressed: () async {
                  String? value = await FlutterKeystore.read(key: 'my_key');
                  print('Data read: $value');
                },
                child: Text('Read Data'),
              ),
              ElevatedButton(
                onPressed: () async {
                  await FlutterKeystore.delete(key: 'my_key');
                  print('Data deleted');
                },
                child: Text('Delete Data'),
              ),
            ],
          ),
        ),
      ),
    );
  }
}
回到顶部