Flutter本地存储插件local_shared的使用

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

Flutter本地存储插件local_shared的使用

local_shared 是一个用于JSON文件存储的SharedPreferences封装库,提供了对本地存储的安全CRUD操作支持。本文将介绍如何在Flutter项目中使用该插件,并提供完整的示例代码。

安装

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

dependencies:
  local_shared: ^1.0.5

然后运行 flutter pub get 来安装这个包。

初始化

在你的 main 函数中初始化 LocalShared 实例:

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

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await LocalShared('db').initialize();

  runApp(MyApp());
}

你还可以为方便起见创建自定义类型定义:

typedef DB = LocalShared;

集合操作 (Collection)

创建集合

final result = await Shared.col('myCollection').create();
print(result); // SharedMany(success: true, message: '...', data: <JSON>[])

读取集合

final response = await Shared.col('myCollection').read();
print(response); // SharedMany(success: true, message: '...', data: <JSON>[])

更新集合

final response = await Shared.col('myCollection').update('myNewCollection');
print(response); // SharedMany(success: true, message: '...', data: <JSON>[])

删除集合

final response = await Shared.col('myNewCollection').delete();
print(response); // SharedNone(success: true, message: '....')

文档操作 (Document)

创建文档

final result = await Shared.col('myCollection').doc('documentId').create({'key': 'value'});
print(result); // SharedOne(success: true, message: '...', data: JSON)

读取文档

final response = await Shared.col('myCollection').doc('documentId').read();
print(response); // SharedOne(success: true, message: '...', data: JSON)

更新文档

final response = await Shared.col('myCollection').doc('documentId').update({'newKey': 'newValue'});
print(response); // SharedOne(success: true, message: '...', data: JSON)

删除文档

final response = await Shared.col('myCollection').doc('documentId').delete();
print(response); // SharedNone(success: true, message: '...')

多文档操作 (Many Document)

创建多文档

final result = await Shared.col('myCollection').docs(['docId1', 'docId2']).create((index) => {'key': 'value'});
print(result); // SharedMany(success: true, message: '...', data: <JSON>[])

读取多文档

final response = await Shared.col('myCollection').docs(['docId1', 'docId2']).read();
print(response); // SharedMany(success: true, message: '...', data: <JSON>[])

更新多文档

final response = await Shared.col('myCollection').docs(['docId1', 'docId2']).update((index) => {'newKey': 'newValue'});
print(response); // SharedMany(success: true, message: '...', data: <JSON>[])

删除多文档

final response = await Shared.col('myCollection').docs(['docId1', 'docId2']).delete();
print(response); // SharedNone(success: true, message: '...')

数据流监听 (Stream)

LocalShared 提供了JSON数据流来监听集合的变化:

LocalShared.stream.listen(print);

await Shared.col('myCollection').docs(['A','B']).create((index) => {'desc': 'test'});

结果输出:

{id: myCollection,
documents: [
{id: A, data: {desc: test}},
{id: B, data: {desc: test}}
]}

自定义数据流监听

如果你想只监听特定集合的变化,可以这样做:

final controller = StreamController<JSON>.broadcast();
final collection = SharedCollection('myCertainCollection', controller: controller);

controller.stream.listen(print);

await collection.docs(['A','B']).create((index) => {'desc': 'test'});

结果输出:

{id: myCertainCollection,
documents: [
{id: A, data: {desc: test}},
{id: B, data: {desc: test}}
]}

示例应用

下面是一个简单的Flutter应用示例,展示了如何使用 local_shared 进行CRUD操作:

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

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await LocalShared('MY_DB').initialize();

  runApp(const MaterialApp(
    title: 'Local Shared CRUD',
    home: MyApp(),
  ));
}

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

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: const Text('Local Shared CRUD')),
      body: Column(
        mainAxisAlignment: MainAxisAlignment.center,
        children: [
          ElevatedButton(
            onPressed: () async {
              final result = await Shared.col('example').create();
              print('Create Collection: $result');
            },
            child: const Text('Create Collection'),
          ),
          ElevatedButton(
            onPressed: () async {
              final result = await Shared.col('example').doc('doc1').create({'key': 'value'});
              print('Create Document: $result');
            },
            child: const Text('Create Document'),
          ),
        ],
      ),
    );
  }
}

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

1 回复

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


当然,以下是一个关于如何在Flutter中使用local_storage插件进行本地存储的代码示例。local_storage插件允许你在设备的本地存储中保存和检索数据。需要注意的是,这里提到的local_storage插件通常指的是flutter_secure_storage,因为local_shared并不是一个广为人知的Flutter本地存储插件名称。不过,flutter_secure_storage提供了类似的功能,并且是一个比较流行的选择。

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

dependencies:
  flutter:
    sdk: flutter
  flutter_secure_storage: ^5.0.2  # 请检查最新版本号

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

接下来,你可以在你的Flutter应用中使用这个插件来存储和检索数据。下面是一个简单的示例:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: StorageExample(),
    );
  }
}

class StorageExample extends StatefulWidget {
  @override
  _StorageExampleState createState() => _StorageExampleState();
}

class _StorageExampleState extends State<StorageExample> {
  final FlutterSecureStorage storage = FlutterSecureStorage();
  String? retrievedValue;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Local Storage Example'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            TextField(
              decoration: InputDecoration(labelText: 'Value to store'),
              onChanged: (value) async {
                await storage.write(key: 'my_key', value: value);
              },
            ),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: () async {
                String? value = await storage.read(key: 'my_key');
                setState(() {
                  retrievedValue = value;
                });
              },
              child: Text('Retrieve Value'),
            ),
            SizedBox(height: 20),
            Text('Retrieved Value: $retrievedValue'),
          ],
        ),
      ),
    );
  }
}

在这个示例中,我们创建了一个简单的Flutter应用,其中包含一个文本字段和一个按钮。用户可以在文本字段中输入值,该值将被存储到本地存储中。当用户点击“Retrieve Value”按钮时,应用将从本地存储中读取该值并显示在页面上。

  • FlutterSecureStorage() 实例用于访问本地存储。
  • storage.write(key: 'my_key', value: value) 方法用于将值存储到本地存储中,其中key是存储项的键,value是要存储的值。
  • storage.read(key: 'my_key') 方法用于从本地存储中读取与指定键相关联的值。

请注意,flutter_secure_storage插件提供的是安全的存储,适用于存储敏感信息,如API密钥、用户凭证等。如果你只需要简单的键值存储而不涉及敏感信息,你也可以考虑使用shared_preferences插件。不过,根据原始帖子的要求,这里我们专注于flutter_secure_storage的使用。

回到顶部