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 ? '是' : '否'}'),
          ],
        ),
      ),
    );
  }
}

效果

相关推荐
行者967 小时前
OpenHarmony Flutter弹出菜单组件深度实践:从基础到高级的完整指南
flutter·harmonyos·鸿蒙
前端不太难7 小时前
Flutter / RN / iOS,在长期维护下的性能差异本质
flutter·ios
小雨下雨的雨8 小时前
Flutter 框架跨平台鸿蒙开发 —— Padding 控件之空间呼吸艺术
flutter·ui·华为·harmonyos·鸿蒙系统
行者968 小时前
Flutter到OpenHarmony:横竖屏自适应布局深度实践
flutter·harmonyos·鸿蒙
小雨下雨的雨8 小时前
Flutter 框架跨平台鸿蒙开发 —— Align 控件之精准定位美学
flutter·ui·华为·harmonyos·鸿蒙
行者969 小时前
Flutter与OpenHarmony集成:跨平台开关组件的实践与优化
flutter·harmonyos·鸿蒙
盐焗西兰花18 小时前
鸿蒙学习实战之路-蓝牙设置完全指南
学习·华为·harmonyos
Van_Moonlight19 小时前
RN for OpenHarmony 实战 TodoList 项目:加载状态 Loading
javascript·开源·harmonyos
Van_captain21 小时前
rn_for_openharmony常用组件_Divider分割线
javascript·开源·harmonyos
cn_mengbei1 天前
鸿蒙PC原生应用开发实战:ArkTS与DevEco Studio从零构建跨端桌面应用全栈指南
华为·wpf·harmonyos