面试题答案
一键面试1. SharedPreferences
- 原理:SharedPreferences是一个轻量级的本地数据存储方式,它将数据以键值对的形式存储在设备的文件系统中。在Flutter中,通过
shared_preferences
插件来访问和操作这些数据。当StatefulWidget的状态需要持久化时,可以在状态发生变化时将相关数据保存到SharedPreferences中,在Widget重新构建或应用重启时再从SharedPreferences中读取数据来恢复状态。 - 适用场景:适用于保存简单的、少量的数据,如用户设置(如是否开启夜间模式、语言偏好等)、应用的简单配置信息等。这些数据不需要复杂的结构,并且对数据一致性和实时性要求不是特别高的场景。
2. SQLite数据库
- 原理:SQLite是一个嵌入式的关系型数据库,在Flutter中可以通过
sqflite
插件来操作SQLite数据库。StatefulWidget的状态数据可以按照数据库表结构进行组织,将状态信息插入到相应的表中。当需要恢复状态时,通过执行SQL查询语句从数据库中获取数据并重建状态。 - 适用场景:适用于需要保存大量结构化数据,并且对数据的查询、更新、删除等操作有较高要求的场景。例如,一个待办事项应用,需要保存多条任务记录及其详细信息(如任务名称、描述、完成状态等),SQLite数据库可以方便地进行管理和操作这些数据。
3. Provider结合Notifier
- 原理:Provider是一个状态管理库,结合
ChangeNotifier
或ValueNotifier
使用。ChangeNotifier
是一个可观察对象,当状态发生变化时,它会通知依赖该状态的Widget进行重建。状态数据保存在ChangeNotifier
或ValueNotifier
所管理的对象中。通过Provider将这些状态管理对象提供给Widget树中的子Widget,实现状态共享。对于持久化,通常会结合其他存储方式(如SharedPreferences或SQLite),在状态变化时同步更新存储,在应用启动时从存储中读取数据初始化ChangeNotifier
或ValueNotifier
。 - 适用场景:适用于在整个应用中需要跨Widget共享状态,并且希望状态管理与UI解耦的场景。同时,结合持久化存储后,可用于需要在应用关闭再打开时保留状态的情况,比如一个购物车功能,在应用重启后仍保留购物车中的商品信息。
4. Flutter Secure Storage
- 原理:Flutter Secure Storage用于在设备上安全地存储敏感信息。它利用设备的安全机制(如Android上的Keystore或iOS上的Keychain)来加密存储数据。对于StatefulWidget中涉及到敏感信息的状态(如用户登录凭证等),可以使用Flutter Secure Storage进行存储。数据在存储时被加密,读取时需要相应的解密操作。
- 适用场景:专门用于存储敏感信息,如用户密码、身份验证令牌等。确保这些信息在设备上的存储是安全的,防止被恶意获取。