Flutter加密共享偏好设置插件encrypted_shared_preferences的使用

Flutter加密共享偏好设置插件encrypted_shared_preferences的使用

此插件用于将共享偏好设置以加密的形式存储。读取时自动解密。你可以与常规的共享偏好设置并行使用。

使用

实例化类

EncryptedSharedPreferences encryptedSharedPreferences = EncryptedSharedPreferences();

保存值

encryptedSharedPreferences.setString('sample', 'Hello, World!').then((bool success) {
    if (success) {
        print('success');
    } else {
        print('fail');
    }
});

获取值

encryptedSharedPreferences.getString('sample').then((String value) {
    print(value); /// Prints Hello, World!
});

删除值

encryptedSharedPreferences.remove('sample').then((bool success) {
    if (success) {
        print('success');
    } else {
        print('fail');
    }
});

清除所有值

/// 清除所有值,包括你用常规共享偏好设置保存的值。
encryptedSharedPreferences.clear().then((bool success) {
    if (success) {
        print('success');
    } else {
        print('fail');
    }
});

重新加载

encryptedSharedPreferences.reload();

自定义SharedPreferences实例

/// 可以传递一个自定义的SharedPreferences实例(例如:更新版的SharedPreferences)
final prefs = await SharedPreferences.getInstance();
EncryptedSharedPreferences encryptedSharedPreferences = EncryptedSharedPreferences(prefs: prefs);

访问内部的SharedPreferences实例

// 可以访问内部的SharedPreferences实例来调用未被常规EncryptedSharedPreferences公开的方法
SharedPreferences instance = await encryptedSharedPreferences.getInstance();
int counter = 1;

/// 访问SharedPreferences的setInt方法
await instance.setInt('counter', counter);

加密模式

默认模式为SIC AESMode.sic,可以通过名为mode的参数覆盖它:

EncryptedSharedPreferences encryptedSharedPreferences = EncryptedSharedPreferences(mode: AESMode.cbc);

支持的模式有:

  • CBC <code>AESMode.cbc</code>
  • CFB-64 <code>AESMode.cfb64</code>
  • CTR <code>AESMode.ctr</code>
  • ECB <code>AESMode.ecb</code>
  • OFB-64/GCTR <code>AESMode.ofb64Gctr</code>
  • OFB-64 <code>AESMode.ofb64</code>
  • SIC <code>AESMode.sic</code>

完整示例

以下是一个完整的示例代码,演示如何在Flutter应用中使用encrypted_shared_preferences插件。

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

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Encrypted Shared Preferences Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

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

class _MyHomePageState extends State<MyHomePage> {
  final EncryptedSharedPreferences encryptedSharedPreferences = EncryptedSharedPreferences();
  final _formKey = GlobalKey<FormState>();
  final myController = TextEditingController();
  String value = '';

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

  init() async {
    encryptedSharedPreferences.getString('sample').then((String _value) {
      setState(() {
        value = _value;
      });
    });
  }

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

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Encrypted Shared Preferences Demo Page'),
      ),
      body: Form(
          key: _formKey,
          child: Padding(
            padding: const EdgeInsets.all(8.0),
            child: Column(
              children: <Widget>[
                TextFormField(
                    decoration:
                        InputDecoration(hintText: 'Type text here and save'),
                    controller: myController,
                    validator: (value) {
                      if (value != null && value.isEmpty) {
                        return 'Please enter some text';
                      }
                      return null;
                    }),
                Text('Current value: $value')
              ],
            ),
          )),
      floatingActionButton: FloatingActionButton(
        onPressed: () {
          if (_formKey.currentState!.validate()) {
            encryptedSharedPreferences
                .setString('sample', myController.text)
                .then((bool success) {
              if (success) {
                print('success');
                encryptedSharedPreferences
                    .getString('sample')
                    .then((String _value) {
                  setState(() {
                    value = _value;
                  });
                });
              } else {
                print('fail');
              }
            });
          }
        },
        tooltip: 'Save',
        child: Icon(Icons.save),
      ),
    );
  }
}

更多关于Flutter加密共享偏好设置插件encrypted_shared_preferences的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter加密共享偏好设置插件encrypted_shared_preferences的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


encrypted_shared_preferences 是一个 Flutter 插件,用于在应用程序中安全地存储和获取加密的共享偏好设置。它基于 shared_preferences 插件,并在其基础上增加了加密功能,以确保敏感数据的安全性。

安装

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

dependencies:
  flutter:
    sdk: flutter
  encrypted_shared_preferences: ^1.0.0+1

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

使用

1. 初始化 EncryptedSharedPreferences

在使用 encrypted_shared_preferences 之前,你需要初始化它。通常,你可以在 main 函数中初始化:

import 'package:encrypted_shared_preferences/encrypted_shared_preferences.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();

  // 初始化 EncryptedSharedPreferences
  final encryptedPrefs = EncryptedSharedPreferences();
  await encryptedPrefs.init();

  runApp(MyApp(encryptedPrefs: encryptedPrefs));
}

2. 存储数据

你可以使用 setString, setInt, setBool, setDouble, setStringList 等方法来存储加密的数据:

class MyApp extends StatelessWidget {
  final EncryptedSharedPreferences encryptedPrefs;

  MyApp({required this.encryptedPrefs});

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Encrypted Shared Preferences Example'),
        ),
        body: Center(
          child: ElevatedButton(
            onPressed: () async {
              // 存储加密的字符串
              await encryptedPrefs.setString('key1', 'sensitive_data');
              print('Data stored securely');
            },
            child: Text('Store Data'),
          ),
        ),
      ),
    );
  }
}

3. 获取数据

你可以使用 getString, getInt, getBool, getDouble, getStringList 等方法来获取解密的数据:

class MyApp extends StatelessWidget {
  final EncryptedSharedPreferences encryptedPrefs;

  MyApp({required this.encryptedPrefs});

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Encrypted Shared Preferences Example'),
        ),
        body: Center(
          child: ElevatedButton(
            onPressed: () async {
              // 获取解密的字符串
              String? value = await encryptedPrefs.getString('key1');
              print('Retrieved data: $value');
            },
            child: Text('Retrieve Data'),
          ),
        ),
      ),
    );
  }
}

4. 删除数据

你可以使用 remove 方法来删除存储的加密数据:

class MyApp extends StatelessWidget {
  final EncryptedSharedPreferences encryptedPrefs;

  MyApp({required this.encryptedPrefs});

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Encrypted Shared Preferences Example'),
        ),
        body: Center(
          child: ElevatedButton(
            onPressed: () async {
              // 删除存储的加密数据
              await encryptedPrefs.remove('key1');
              print('Data removed');
            },
            child: Text('Remove Data'),
          ),
        ),
      ),
    );
  }
}
回到顶部