Flutter扩展数据类型存储插件shared_preferences_moretypes的使用

Flutter扩展数据类型存储插件shared_preferences_moretypes的使用

shared_preferences_moretypes 是一个扩展了 SharedPreferences 功能的插件,允许你存储和加载更多数据类型。

支持的数据类型

  • String
  • int
  • bool
  • double
  • 递归列表(例如 <List<double>>, <List<double<List<double>>>> 等)
  • 递归映射(例如 <Map<String, String>>, <Map<String, Map<int, String>>> 等)

使用方法

安装插件

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

dependencies:
  shared_preferences_moretypes: ^版本号

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

保存数据

使用 ExtendedPrefs 类来保存数据。以下是一个简单的示例:

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

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  
  // 初始化插件
  await ExtendedPrefs().init();

  // 保存字符串数据
  await ExtendedPrefs().dataStore("keyS", "value");

  // 保存整数数据
  await ExtendedPrefs().dataStore("keyI", 10);

  // 保存布尔值数据
  await ExtendedPrefs().dataStore("keyB", true);

  // 保存双精度浮点数数据
  await ExtendedPrefs().dataStore("keyD", 3.14);

  // 保存列表数据
  await ExtendedPrefs().dataStore("keyL", [1.0, 2.0, 3.0]);

  // 保存映射数据
  await ExtendedPrefs().dataStore("keyM", {"key": "value"});
}

加载数据

同样使用 ExtendedPrefs 类来加载数据。以下是一个简单的示例:

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

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  
  // 初始化插件
  await ExtendedPrefs().init();

  // 加载字符串数据
  String? value = await ExtendedPrefs().dataLoad("keyS", "String");
  print(value); // 输出: value

  // 加载整数数据
  int? intValue = await ExtendedPrefs().dataLoad("keyI", "int");
  print(intValue); // 输出: 10

  // 加载布尔值数据
  bool? boolValue = await ExtendedPrefs().dataLoad("keyB", "bool");
  print(boolValue); // 输出: true

  // 加载双精度浮点数数据
  double? doubleValue = await ExtendedPrefs().dataLoad("keyD", "double");
  print(doubleValue); // 输出: 3.14

  // 加载列表数据
  List<double>? listValue = await ExtendedPrefs().dataLoad("keyL", "List<double>");
  print(listValue); // 输出: [1.0, 2.0, 3.0]

  // 加载映射数据
  Map<String, dynamic>? mapValue = await ExtendedPrefs().dataLoad("keyM", "Map<String, dynamic>");
  print(mapValue); // 输出: {"key": "value"}
}

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

1 回复

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


shared_preferences_moretypes 是一个 Flutter 插件,它扩展了 shared_preferences 插件,允许你存储更多类型的数据,例如 ListMap 和其他复杂数据类型。这个插件通过将复杂数据类型序列化为字符串,然后存储在 SharedPreferences 中来实现这一点。

安装插件

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

dependencies:
  flutter:
    sdk: flutter
  shared_preferences: ^2.0.6
  shared_preferences_moretypes: ^1.0.0

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

使用示例

下面是一个简单的示例,展示如何使用 shared_preferences_moretypes 来存储和读取复杂数据类型。

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

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: HomeScreen(),
    );
  }
}

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

class _HomeScreenState extends State<HomeScreen> {
  late SharedPreferencesMoreTypes prefs;

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

  Future<void> initPrefs() async {
    prefs = await SharedPreferencesMoreTypes.getInstance();
  }

  Future<void> saveData() async {
    // 保存List
    await prefs.setList('myList', ['apple', 'banana', 'cherry']);

    // 保存Map
    await prefs.setMap('myMap', {'name': 'John', 'age': 30});

    // 保存自定义对象
    await prefs.setObject('myObject', MyCustomObject('John', 30));
  }

  Future<void> loadData() async {
    // 读取List
    List<String>? myList = await prefs.getList('myList');
    print('Loaded List: $myList');

    // 读取Map
    Map<String, dynamic>? myMap = await prefs.getMap('myMap');
    print('Loaded Map: $myMap');

    // 读取自定义对象
    MyCustomObject? myObject = await prefs.getObject('myObject', (map) => MyCustomObject.fromMap(map));
    print('Loaded Object: $myObject');
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('SharedPreferences MoreTypes Example'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            ElevatedButton(
              onPressed: saveData,
              child: Text('Save Data'),
            ),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: loadData,
              child: Text('Load Data'),
            ),
          ],
        ),
      ),
    );
  }
}

class MyCustomObject {
  final String name;
  final int age;

  MyCustomObject(this.name, this.age);

  // 从Map转换为对象
  MyCustomObject.fromMap(Map<String, dynamic> map)
      : name = map['name'],
        age = map['age'];

  // 将对象转换为Map
  Map<String, dynamic> toMap() {
    return {
      'name': name,
      'age': age,
    };
  }

  [@override](/user/override)
  String toString() {
    return 'MyCustomObject{name: $name, age: $age}';
  }
}
回到顶部