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

效果

相关推荐
巴拉巴拉~~1 小时前
Flutter 通用按钮组件 CommonButtonWidget:多样式 + 多状态 + 交互优化
javascript·flutter·交互
晚霞的不甘1 小时前
实战前瞻:构建高可用、强实时的 Flutter + OpenHarmony 智慧医疗健康平台
前端·javascript·flutter
2401_860494702 小时前
在React Native中实现鸿蒙跨平台开发中开发一个运动类型管理系统,使用React Navigation设置应用的导航结构,创建一个堆栈导航器
react native·react.js·harmonyos
开心-开心急了2 小时前
Ai加Flutter实现自定义标题栏(appBar)
flutter
巴拉巴拉~~2 小时前
Flutter 通用图片预览组件 CommonImagePreview:缩放+滑动+保存+多图切换
flutter
巴拉巴拉~~2 小时前
Flutter 通用底部导航组件 CommonBottomNavWidget:状态保持 + 凸起按钮适配
flutter
走在路上的菜鸟2 小时前
Android学Dart学习笔记第二十节 类-枚举
android·笔记·学习·flutter
hahjee2 小时前
diffutils文件对比:鸿蒙PC上的diff工具集
华为·harmonyos
巴拉巴拉~~2 小时前
Flutter 通用表单输入组件 CustomInputWidget:校验 + 样式 + 交互一键适配
javascript·flutter·交互
yoona10202 小时前
Flutter 声明式 UI:为什么 build 会被反复调用?
flutter·ui·区块链·dex