Flutter教程本地存储SharedPreferences的使用

如何在Flutter中使用SharedPreferences实现本地数据存储?具体步骤是什么?我需要存储用户登录信息和应用设置,但不太清楚初始化、读写操作和删除数据的具体方法。能否提供一个完整的代码示例?另外,SharedPreferences存储的数据类型有哪些限制?会不会对性能有影响?

3 回复

在Flutter中使用SharedPreferences进行本地存储非常简单。首先需要在pubspec.yaml中添加依赖:

dependencies:
  flutter:
    sdk: flutter
  shared_preferences: ^2.0.6

然后运行flutter pub get

基本使用步骤如下:

  1. 导入包:
import 'package:shared_preferences/shared_preferences.dart';
  1. 写数据:
void saveData() async {
  SharedPreferences prefs = await SharedPreferences.getInstance();
  await prefs.setString('name', '张三');
  await prefs.setInt('age', 25);
  print('保存成功');
}
  1. 读取数据:
void readData() async {
  SharedPreferences prefs = await SharedPreferences.getInstance();
  String? name = prefs.getString('name');
  int? age = prefs.getInt('age');
  print('名字: $name, 年龄: $age');
}
  1. 删除数据:
void removeData() async {
  SharedPreferences prefs = await SharedPreferences.getInstance();
  prefs.remove('name');
  print('删除成功');
}

注意:SharedPreferences适合存储少量简单的数据,如配置信息等,不适合存储大量或复杂的数据结构。

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


在Flutter中使用SharedPreferences进行本地存储非常简单。首先,确保在pubspec.yaml文件中添加依赖:

dependencies:
  flutter:
    sdk: flutter
  shared_preferences: ^2.0.6

保存后运行flutter pub get

使用步骤如下:

  1. 导入库:import 'package:shared_preferences/shared_preferences.dart';
  2. 获取实例:调用SharedPreferences.getInstance()
  3. 写入数据:如prefs.setString('key', 'value')
  4. 读取数据:如String value = prefs.getString('key') ?? 'default';
  5. 清除数据:调用prefs.clear()

示例代码:

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

void main() => runApp(MyApp());

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

class Home extends StatefulWidget {
  @override
  _HomeState createState() => _HomeState();
}

class _HomeState extends State<Home> {
  String data = '';

  void saveData() async {
    SharedPreferences prefs = await SharedPreferences.getInstance();
    prefs.setString('myKey', 'Hello Shared Preferences');
  }

  void loadData() async {
    SharedPreferences prefs = await SharedPreferences.getInstance();
    setState(() {
      data = prefs.getString('myKey') ?? 'No Data';
    });
  }

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

记得处理异步操作,并根据需要选择合适的数据类型(如setInt, setBool等)。

Flutter本地存储:SharedPreferences使用教程

SharedPreferences是Flutter中用于存储简单键值对的轻量级存储方案,适合存储小型数据如用户设置、应用配置等。

基本使用步骤

  1. 添加依赖(在pubspec.yaml中):
dependencies:
  shared_preferences: ^2.2.2
  1. 获取SharedPreferences实例
final prefs = await SharedPreferences.getInstance();
  1. 存储数据
// 存储不同类型的数据
await prefs.setInt('counter', 10); // 整型
await prefs.setBool('isDarkMode', true); // 布尔值
await prefs.setDouble('price', 9.99); // 浮点
await prefs.setString('username', 'John'); // 字符串
await prefs.setStringList('favorites', ['apple', 'banana']); // 字符串列表
  1. 读取数据
final counter = prefs.getInt('counter') ?? 0; // 默认值0
final isDarkMode = prefs.getBool('isDarkMode') ?? false; // 默认false
final username = prefs.getString('username'); // 可能为null
  1. 删除数据
await prefs.remove('counter'); // 删除单个键
await prefs.clear(); // 清除所有数据

完整示例代码

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

void main() => runApp(MyApp());

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

class CounterPage extends StatefulWidget {
  @override
  _CounterPageState createState() => _CounterPageState();
}

class _CounterPageState extends State<CounterPage> {
  int _counter = 0;

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

  _loadCounter() async {
    final prefs = await SharedPreferences.getInstance();
    setState(() {
      _counter = prefs.getInt('counter') ?? 0;
    });
  }

  _incrementCounter() async {
    final prefs = await SharedPreferences.getInstance();
    setState(() {
      _counter = (prefs.getInt('counter') ?? 0) + 1;
      prefs.setInt('counter', _counter);
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text('SharedPreferences Demo')),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text('Counter value: $_counter'),
            ElevatedButton(
              onPressed: _incrementCounter,
              child: Text('Increment'),
            ),
          ],
        ),
      ),
    );
  }
}

SharedPreferences操作是异步的,记得使用await等待操作完成。对于更复杂的数据结构,建议使用其他存储方案如sqflite或Hive。

回到顶部