flutter平台判断后续

之前写过一次flutter的平台判断问题,现在觉得还是有一些问题

特别是之前改的插件是使用鸿蒙flutter,如果是普通flutter去用也是不行。

于是又重新写了一下代码

dart 复制代码
import 'dart:io';

import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';

class PlatformJudgePage extends StatefulWidget {
  const PlatformJudgePage({super.key});

  @override
  State<PlatformJudgePage> createState() => _PlatformJudgePageState();
}

class _PlatformJudgePageState extends State<PlatformJudgePage> {
  /// 这个方法调用的是[defaultTargetPlatform]
  /// 即使运行在浏览器中也能判断真正的操作系统
  String _getOSName() {
    return switch (defaultTargetPlatform) {
      TargetPlatform.android => '安卓',
      TargetPlatform.iOS => 'IOS',
      TargetPlatform.macOS => '苹果Mac',
      TargetPlatform.windows => '微软Windows',
      TargetPlatform.linux => 'Linux',
      TargetPlatform.fuchsia => '谷歌Fuchsia',
      // 虽然默认判断上面的6个系统就够了
      // 但如果这个代码放在鸿蒙flutter中
      // 由于还存在ohos,就会导致报错
      // 有很多插件在鸿蒙flutter上因为这个问题报错

      // 所以这里忽略一下代码警告,继续判断
      // ignore: unreachable_switch_case
      _ => _getUnknownOSName(),
    };
  }

  String _getUnknownOSName() {
    if (kIsWeb) {
      // 如果是web
      // 调用Platform.operatingSystem和Platform.isAndroid等都会报错
      // 所以这里只能得出结论是运行在未知操作系统的浏览器中
      return '未知操作系统的浏览器';
      // 有趣的是如果在鸿蒙浏览器中运行这样的flutter页面
      // 是不是就是这个情况?答案有待验证
    } else {
      // 可以调用Platform.operatingSystem了
      return switch (Platform.operatingSystem) {
        // 这里增加鸿蒙系统的字符串名称
        // 如果是鸿蒙系统,这里就能判断出来了
        'ohos' => '鸿蒙',
        String() => '未知操作系统',
      };
    }
  }

  @override
  Widget build(BuildContext context) {
    // print(Platform.operatingSystem);
    return Scaffold(
      appBar: AppBar(title: const Text('系统和平台判断')),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            Text('当前设备的操作系统:${_getOSName()}'),
            SizedBox(height: 20),
            Text('是否运行在Web平台(浏览器):${kIsWeb ? '是' : '否'}'),
          ],
        ),
      ),
    );
  }
}

效果

相关推荐
liulian09161 小时前
Flutter 三方库 flutter_local_auth 的鸿蒙化适配指南
flutter·华为·学习方法·harmonyos
SuperHeroWu71 小时前
【鸿蒙基础入门】概念理解和学习方法论说明
前端·学习·华为·开源·harmonyos·鸿蒙·移动端
亘元有量-流量变现2 小时前
抓住鸿蒙流量红利!2026华为应用商店ASO优化全解
华为·harmonyos·aso优化
qwfy2 小时前
瑞幸 UI 上 pub.dev 了 —— 22 个 Flutter 组件,与微信小程序版双端对齐
flutter·开源
特立独行的猫a2 小时前
使用 vcpkg 为OpenHarmony(鸿蒙PC)构建 OpenSSH 命令行工具
harmonyos·openharmony·命令行·openssh·vcpkg·鸿蒙pc
音视频牛哥2 小时前
纯血鸿蒙(HarmonyOS NEXT)下,如何实现低延迟RTSP、RTMP播放器音视频解码?
华为·音视频·harmonyos·鸿蒙rtmp播放器·鸿蒙rtsp播放器·harmonyos rtsp·鸿蒙next播放器
特立独行的猫a4 小时前
OpenSSH 介绍及使用Lycium框架移植到鸿蒙 PC(OpenHarmony)平台的实践总结
harmonyos·openssh·鸿蒙pc·lycium_plusplus·三分库移植
轻口味4 小时前
HarmonyOS 6 轻相机应用开发2:贴纸效果实现
音视频·harmonyos·鸿蒙·播放器
HwJack204 小时前
跨模块资源共享的破局之道:HarmonyOS HSP 资源访问“避坑与升华”指南
华为·harmonyos
liulian09165 小时前
【Flutter for OpenHarmony】原生卡片 Widget 集成实战:从零构建待办清单桌面组件
flutter·华为·学习方法·harmonyos