MST

星途 面试题库

面试题:Flutter中如何使用SharedPreferences确保简单数据的一致性存储

在Flutter开发中,描述使用SharedPreferences进行数据存储的步骤,以及如何在不同页面读取和更新数据,确保数据一致性,例如存储用户设置并在应用重启后保持不变。
40.1万 热度难度
前端开发Flutter

知识考点

AI 面试

面试题答案

一键面试
  1. 添加依赖: 在pubspec.yaml文件中添加shared_preferences依赖:
    dependencies:
      shared_preferences: ^2.0.15
    
    然后运行flutter pub get下载依赖。
  2. 存储数据
    • 导入包:
      import 'package:shared_preferences/shared_preferences.dart';
      
    • 异步存储数据,例如存储用户设置的主题模式:
      Future<void> saveThemeMode(String themeMode) async {
        final prefs = await SharedPreferences.getInstance();
        await prefs.setString('theme_mode', themeMode);
      }
      
  3. 读取数据
    • 同样导入包后,异步读取数据:
      Future<String?> getThemeMode() async {
        final prefs = await SharedPreferences.getInstance();
        return prefs.getString('theme_mode');
      }
      
  4. 在不同页面读取和更新数据并确保一致性
    • 读取: 在不同页面,只要导入shared_preferences包,都可以通过上述getThemeMode方法读取数据。例如在一个SettingsPage中:
      class SettingsPage extends StatefulWidget {
        @override
        _SettingsPageState createState() => _SettingsPageState();
      }
      
      class _SettingsPageState extends State<SettingsPage> {
        String? themeMode;
        @override
        void initState() {
          super.initState();
          getThemeMode().then((value) {
            setState(() {
              themeMode = value;
            });
          });
        }
        // 页面构建代码...
      }
      
    • 更新: 当在某个页面更新数据时,例如在SettingsPage中有一个切换主题的按钮,点击按钮更新数据:
      onPressed: () async {
        String newThemeMode = themeMode == 'light'? 'dark' : 'light';
        await saveThemeMode(newThemeMode);
        setState(() {
          themeMode = newThemeMode;
        });
      },
      
    • 确保一致性: 由于SharedPreferences是基于本地存储,并且数据更新是异步的。在更新数据后,为确保不同页面及时获取到最新数据,更新数据后可以通过setState等方式通知页面重新构建,如上述代码中更新主题模式后调用setState。同时,在不同页面读取数据时尽量在initState等合适的生命周期方法中进行异步读取,以保证数据的及时性和一致性。当应用重启后,由于数据存储在本地,通过SharedPreferences读取数据的方法依然可以获取到之前存储的用户设置,从而保持不变。