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

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

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

简介

simple_shared_preferences 是一个用于Flutter项目的简单包装器,它基于 shared_preferences 插件。该插件支持以下数据类型:intdoubleboolStringList<String>

平台支持

平台 支持版本
Android SDK 16+
iOS 9.0+
Linux 任意
macOS 10.11+
Web 任意
Windows 任意

使用方法

要使用此插件,请在 pubspec.yaml 文件中添加 simple_shared_preferences 作为依赖项。

dependencies:
  flutter:
    sdk: flutter
  simple_shared_preferences: ^latest_version

示例代码

以下是一个完整的示例应用程序,展示了如何使用 simple_shared_preferences 插件来存储和读取计数器的值。

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

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

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'SimpleSharedPreferences Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: const SimpleSharedPreferencesDemo(
        title: 'SimpleSharedPreferences Demo Page',
      ),
    );
  }
}

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

  final String title;

  @override
  State<SimpleSharedPreferencesDemo> createState() => _SimpleSharedPreferencesDemoState();
}

class _SimpleSharedPreferencesDemoState extends State<SimpleSharedPreferencesDemo> {
  // 获取 SimpleSharedPreferences 实例
  final Future<SimpleSharedPreferences> _preferences = SimpleSharedPreferences.getInstance();
  late Future<int> _counter;

  // 增加计数器的值
  Future<void> _incrementCounter() async {
    final SimpleSharedPreferences preferences = await _preferences;
    final int counter = (preferences.get('counter') ?? 0) + 1;

    setState(() {
      // 更新计数器并保存到本地存储
      _counter = preferences.set('counter', counter).then((_) => counter);
    });
  }

  @override
  void initState() {
    super.initState();
    // 初始化计数器的值
    _counter = _preferences.then((SimpleSharedPreferences preferences) {
      return preferences.get('counter') ?? 0;
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Center(
        child: FutureBuilder<int>(
          future: _counter,
          builder: (BuildContext context, AsyncSnapshot<int> 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}'); // 发生错误时显示错误信息
                }
                return Text(
                  'You have pushed the button this many times: ${snapshot.data}', // 显示计数器的值
                  style: Theme.of(context).textTheme.headline4,
                );
            }
          },
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: _incrementCounter, // 点击按钮增加计数器
        tooltip: 'Increment',
        child: const Icon(Icons.add),
      ),
    );
  }
}

API 使用示例

写入数据
// 获取 SimpleSharedPreferences 实例
final simplePreference = await SimpleSharedPreferences.getInstance();

// 保存整数值到 'counter' 键
await simplePreference.setValue<int>('counter', 10);

// 保存布尔值到 'repeat' 键
await simplePreference.setValue<bool>('repeat', true);

// 保存浮点数值到 'decimal' 键
await simplePreference.setValue<double>('decimal', 1.5);

// 保存字符串值到 'action' 键
await simplePreference.setValue<String>('action', 'Start');

// 保存字符串列表到 'items' 键
await simplePreference.setValue<List<String>>('items', <String>['Earth', 'Moon', 'Sun']);

// 保存 Map 到 'map' 键
await simplePreference.setValue<Map<String, dynamic>>('map', <String, dynamic>{
  'name': 'simple shared preferences',
  'age': 1,
  'isDeveloper': true,
  'height': 1.75,
  'list': [1, 2, 3],
});
读取数据
// 尝试从 'counter' 键读取整数值,如果不存在则返回 null
final int? counter = simplePreference.getValue<int>('counter');

// 尝试从 'repeat' 键读取布尔值,如果不存在则返回 null
final bool? repeat = simplePreference.getValue<bool>('repeat');

// 尝试从 'decimal' 键读取浮点数值,如果不存在则返回 null
final double? decimal = simplePreference.getValue<double>('decimal');

// 尝试从 'action' 键读取字符串值,如果不存在则返回 null
final String? action = simplePreference.getValue<String>('action');

// 尝试从 'items' 键读取字符串列表,如果不存在则返回 null
final List<String>? items = simplePreference.getValue<List<String>>('items');

// 尝试从 'map' 键读取 Map,如果不存在则返回 null
final Map<String, dynamic>? map = simplePreference.getValue<Map<String, dynamic>>('map');
删除数据
// 删除 'counter' 键的数据
final success = await simplePreference.remove('counter');

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

1 回复

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


当然,以下是如何在Flutter项目中使用simple_shared_preferences插件进行本地数据存储的示例代码。

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  simple_shared_preferences: ^2.0.0  # 请检查最新版本号

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

2. 导入包

在你的Dart文件中导入simple_shared_preferences包:

import 'package:simple_shared_preferences/simple_shared_preferences.dart';

3. 初始化SharedPreferences实例

在你的应用启动时(例如在main.dart中的MyApp类的initState方法中),初始化SharedPreferences实例:

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

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  final prefs = await SimpleSharedPreferences.getInstance();
  runApp(MyApp(prefs: prefs));
}

class MyApp extends StatelessWidget {
  final SimpleSharedPreferences prefs;

  MyApp({required this.prefs});

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

4. 使用SharedPreferences进行数据存储和读取

在你的主屏幕或任何需要的地方使用SharedPreferences进行数据存储和读取:

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

class HomeScreen extends StatefulWidget {
  final SimpleSharedPreferences prefs;

  HomeScreen({required this.prefs});

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

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

  void _saveData() async {
    if (_formKey.currentState!.validate()) {
      _formKey.currentState!.save();
      await widget.prefs.setString('name', _name!);
      ScaffoldMessenger.of(context).showSnackBar(
        SnackBar(content: Text('Data saved')),
      );
    }
  }

  void _loadData() async {
    setState(() {
      _name = await widget.prefs.getString('name') ?? '';
    });
  }

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

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text('SharedPreferences Demo')),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Form(
          key: _formKey,
          child: Column(
            crossAxisAlignment: CrossAxisAlignment.start,
            children: [
              TextFormField(
                decoration: InputDecoration(labelText: 'Name'),
                validator: (value) {
                  if (value == null || value.isEmpty) {
                    return 'Please enter a name';
                  }
                  return null;
                },
                onSaved: (value) {
                  _name = value;
                },
              ),
              SizedBox(height: 20),
              ElevatedButton(
                onPressed: _saveData,
                child: Text('Save'),
              ),
              SizedBox(height: 20),
              Text('Loaded Name: $_name'),
            ],
          ),
        ),
      ),
    );
  }
}

总结

以上代码展示了如何在Flutter项目中使用simple_shared_preferences插件进行本地数据存储和读取。包括如何添加依赖、初始化实例、保存数据和加载数据。注意在实际项目中,你可能需要在合适的地方(例如用户登录或应用启动时)进行数据的加载,以及在数据变化时进行相应的UI更新。

回到顶部