Flutter安全存储插件finap_secure_shared_preferences的使用

Flutter安全存储插件finap_secure_shared_preferences的使用

特性

通过 finap_secure_shared_preferences 插件,可以以安全的方式读取和写入共享偏好数据。

开始使用

在项目中添加该插件:

flutter pub add finap_secure_shared_preferences

使用方法

读取数据

通过指定键值读取数据:

import 'package:finap_secure_shared_preferences/finap_secure_shared_preferences.dart';

Future<String?> read(String key) async {
    // 创建一个实例
    final storage = FinapSecureSharedPreferences();
    // 异步读取数据
    return await storage.read(key: key);
}

读取所有数据

一次性读取所有的数据:

import 'package:finap_secure_shared_preferences/finap_secure_shared_preferences.dart';

Future<Map<String, String>?> readAll() async {
    // 创建一个实例
    final storage = FinapSecureSharedPreferences();
    // 异步读取所有数据
    return await storage.readAll();
}

删除数据

通过指定键值删除数据:

import 'package:finap_secure_shared_preferences/finap_secure_shared_preferences.dart';

Future<void> delete(String key) async {
    // 创建一个实例
    final storage = FinapSecureSharedPreferences();
    // 异步删除数据
    await storage.delete(key: key);
}

删除所有数据

清除所有的存储数据:

import 'package:finap_secure_shared_preferences/finap_secure_shared_preferences.dart';

Future<void> deleteAll() async {
    // 创建一个实例
    final storage = FinapSecureSharedPreferences();
    // 异步清空所有数据
    await storage.deleteAll();
}

写入数据

向存储中写入数据,并根据设备类型设置不同的选项(如 iOS 设备):

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

Future<void> write(String key, String value) async {
    // 创建一个实例
    final storage = FinapSecureSharedPreferences();

    // 判断是否为 iOS 设备
    if (Platform.isIOS) {
        // 设置 iOS 的访问选项
        final options = IOSOptions(
            accessibility: IOSAccessibility.first_unlock // 需要在解锁后才能访问
        );
        // 写入数据并应用选项
        await storage.write(key: key, value: value, iOptions: options);
    } else {
        // 其他平台直接写入数据
        await storage.write(key: key, value: value);
    }
}

完整示例

以下是一个完整的示例,展示了如何使用 finap_secure_shared_preferences 插件来安全地存储和读取数据:

import 'package:flutter/material.dart';
import 'package:finap_secure_shared_preferences/finap_secure_shared_preferences.dart';
import 'package:flutter/services.dart';

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: SecureStorageExample(),
    );
  }
}

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

class _SecureStorageExampleState extends State<SecureStorageExample> {
  final _storage = FinapSecureSharedPreferences();
  final TextEditingController _keyController = TextEditingController();
  final TextEditingController _valueController = TextEditingController();
  String? _result;

  Future<void> _writeData() async {
    final key = _keyController.text;
    final value = _valueController.text;

    if (Platform.isIOS) {
      final options = IOSOptions(
          accessibility: IOSAccessibility.first_unlock); // iOS 设备解锁后可访问
      await _storage.write(key: key, value: value, iOptions: options);
    } else {
      await _storage.write(key: key, value: value);
    }

    setState(() {
      _result = "数据已保存";
    });
  }

  Future<void> _readData() async {
    final key = _keyController.text;
    final result = await _storage.read(key: key);

    setState(() {
      _result = result ?? "未找到数据";
    });
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("安全存储示例"),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            TextField(
              controller: _keyController,
              decoration: InputDecoration(hintText: "请输入键"),
            ),
            TextField(
              controller: _valueController,
              decoration: InputDecoration(hintText: "请输入值"),
            ),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: _writeData,
              child: Text("保存数据"),
            ),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: _readData,
              child: Text("读取数据"),
            ),
            SizedBox(height: 20),
            Text(_result ?? ""),
          ],
        ),
      ),
    );
  }
}

更多关于Flutter安全存储插件finap_secure_shared_preferences的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter安全存储插件finap_secure_shared_preferences的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


finap_secure_shared_preferences 是一个用于在 Flutter 应用中安全存储数据的插件。它基于 SharedPreferences,但提供了额外的加密层,确保存储的数据更加安全。以下是如何使用 finap_secure_shared_preferences 插件的详细步骤。

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  finap_secure_shared_preferences: ^1.0.0  # 请使用最新版本

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

2. 初始化插件

在使用插件之前,需要先进行初始化。通常可以在 main() 函数中完成初始化:

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

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Secure Shared Preferences Demo',
      home: HomeScreen(),
    );
  }
}

3. 存储数据

使用 FinapSecureSharedPreferences 来存储数据。你可以存储 Stringintdoublebool 等类型的数据。

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

class HomeScreen extends StatelessWidget {
  Future<void> _saveData() async {
    await FinapSecureSharedPreferences.setString('key1', 'secure_value');
    await FinapSecureSharedPreferences.setInt('key2', 123);
    await FinapSecureSharedPreferences.setBool('key3', true);
    print('Data saved securely');
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Secure Shared Preferences'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: _saveData,
          child: Text('Save Secure Data'),
        ),
      ),
    );
  }
}

4. 读取数据

使用 FinapSecureSharedPreferences 来读取存储的数据。

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

class HomeScreen extends StatelessWidget {
  Future<void> _readData() async {
    String? value1 = await FinapSecureSharedPreferences.getString('key1');
    int? value2 = await FinapSecureSharedPreferences.getInt('key2');
    bool? value3 = await FinapSecureSharedPreferences.getBool('key3');
    print('Value1: $value1');
    print('Value2: $value2');
    print('Value3: $value3');
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Secure Shared Preferences'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            ElevatedButton(
              onPressed: _readData,
              child: Text('Read Secure Data'),
            ),
          ],
        ),
      ),
    );
  }
}

5. 删除数据

你可以使用 remove() 方法来删除存储的数据。

Future<void> _removeData() async {
  await FinapSecureSharedPreferences.remove('key1');
  print('Data removed');
}

6. 清除所有数据

你可以使用 clear() 方法来清除所有存储的数据。

Future<void> _clearData() async {
  await FinapSecureSharedPreferences.clear();
  print('All data cleared');
}

7. 注意事项

  • finap_secure_shared_preferences 使用加密来保护存储的数据,因此它比普通的 SharedPreferences 更安全。
  • 由于数据是加密存储的,读取和写入操作可能会比普通的 SharedPreferences 稍慢。
  • 确保在使用插件之前进行初始化,否则可能会导致运行时错误。

8. 示例代码

以下是一个完整的示例代码,展示了如何在 Flutter 应用中使用 finap_secure_shared_preferences

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

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Secure Shared Preferences Demo',
      home: HomeScreen(),
    );
  }
}

class HomeScreen extends StatelessWidget {
  Future<void> _saveData() async {
    await FinapSecureSharedPreferences.setString('key1', 'secure_value');
    await FinapSecureSharedPreferences.setInt('key2', 123);
    await FinapSecureSharedPreferences.setBool('key3', true);
    print('Data saved securely');
  }

  Future<void> _readData() async {
    String? value1 = await FinapSecureSharedPreferences.getString('key1');
    int? value2 = await FinapSecureSharedPreferences.getInt('key2');
    bool? value3 = await FinapSecureSharedPreferences.getBool('key3');
    print('Value1: $value1');
    print('Value2: $value2');
    print('Value3: $value3');
  }

  Future<void> _removeData() async {
    await FinapSecureSharedPreferences.remove('key1');
    print('Data removed');
  }

  Future<void> _clearData() async {
    await FinapSecureSharedPreferences.clear();
    print('All data cleared');
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Secure Shared Preferences'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            ElevatedButton(
              onPressed: _saveData,
              child: Text('Save Secure Data'),
            ),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: _readData,
              child: Text('Read Secure Data'),
            ),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: _removeData,
              child: Text('Remove Data'),
            ),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: _clearData,
              child: Text('Clear All Data'),
            ),
          ],
        ),
      ),
    );
  }
}
回到顶部