面试题答案
一键面试- 添加依赖:
在
pubspec.yaml
文件中添加shared_preferences
依赖:
然后运行dependencies: shared_preferences: ^2.0.15
flutter pub get
下载依赖。 - 存储数据:
- 导入包:
import 'package:shared_preferences/shared_preferences.dart';
- 异步存储数据,例如存储用户设置的主题模式:
Future<void> saveThemeMode(String themeMode) async { final prefs = await SharedPreferences.getInstance(); await prefs.setString('theme_mode', themeMode); }
- 导入包:
- 读取数据:
- 同样导入包后,异步读取数据:
Future<String?> getThemeMode() async { final prefs = await SharedPreferences.getInstance(); return prefs.getString('theme_mode'); }
- 同样导入包后,异步读取数据:
- 在不同页面读取和更新数据并确保一致性:
- 读取:
在不同页面,只要导入
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
读取数据的方法依然可以获取到之前存储的用户设置,从而保持不变。
- 读取:
在不同页面,只要导入