You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 18:45:04