Flutter中如何在运行时检测平台以实现平台专属存储方案
Flutter跨平台运行时判断平台及存储适配方案
1. 运行时平台判断方法
Flutter官方已经提供了开箱即用的平台判断能力,无需引入第三方依赖:
- 首先导入两个基础包:
import 'package:flutter/foundation.dart' show kIsWeb; import 'dart:io' show Platform; - 核心判断逻辑如下,必须优先判断是否为web环境,否则web端调用
Platform类属性会直接报错:if (kIsWeb) { // 执行网页端适配逻辑 } else { if (Platform.isAndroid || Platform.isIOS) { // 执行APP端逻辑,直接使用flutter_secure_storage即可 } // 按需补充桌面端等其他平台的判断 }
2. 推荐实践:封装统一存储工具类
为了避免业务层重复写平台判断逻辑,建议封装统一的存储工具类,屏蔽底层平台差异,上层业务直接调用统一方法即可:
import 'package:flutter/foundation.dart' show kIsWeb; import 'package:flutter_secure_storage/flutter_secure_storage.dart'; class StorageUtil { // 初始化APP端存储实例 static const FlutterSecureStorage _appStorage = FlutterSecureStorage(); // 写入数据统一接口 static Future<void> setItem(String key, String value) async { if (kIsWeb) { // 此处替换为你自己的web端存储实现,比如localStorage写入逻辑 return; } await _appStorage.write(key: key, value: value); } // 读取数据统一接口 static Future<String?> getItem(String key) async { if (kIsWeb) { // 此处替换为你自己的web端存储读取实现,比如localStorage读取逻辑 return null; } return _appStorage.read(key: key); } // 删除数据统一接口 static Future<void> deleteItem(String key) async { if (kIsWeb) { // 此处替换为你自己的web端存储删除实现,比如localStorage删除逻辑 return; } await _appStorage.delete(key: key); } }
注意事项
- 平台判断顺序不能调整,必须先判断
kIsWeb再判断其他原生平台,否则web环境会触发运行时异常 - flutter_secure_storage官方已经提供了web端适配,如果你不想自己实现web端存储逻辑,可以直接使用官方的全平台版本,几乎不需要额外做差异化处理
内容的提问来源于stack exchange,提问作者Philipp
相关产品推荐
相关产品推荐

