Flutter本地数据存储插件shared_prefs的使用
Flutter本地数据存储插件shared_prefs的使用
在Flutter开发中,shared_preferences 是一个非常常用的插件,用于存储简单的键值对数据。它可以将数据保存到设备的共享偏好设置中,适合存储一些简单的配置信息或用户偏好设置。
添加依赖
首先,在 pubspec.yaml 文件中添加 shared_preferences 依赖:
dependencies:
  flutter:
    sdk: flutter
  shared_preferences: ^2.0.15 # 确保版本是最新的
然后运行以下命令以安装依赖:
flutter pub get
使用示例
下面是一个完整的示例,演示如何使用 shared_preferences 来存储和读取数据。
1. 导入库
在需要使用的文件中导入 shared_preferences 库:
import 'package:shared_preferences/shared_preferences.dart';
2. 存储数据
我们可以使用 SharedPreferences 类来存储数据。例如,存储一个布尔值、字符串和整数值。
void saveData() async {
  // 获取 SharedPreferences 实例
  SharedPreferences prefs = await SharedPreferences.getInstance();
  // 存储布尔值
  await prefs.setBool('isUserLoggedIn', true);
  // 存储字符串
  await prefs.setString('username', 'JohnDoe');
  // 存储整数
  await prefs.setInt('age', 25);
}
3. 读取数据
从 SharedPreferences 中读取之前存储的数据:
Future<void> loadData() async {
  // 获取 SharedPreferences 实例
  SharedPreferences prefs = await SharedPreferences.getInstance();
  // 读取布尔值
  bool isUserLoggedIn = prefs.getBool('isUserLoggedIn') ?? false;
  // 读取字符串
  String username = prefs.getString('username') ?? 'Unknown';
  // 读取整数
  int age = prefs.getInt('age') ?? 0;
  print('是否登录: $isUserLoggedIn');
  print('用户名: $username');
  print('年龄: $age');
}
4. 删除数据
如果需要删除某个键值对,可以使用 remove 方法:
void removeData() async {
  SharedPreferences prefs = await SharedPreferences.getInstance();
  prefs.remove('isUserLoggedIn'); // 删除布尔值
  prefs.remove('username');       // 删除字符串
  prefs.remove('age');           // 删除整数
}
完整示例代码
import 'package:flutter/material.dart';
import 'package:shared_preferences/shared_preferences.dart';
void main() {
  runApp(MyApp());
}
class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: SharedPrefsExample(),
    );
  }
}
class SharedPrefsExample extends StatefulWidget {
  [@override](/user/override)
  _SharedPrefsExampleState createState() => _SharedPrefsExampleState();
}
class _SharedPrefsExampleState extends State<SharedPrefsExample> {
  bool _isLoggedIn = false;
  String _username = '';
  int _age = 0;
  [@override](/user/override)
  void initState() {
    super.initState();
    _loadUserData();
  }
  Future<void> _loadUserData() async {
    SharedPreferences prefs = await SharedPreferences.getInstance();
    setState(() {
      _isLoggedIn = prefs.getBool('isUserLoggedIn') ?? false;
      _username = prefs.getString('username') ?? 'Unknown';
      _age = prefs.getInt('age') ?? 0;
    });
  }
  Future<void> _saveData() async {
    SharedPreferences prefs = await SharedPreferences.getInstance();
    await prefs.setBool('isUserLoggedIn', _isLoggedIn);
    await prefs.setString('username', _username);
    await prefs.setInt('age', _age);
    ScaffoldMessenger.of(context).showSnackBar(SnackBar(content: Text('数据已保存')));
  }
  Future<void> _clearData() async {
    SharedPreferences prefs = await SharedPreferences.getInstance();
    prefs.clear();
    setState(() {
      _isLoggedIn = false;
      _username = 'Unknown';
      _age = 0;
    });
    ScaffoldMessenger.of(context).showSnackBar(SnackBar(content: Text('数据已清除')));
  }
  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('SharedPreferences 示例'),
      ),
      body: Padding(
        padding: const EdgeInsets.all(16.0),
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.start,
          children: [
            TextField(
              decoration: InputDecoration(labelText: '用户名'),
              onChanged: (value) => setState(() => _username = value),
            ),
            SizedBox(height: 10),
            TextField(
              keyboardType: TextInputType.number,
              decoration: InputDecoration(labelText: '年龄'),
              onChanged: (value) => setState(() => _age = int.tryParse(value) ?? 0),
            ),
            SizedBox(height: 10),
            Row(
              mainAxisAlignment: MainAxisAlignment.spaceBetween,
              children: [
                ElevatedButton(
                  onPressed: _saveData,
                  child: Text('保存数据'),
                ),
                ElevatedButton(
                  onPressed: _clearData,
                  child: Text('清除数据'),
                ),
              ],
            ),
            SizedBox(height: 20),
            Text('是否登录: $_isLoggedIn'),
            Text('用户名: $_username'),
            Text('年龄: $_age'),
          ],
        ),
      ),
    );
  }
}
更多关于Flutter本地数据存储插件shared_prefs的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter本地数据存储插件shared_prefs的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
在 Flutter 中,shared_preferences 是一个非常常用的插件,用于在本地存储简单的键值对数据。它可以用来存储一些轻量级的数据,比如用户偏好设置、登录状态等。下面是如何使用 shared_preferences 插件的详细步骤。
1. 添加依赖
首先,你需要在 pubspec.yaml 文件中添加 shared_preferences 插件的依赖。
dependencies:
  flutter:
    sdk: flutter
  shared_preferences: ^2.0.6
然后运行 flutter pub get 来安装依赖。
2. 导入插件
在你的 Dart 文件中导入 shared_preferences 插件。
import 'package:shared_preferences/shared_preferences.dart';
3. 使用 SharedPreferences
SharedPreferences 是一个单例对象,你可以通过 SharedPreferences.getInstance() 获取它的实例。
存储数据
你可以使用以下方法来存储不同类型的数据:
- setBool(String key, bool value)
- setInt(String key, int value)
- setDouble(String key, double value)
- setString(String key, String value)
- setStringList(String key, List<String> value)
Future<void> saveData() async {
  SharedPreferences prefs = await SharedPreferences.getInstance();
  await prefs.setInt('counter', 10);
  await prefs.setString('name', 'John Doe');
  await prefs.setBool('isLoggedIn', true);
}
读取数据
你可以使用以下方法来读取存储的数据:
- getBool(String key)
- getInt(String key)
- getDouble(String key)
- getString(String key)
- getStringList(String key)
Future<void> readData() async {
  SharedPreferences prefs = await SharedPreferences.getInstance();
  int? counter = prefs.getInt('counter');
  String? name = prefs.getString('name');
  bool? isLoggedIn = prefs.getBool('isLoggedIn');
  print('Counter: $counter');
  print('Name: $name');
  print('Is Logged In: $isLoggedIn');
}
删除数据
你可以使用 remove(String key) 方法来删除某个键值对。
Future<void> removeData() async {
  SharedPreferences prefs = await SharedPreferences.getInstance();
  await prefs.remove('counter');
}
清除所有数据
你可以使用 clear() 方法来清除所有存储的数据。
Future<void> clearData() async {
  SharedPreferences prefs = await SharedPreferences.getInstance();
  await prefs.clear();
}
4. 示例代码
以下是一个完整的示例,展示了如何使用 shared_preferences 来存储和读取数据。
import 'package:flutter/material.dart';
import 'package:shared_preferences/shared_preferences.dart';
void main() {
  runApp(MyApp());
}
class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: SharedPreferencesExample(),
    );
  }
}
class SharedPreferencesExample extends StatefulWidget {
  [@override](/user/override)
  _SharedPreferencesExampleState createState() => _SharedPreferencesExampleState();
}
class _SharedPreferencesExampleState extends State<SharedPreferencesExample> {
  int _counter = 0;
  [@override](/user/override)
  void initState() {
    super.initState();
    _loadCounter();
  }
  Future<void> _loadCounter() async {
    SharedPreferences prefs = await SharedPreferences.getInstance();
    setState(() {
      _counter = prefs.getInt('counter') ?? 0;
    });
  }
  Future<void> _incrementCounter() async {
    SharedPreferences prefs = await SharedPreferences.getInstance();
    setState(() {
      _counter = (prefs.getInt('counter') ?? 0) + 1;
      prefs.setInt('counter', _counter);
    });
  }
  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('SharedPreferences Example'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(
              'You have pushed the button this many times:',
            ),
            Text(
              '$_counter',
              style: Theme.of(context).textTheme.headline4,
            ),
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: _incrementCounter,
        tooltip: 'Increment',
        child: Icon(Icons.add),
      ),
    );
  }
} 
        
       
             
             
            

