Flutter中无需硬编码如何向SharedPreferences添加固定配置项?
可行实现方案
核心思路是把所有硬编码的存储key、固定配置值收拢到统一配置类管理,再封装SharedPreferences操作工具类,完全隔离业务层和底层存储逻辑,避免零散硬编码。
- 第一步:定义配置常量类,统一维护存储key和固定预设值
class SpConfig { // 存储key常量,禁止业务层直接使用字面量key static const String tokenKey = 'token'; static const String apiUsernameKey = 'api_username'; static const String apiPasswordKey = 'api_password'; // 固定不变的API账号统一管理,多环境下也可以在这里做环境区分 static const String fixedApiUsername = 'official_api_user'; static const String fixedApiPassword = 'official_api_pass123'; }
- 第二步:封装SharedPreferences工具类,收拢所有读写逻辑
import 'package:flutter/material.dart'; import 'package:shared_preferences/shared_preferences.dart'; class SpUtil { static SharedPreferences? _instance; // 提前初始化,建议在main函数中执行 static Future<void> init() async { _instance = await SharedPreferences.getInstance(); } // Token读写封装 static String? getToken() => _instance?.getString(SpConfig.tokenKey); static Future<bool?> saveToken(String token) => _instance?.setString(SpConfig.tokenKey, token); // 固定API账号写入封装,业务层直接调用即可,不需要传入key和值 static Future<void> saveFixedApiAccount() async { await _instance?.setString(SpConfig.apiUsernameKey, SpConfig.fixedApiUsername); await _instance?.setString(SpConfig.apiPasswordKey, SpConfig.fixedApiPassword); } // API账号读取封装 static String? getApiUsername() => _instance?.getString(SpConfig.apiUsernameKey); static String? getApiPassword() => _instance?.getString(SpConfig.apiPasswordKey); }
- 第三步:实际使用示例
// main函数初始化 void main() async { WidgetsFlutterBinding.ensureInitialized(); await SpUtil.init(); // 启动时写入固定API账号,也可以按需在指定时机调用 await SpUtil.saveFixedApiAccount(); runApp(const MyApp()); } // 业务层读取数据,完全不需要关心底层存储逻辑和key定义 void fetchApi() { String? token = SpUtil.getToken(); String? apiUser = SpUtil.getApiUsername(); String? apiPwd = SpUtil.getApiPassword(); // 后续接口请求逻辑 }
该方案的优势是后续如果需要修改存储key、调整固定账号值,只需要修改SpConfig一个文件即可,不需要修改所有调用的业务代码,也不会出现key写错、值不一致的问题。
内容的提问来源于stack exchange,提问作者OguzKaanAkyalcin
相关产品推荐
相关产品推荐

