Flutter本地存储插件cross_local_storage的使用

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

Flutter本地存储插件cross_local_storage的使用

cross_local_storage简介

cross_local_storage 是一个用于Flutter项目的插件,它包装了不同平台上的本地存储解决方案:

  • iOS 和 macOS 上的 NSUserDefaults
  • Android 上的 SharedPreferences
  • Web 上的 LocalStorage
  • Windows 和 Linux 上的 JSON 文件

这些存储方式为简单数据提供了持久化存储,并且数据会异步地写入磁盘。需要注意的是,由于平台限制,无法保证所有写操作都能成功持久化到磁盘,因此该插件不适合用来保存关键性数据。

开始使用

要在项目中使用此插件,请先在 pubspec.yaml 文件中添加依赖:

dependencies:
  cross_local_storage: ^1.1.0

或者通过Git直接引用最新版本:

dependencies:
  cross_local_storage:
    git:
      url: https://github.com/marchdev-tk/cross_local_storage

接着,在您的Dart文件顶部导入插件:

import 'package:cross_local_storage/cross_local_storage.dart';

示例代码

下面是一个完整的示例应用,展示了如何使用cross_local_storage进行基本的操作,如设置、获取和清除键值对。

// Copyright (c) 2023, Your Company. Please see the AUTHORS file for details. All rights reserved. Use of this source code is governed by a BSD-style license that can be found in the LICENSE file.

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

void main() {
  WidgetsFlutterBinding.ensureInitialized();
  runApp(const MyApp());
}

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

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Local Storage Example',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: const MyHomePage(),
    );
  }
}

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

  @override
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  final _sharedPrefController = TextEditingController();

  late LocalStorageInterface _localStorage;
  String _prefStatus = '';

  void _initLocalStorage() async {
    _localStorage = await LocalStorage.getInstance();
  }

  @override
  void initState() {
    super.initState();
    _initLocalStorage();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('Local Storage Example'),
      ),
      body: Column(
        crossAxisAlignment: CrossAxisAlignment.stretch,
        mainAxisAlignment: MainAxisAlignment.center,
        children: <Widget>[
          Center(
            child: ConstrainedBox(
              constraints: const BoxConstraints(maxWidth: 300),
              child: TextField(
                controller: _sharedPrefController,
                decoration: const InputDecoration(
                  border: OutlineInputBorder(),
                  hintText: 'Type something to store...',
                ),
              ),
            ),
          ),
          const SizedBox(height: 12),
          Center(
            child: ElevatedButton(
              onPressed: () async {
                final result = await _localStorage.setString('value', _sharedPrefController.text);
                setState(() => _prefStatus = result
                    ? 'Successfully added to the Shared Prefs'
                    : 'Error occurred while adding to the Shared Prefs');
              },
              child: const Text('Add to shared prefs'),
            ),
          ),
          const SizedBox(height: 12),
          Center(
            child: ElevatedButton(
              onPressed: () {
                final result = _localStorage.getString('value');
                setState(() =>
                    _prefStatus = 'Retrieved value from Shared Prefs: $result');
              },
              child: const Text('Get from shared prefs'),
            ),
          ),
          const SizedBox(height: 12),
          Center(
            child: ElevatedButton(
              onPressed: () {
                _localStorage.clear();
                setState(() => _prefStatus = 'Cleared Shared Prefs');
              },
              child: const Text('Clear shared prefs'),
            ),
          ),
          const SizedBox(height: 12),
          Center(child: Text(_prefStatus)),
        ],
      ),
    );
  }
}

这个应用程序提供了一个简单的界面,用户可以在其中输入文本并将其保存到本地存储中。此外,还可以从本地存储中检索已保存的文本或清除所有存储的数据。通过这种方式,您可以轻松测试cross_local_storage的功能。

如果您有任何问题或需要更多帮助,请随时查阅 GitHub仓库 中的文档或提交issue。


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

1 回复

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


当然,下面是一个关于如何在Flutter应用中使用cross_local_storage插件进行本地存储的示例代码。这个插件允许你以键值对的形式在本地存储数据,非常适用于简单的数据持久化需求。

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

dependencies:
  flutter:
    sdk: flutter
  cross_local_storage: ^2.0.0  # 请确保使用最新版本

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

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

  1. 导入插件

在你的Dart文件中导入cross_local_storage

import 'package:cross_local_storage/cross_local_storage.dart';
  1. 初始化存储

通常你会在应用启动时初始化存储。这里假设你有一个全局的存储实例:

class AppStorage {
  static CrossLocalStorage? _storage;

  static Future<CrossLocalStorage> getInstance() async {
    if (_storage == null) {
      _storage = await CrossLocalStorage.builder();
    }
    return _storage!;
  }
}
  1. 存储数据

你可以使用setItem方法来存储数据。例如,存储一个字符串:

void saveStringToStorage(String key, String value) async {
  final storage = await AppStorage.getInstance();
  await storage.setItem(key, value);
}
  1. 读取数据

使用getItem方法来读取存储的数据。如果键不存在,该方法会返回null

Future<String?> readStringFromStorage(String key) async {
  final storage = await AppStorage.getInstance();
  return await storage.getItem<String>(key);
}
  1. 删除数据

使用removeItem方法来删除存储的数据:

void removeItemFromStorage(String key) async {
  final storage = await AppStorage.getInstance();
  await storage.removeItem(key);
}
  1. 清空存储

使用clear方法来清空所有存储的数据:

void clearStorage() async {
  final storage = await AppStorage.getInstance();
  await storage.clear();
}
  1. 使用示例

在你的Flutter应用中,你可以像这样使用上述方法:

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

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  @override
  void initState() {
    super.initState();
    // 保存数据到存储
    saveStringToStorage('myKey', 'Hello, World!').then((_) {
      // 读取数据
      readStringFromStorage('myKey').then((value) {
        print('Retrieved value: $value');
        
        // 删除数据
        removeItemFromStorage('myKey').then((_) {
          print('Item removed');
          
          // 清空存储
          clearStorage().then((_) {
            print('Storage cleared');
          });
        });
      });
    });
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Flutter Local Storage Example'),
        ),
        body: Center(
          child: Text('Check the console for storage operations results'),
        ),
      ),
    );
  }
}

请注意,这个示例中的initState方法中的异步操作是为了演示目的,在实际应用中,你可能希望将这些操作放在用户交互事件(如按钮点击)中,或者使用FutureBuilder来构建UI以处理异步操作的结果。

希望这能帮助你理解如何在Flutter应用中使用cross_local_storage插件进行本地存储。

回到顶部