Flutter安全存储插件vault的使用

发布于 1周前 作者 sinazl 来自 Flutter

Flutter安全存储插件vault的使用

Vault 是一个用于加密存储整数、双精度浮点数、字符串和布尔值的库。Vault 将其内容存储在持久化存储中。

使用方法

首先,需要导入 vault 包:

import 'package:vault/vault.dart' as vault;

保存数据

你可以通过传递一个 key 来保存一个 value

vault.save(key, value);

获取数据

可以通过传递一个 key 来获取一个 value

vault.get(key);

监听数据变化

可以通过传递一个 key 来监听某个 value 的实时变化:

vault.listen(key);

删除数据

可以通过传递一个 key 来删除一个 value

vault.delete(key);

删除所有数据

可以删除 vault 中存储的所有值:

vault.deleteAll();

完整示例

以下是一个完整的示例代码,展示了如何使用 Vault 插件进行数据的保存、获取、监听和删除操作。

import 'dart:ui';

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

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

class MyApp extends StatelessWidget {
  // 这个小部件是你的应用的根
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(title: 'Flutter Demo Home Page'),
    );
  }
}

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

  final String title;

  [@override](/user/override)
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {

  final saveController = TextEditingController();
  final saveValueController = TextEditingController();
  final getController = TextEditingController();
  final streamController = TextEditingController();
  String getValue = "";
  String streamValue = "";
  final vault = Vault();

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("Vault"),
      ),
      body: Column(
        mainAxisAlignment: MainAxisAlignment.center,
        children: [
          Text("Get", style: TextStyle(fontSize: 30, fontWeight: FontWeight.bold), textAlign: TextAlign.left),
          Padding(
            padding: EdgeInsets.symmetric(horizontal: 18.0),
            child: TextField(
              decoration: InputDecoration(hintText: "key"),
              controller: getController,
            ),
          ),
          Text('value: $getValue'),
          TextButton(onPressed: () async {
            final value = await vault.get(getController.text);
            setState(() {
              getValue = value.toString();
            });
          }, child: Text("Get")),
          Divider(),
          Text("Stream", style: TextStyle(fontSize: 30, fontWeight: FontWeight.bold), textAlign: TextAlign.left),
          StreamBuilder(
            stream: vault.listen(streamValue),
            builder: (context, snapshot) {
              return Text("value: ${snapshot.data.toString()}");
            },
          ),
          Padding(
            padding: EdgeInsets.symmetric(horizontal: 18.0),
            child: TextField(
              decoration: InputDecoration(hintText: "key"),
              controller: streamController,
            ),
          ),
          TextButton(onPressed: () {
            setState(() {
              streamValue = streamController.text;
              streamController.clear();
            });
          }, child: Text("Stream")),
          Divider(),
          Text("Save", style: TextStyle(fontSize: 30, fontWeight: FontWeight.bold), textAlign: TextAlign.left),
          Padding(
            padding: EdgeInsets.symmetric(horizontal: 18.0),
            child: TextField(
              decoration: InputDecoration(hintText: "key"),
              controller: saveController,
            ),
          ),
          Padding(
            padding: EdgeInsets.symmetric(horizontal: 18.0),
            child: TextField(
              decoration: InputDecoration(hintText: "value"),
              controller: saveValueController,
            ),
          ),
          TextButton(onPressed: () {
            vault.save(saveController.text, saveValueController.text);
            saveValueController.clear();
            saveController.clear();
          }, child: Text("Save")),
        ],
      ),
    );
  }
}

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

1 回复

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


当然,以下是一个关于如何在Flutter应用中使用vault插件进行安全存储的示例代码。vault插件允许你安全地存储敏感信息,如密码、令牌等。

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

dependencies:
  flutter:
    sdk: flutter
  vault: ^3.0.3  # 请确保使用最新版本

然后运行flutter pub get来获取依赖。

接下来,你可以按照以下步骤在你的Flutter应用中使用vault插件:

1. 初始化 Vault

在你的应用入口文件(通常是main.dart)中,初始化Vault实例。

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

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  final Vault vault = await Vault.create(password: 'your-strong-password'); // 设置一个强密码
  runApp(MyApp(vault: vault));
}

class MyApp extends StatelessWidget {
  final Vault vault;

  MyApp({required this.vault});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: HomeScreen(vault: vault),
    );
  }
}

2. 存储和读取数据

在你的主屏幕或其他页面,你可以使用Vault实例来存储和读取数据。

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

class HomeScreen extends StatefulWidget {
  final Vault vault;

  HomeScreen({required this.vault});

  @override
  _HomeScreenState createState() => _HomeScreenState();
}

class _HomeScreenState extends State<HomeScreen> {
  final _formKey = GlobalKey<FormState>();
  String? _key;
  String? _value;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Vault Example'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Column(
          children: [
            Form(
              key: _formKey,
              child: Column(
                children: [
                  TextFormField(
                    decoration: InputDecoration(labelText: 'Key'),
                    validator: (value) {
                      if (value == null || value.isEmpty) {
                        return 'Key cannot be empty';
                      }
                      return null;
                    },
                    onSaved: (value) => _key = value,
                  ),
                  TextFormField(
                    decoration: InputDecoration(labelText: 'Value'),
                    validator: (value) {
                      if (value == null || value.isEmpty) {
                        return 'Value cannot be empty';
                      }
                      return null;
                    },
                    onSaved: (value) => _value = value,
                  ),
                ],
              ),
            ),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: () async {
                if (_formKey.currentState!.validate()) {
                  _formKey.currentState!.save();
                  await widget.vault.write(_key!, _value!);
                  ScaffoldMessenger.of(context).showSnackBar(
                    SnackBar(content: Text('Data saved')),
                  );
                }
              },
              child: Text('Save'),
            ),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: () async {
                String? readValue = await widget.vault.read(_key!);
                if (readValue != null) {
                  ScaffoldMessenger.of(context).showSnackBar(
                    SnackBar(content: Text('Value: $readValue')),
                  );
                } else {
                  ScaffoldMessenger.of(context).showSnackBar(
                    SnackBar(content: Text('Key not found')),
                  );
                }
              },
              child: Text('Read'),
            ),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: () async {
                await widget.vault.delete(_key!);
                ScaffoldMessenger.of(context).showSnackBar(
                  SnackBar(content: Text('Key deleted')),
                );
              },
              child: Text('Delete'),
            ),
          ],
        ),
      ),
    );
  }
}

3. 运行应用

运行你的Flutter应用,你应该能够看到一个简单的表单,允许你输入一个键和值,并将它们存储到Vault中。你还可以读取和删除存储的数据。

这个示例展示了如何使用vault插件在Flutter应用中进行安全存储的基本操作。如果你需要更高级的功能,比如加密和解密,你可以查阅vault插件的官方文档。

回到顶部