目录

一、引言

三、项目结构设计

1. 核心类结构

2. 状态管理

四、核心功能实现

1. 普通计算功能

2. IBM科学计算功能

3. 单位转换功能

五、 运行环境配置

1.运行命令

七、遇到的问题与解决方案

1. 问题:log10函数未定义

2. 问题:Web平台支持配置

3. 问题:鸿蒙设备连接

八、 总结


一、引言

随着移动应用开发的快速发展,跨平台开发框架越来越受到开发者的青睐。Flutter作为Google推出的跨平台UI框架,以其高性能、热重载和丰富的组件库,成为了跨平台开发的热门选择。而鸿蒙OS作为华为推出的分布式操作系统,也在不断发展壮大。本文将介绍如何使用Flutter开发一款兼容鸿蒙OS的多功能计算器,展示跨平台开发的优势和实现方式。

二、项目运行效果

1.计算功能效果展示

2.IBM计算效果展示

3.单位转换效果展示

三、项目结构设计

1. 核心类结构

├── CalculatorApp          # 应用主入口,管理计算器类型切换
├── BasicCalculator        # 普通计算器实现
├── ScientificCalculator   # IBM科学计算器实现
├── UnitConverter          # 单位转换实现
├── CalculatorType         # 计算器类型枚举
├── ConversionType         # 单位转换类型枚举
└── ConversionUnit         # 单位转换项类

2. 状态管理

- 使用Flutter内置的 setState 进行状态管理,适合中小型应用
- 每个计算器组件独立管理自己的状态,降低组件间的耦合度
- 数据驱动UI,确保UI状态与数据模型的一致性

四、核心功能实现

1. 普通计算功能

功能特点

- 支持基本算术运算(加、减、乘、除)
- 小数点输入和处理
- 清除功能
- 错误处理(如除以零)
- 大屏数字显示 核心代码实现

/// 处理数字按钮点击
void _onNumberPressed(String number) {
  setState(() {
    if (_waitingForSecondNumber) {
      _display = number;
      _waitingForSecondNumber = false;
    } else {
      _display = _display == '0' ? number : _display + number;
    }
  });
}

/// 执行计算
void _calculate() {
  _secondNumber = double.parse(_display);
  double result = 0;

  switch (_operator) {
    case '+':
      result = _firstNumber + _secondNumber;
      break;
    case '-':
      result = _firstNumber - _secondNumber;
      break;
    case '×':
      result = _firstNumber * _secondNumber;
      break;
    case '÷':
      if (_secondNumber != 0) {
        result = _firstNumber / _secondNumber;
      } else {
        _display = '错误';
        return;
      }
      break;
  }

  // 移除末尾的.0
  _display = result % 1 == 0 ? result.toInt().toString() : result.toString();
}

2. IBM科学计算功能

功能特点

- 三角函数(sin、cos、tan)
- 对数函数(常用对数log、自然对数ln)
- 开方、平方、倒数
- 数学常数(π、e)
- 幂运算(^) 核心代码实现

/// 处理科学函数按钮点击
void _onFunctionPressed(String function) {
  setState(() {
    double number = double.parse(_display);
    double result = 0;

    switch (function) {
      case 'sin':
        result = sin(number * pi / 180);
        break;
      case 'cos':
        result = cos(number * pi / 180);
        break;
      case 'tan':
        result = tan(number * pi / 180);
        break;
      case 'log':
        result = log(number) / log(10); // 常用对数,以10为底
        break;
      case 'ln':
        result = log(number);
        break;
      case '√':
        result = sqrt(number);
        break;
      case 'x²':
        result = number * number;
        break;
      case '1/x':
        result = 1 / number;
        break;
      case 'π':
        result = pi;
        break;
      case 'e':
        result = e;
        break;
    }

    // 移除末尾的.0
    _display = result % 1 == 0 ? result.toInt().toString() : result.toString();
    _waitingForSecondNumber = true;
  });
}

3. 单位转换功能

功能特点
- 长度转换(米、千米、厘米、毫米、英寸、英尺)
- 重量转换(千克、克、磅、盎司)
- 温度转换(摄氏度、华氏度、开尔文)
- 支持输入数值实时转换
- 直观的单位选择界面 核心代码实现

/// 执行单位转换
void _convert() {
  final units = _conversionUnits[_currentConversionType]!;
  final fromUnit = units.firstWhere((unit) => unit.name == _fromUnit);
  final toUnit = units.firstWhere((unit) => unit.name == _toUnit);
  
  double result = 0;
  
  if (_currentConversionType == ConversionType.temperature) {
    // 温度转换需要特殊处理
    if (fromUnit.name == '摄氏度') {
      if (toUnit.name == '华氏度') {
        result = (_inputValue * 9/5) + 32;
      } else if (toUnit.name == '开尔文') {
        result = _inputValue + 273.15;
      } else {
        result = _inputValue;
      }
    } 
    // 其他温度转换分支...
  } else {
    // 其他单位转换
    result = (_inputValue * fromUnit.factor) / toUnit.factor;
  }
  
  setState(() {
    _outputValue = result;
  });
}

五、 运行环境配置

Flutter SDK 3.0+
Dart SDK 2.18+
鸿蒙OS模拟器或物理设备(可选,用于鸿蒙平台测试)
Chrome浏览器(用于Web平台测试)

1.运行命令

# 在Chrome浏览器中运行
flutter run -d chrome

# 在鸿蒙设备或模拟器上运行
flutter run -d ohos

七、遇到的问题与解决方案

1. 问题:log10函数未定义

解决方案 :Dart的 log 函数默认是自然对数,需要使用 log(number) / log(10) 来计算常用对数。

2. 问题:Web平台支持配置

解决方案 :运行 flutter create . 命令添加Web平台支持,或在 pubspec.yaml 中手动配置。

3. 问题:鸿蒙设备连接

解决方案 :确保鸿蒙设备已开启开发者模式,并正确配置了Flutter的鸿蒙开发环境。

八、 总结

本文介绍了如何使用Flutter开发一款兼容鸿蒙OS的多功能计算器。通过这个项目,我们展示了Flutter跨平台开发的优势,以及如何将鸿蒙OS的设计风格融入到Flutter应用中。计算器包含了完整的普通计算、科学计算和单位转换功能,具有良好的用户体验。


欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.csdn.net

Logo

作为“人工智能6S店”的官方数字引擎,为AI开发者与企业提供一个覆盖软硬件全栈、一站式门户。

更多推荐