Flutter本地数据存储插件stash_shared_preferences的使用

Flutter本地数据存储插件stash_shared_preferences的使用

stash_shared_preferences

stash_shared_preferences 是一个基于 stash 的存储扩展,提供了 shared_preferences 的存储功能。




概述

这个存储扩展为 stash 提供了一个基于 shared_preferences 的存储方式。

开始使用

pubspec.yaml 文件中添加以下依赖(或创建此文件),并将 x.x.x 替换为最新的 stash_shared_preferences 版本:

dependencies:
    stash_shared_preferences: ^x.x.x

运行以下命令安装依赖:

flutter pub get

最后,在项目中导入库:

import 'package:stash/stash_api.dart';
import 'package:stash_shared_preferences/stash_shared_preferences.dart';

使用示例

下面的示例展示了如何使用 stash_shared_preferences 创建一个存储 vault,并进行基本的数据操作。

import 'package:flutter/material.dart';
import 'package:intl/intl.dart';
import 'package:stash/stash_api.dart';
import 'package:stash_shared_preferences/stash_shared_preferences.dart';

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

// 定义一个简单的数据模型
class Counter {
  final int value;
  final DateTime updateTime;

  Counter({required this.value, required this.updateTime});

  // 从JSON映射创建Counter对象
  factory Counter.fromJson(Map<String, dynamic> json) => Counter(
        value: json['value'] as int,
        updateTime: DateTime.parse(json['timestamp'] as String),
      );

  // 将Counter对象转换为JSON映射
  Map<String, dynamic> toJson() => {
        'value': value,
        'timestamp': updateTime.toIso8601String(),
      };
}

// 主应用类
class MyApp extends StatelessWidget {
  const MyApp({super.key});

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Stash Shared Preferences Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: const SharedPreferencesDemo(),
    );
  }
}

// 存储示例
class SharedPreferencesDemo extends StatefulWidget {
  const SharedPreferencesDemo({super.key});

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

class SharedPreferencesDemoState extends State<SharedPreferencesDemo> {
  // 创建一个新的共享偏好存储
  final Future<Vault<Counter>> _vault = newSharedPreferencesVaultStore().then(
      (store) => store.vault<Counter>(
            name: 'vault',
            fromEncodable: (json) => Counter.fromJson(json),
          ));

  late Future<Counter> _counter;

  // 获取计数器值
  Future<Counter> _getCounter([Vault<Counter>? vault]) {
    final v = vault == null ? _vault : Future.value(vault);

    return v.then((vault) => vault.get('counter')).then(
        (counter) => counter ?? Counter(value: 0, updateTime: DateTime.now()));
  }

  // 增加计数器值
  Future<void> _incrementCounter() async {
    final Vault<Counter> vault = await _vault;
    final Counter currentCounter = await _getCounter(vault);

    setState(() {
      final newCounter =
          Counter(value: currentCounter.value + 1, updateTime: DateTime.now());
      _counter = vault.put('counter', newCounter).then((value) => newCounter);
    });
  }

  [@override](/user/override)
  void initState() {
    super.initState();
    _counter = _getCounter();
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('SharedPreferences Demo'),
      ),
      body: Center(
        child: FutureBuilder<Counter>(
          future: _counter,
          builder: (BuildContext context, AsyncSnapshot<Counter> snapshot) {
            switch (snapshot.connectionState) {
              case ConnectionState.none:
              case ConnectionState.waiting:
                return const CircularProgressIndicator();
              case ConnectionState.active:
              case ConnectionState.done:
                if (snapshot.hasError) {
                  return Text('Error: ${snapshot.error}');
                } else {
                  final count = snapshot.data?.value ?? 0;
                  final updateTime = snapshot.data?.updateTime;
                  final lastPressed = updateTime != null
                      ? ' (last pressed on ${DateFormat('dd-MM-yyyy HH:mm:ss').format(updateTime)})'
                      : '';
                  return Text(
                    'Button tapped $count time${count == 1 ? '' : 's'}.\n\n'
                    'This should persist across restarts$lastPressed.',
                  );
                }
            }
          },
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: _incrementCounter,
        tooltip: 'Increment',
        child: const Icon(Icons.add),
      ),
    );
  }
}

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

1 回复

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


当然,下面是一个关于如何在Flutter项目中使用stash_shared_preferences插件进行本地数据存储的示例代码。stash_shared_preferences是一个用于Flutter的本地存储插件,它结合了stash库的功能和shared_preferences的易用性。

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  stash: ^3.0.0  # 请检查最新版本号
  stash_shared_preferences: ^3.0.0  # 请检查最新版本号
  shared_preferences: ^2.0.15  # stash_shared_preferences依赖于shared_preferences

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

2. 初始化并存储数据

在你的Flutter应用中,你可以使用以下代码来初始化stash_shared_preferences并存储一些数据:

import 'package:flutter/material.dart';
import 'package:stash/stash_api.dart';
import 'package:stash_shared_preferences/stash_shared_preferences.dart';
import 'package:shared_preferences/shared_preferences.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  
  // 初始化SharedPreferences
  final SharedPreferences sharedPreferences = await SharedPreferences.getInstance();

  // 创建CacheManager并配置为使用SharedPreferences作为存储
  final CacheManager cacheManager = CacheManager(
    config: CacheConfig(
      storage: SharedPreferencesStorage(sharedPreferences),
    ),
  );

  // 存储一些数据
  await cacheManager.write('key1', 'value1');
  await cacheManager.write('key2', 42);

  runApp(MyApp(cacheManager: cacheManager));
}

class MyApp extends StatelessWidget {
  final CacheManager cacheManager;

  MyApp({required this.cacheManager});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('stash_shared_preferences Example'),
        ),
        body: Center(
          child: ElevatedButton(
            onPressed: () async {
              // 读取数据
              final String? value1 = await cacheManager.read<String>('key1');
              final int? value2 = await cacheManager.read<int>('key2');

              print('key1: $value1');
              print('key2: $value2');
            },
            child: Text('Read Data'),
          ),
        ),
      ),
    );
  }
}

3. 运行应用

将上述代码添加到你的Flutter项目中,并运行应用。当你点击按钮时,它将从SharedPreferences中读取之前存储的数据并打印到控制台。

注意事项

  • 确保在调用任何stash_shared_preferencesshared_preferences相关功能之前,SharedPreferences实例已经被正确初始化。
  • stash库提供了丰富的缓存策略和功能,你可以根据需要进一步配置和使用。
  • 在实际项目中,可能需要对错误处理和缓存的过期策略进行更细致的管理。

这个示例展示了基本的存储和读取操作,但stash库提供了更多的功能,如缓存失效策略、内存缓存、磁盘缓存等,可以根据你的需求进行进一步配置和使用。

回到顶部