Flutter&鸿蒙next 实现一个计算器应用

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 本文介绍了如何使用 Flutter 创建一个简单的计算器应用,包括基本的加减乘除运算。文章详细讲解了界面布局、计算逻辑和状态管理的实现步骤,通过具体的代码示例展示了如何构建计算器界面、处理用户输入和显示计算结果。

在本篇文章中,我们将学习如何使用 Flutter 创建一个简单的计算器应用,包含基础的加减乘除运算。我们将逐步讲解计算器界面的构建、逻辑处理、以及如何使用 Flutter 提供的组件来实现该功能。

一、功能需求
我们需要实现以下功能:

用户可以输入数字和操作符(+、-、*、/)。
显示当前的输入和运算结果。
支持基本的加法、减法、乘法和除法运算。
支持清除输入的功能(清空屏幕)。
支持结果显示,并且用户可以继续在结果基础上进行运算。
二、实现思路
界面布局:使用 GridView 布局来组织按钮,模拟计算器的界面。
计算逻辑:使用一个简单的字符串存储用户输入的内容,并通过对输入字符串进行解析来执行相应的计算操作。
状态管理:通过 StatefulWidget 来管理用户输入的状态和计算结果的更新。
三、代码实现

  1. 创建 Flutter 项目
    首先,我们需要创建一个 Flutter 项目,并打开 lib/main.dart 文件。

  2. 编写代码
    import 'package:flutter/material.dart';

void main() {
runApp(MyApp());
}

class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Calculator',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: Calculator(),
);
}
}

class Calculator extends StatefulWidget {
@override
_CalculatorState createState() => _CalculatorState();
}

class _CalculatorState extends State {
String _output = "0"; // 显示的输出内容
String _input = ""; // 存储用户输入的表达式

// 按钮点击处理
void _onButtonPressed(String value) {
setState(() {
if (value == "C") {
_input = ""; // 清除输入
_output = "0"; // 重置显示
} else if (value == "=") {
try {
// 计算并显示结果
_output = _calculateResult();
} catch (e) {
_output = "Error"; // 处理错误
}
} else {
// 添加输入字符到表达式
_input += value;
_output = _input;
}
});
}

// 计算表达式的结果
String _calculateResult() {
// 使用 Dart 内置的表达式解析器
final expression = _input.replaceAll("x", "*").replaceAll("÷", "/");
// 用 Flutter 提供的 dart:math 计算表达式的结果
final result = _parseMathExpression(expression);
return result.toString();
}

// 解析并计算表达式
double _parseMathExpression(String expression) {
// 使用 Dart 内置库来执行运算 (这里只是一个简单实现示例)
// 这里可以集成更复杂的库,或自己手写计算器的解析器。
return double.parse(expression);
}

@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Flutter Calculator'),
),
body: Column(
mainAxisAlignment: MainAxisAlignment.end,
children: [
// 显示输入和输出
Padding(
padding: const EdgeInsets.all(20.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.end,
children: [
Text(_input, style: TextStyle(fontSize: 24, fontWeight: FontWeight.bold)),
SizedBox(height: 10),
Text(_output, style: TextStyle(fontSize: 48, fontWeight: FontWeight.bold)),
],
),
),
// 按钮布局
GridView.builder(
shrinkWrap: true,
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 4,
crossAxisSpacing: 10,
mainAxisSpacing: 10,
),
itemCount: buttonLabels.length,
itemBuilder: (context, index) {
return ElevatedButton(
onPressed: () => _onButtonPressed(buttonLabels[index]),
child: Text(buttonLabels[index], style: TextStyle(fontSize: 24)),
style: ButtonStyle(
padding: MaterialStateProperty.all(EdgeInsets.all(20)),
backgroundColor: MaterialStateProperty.all(Colors.blue),
),
);
},
),
],
),
);
}

// 计算器的按钮标签
final List buttonLabels = [
'7', '8', '9', '/',
'4', '5', '6', 'x',
'1', '2', '3', '-',
'C', '0', '=', '+',
];
}

  1. 代码详细解释
  2. 界面布局
    我们使用 Scaffold 来构建界面。主屏幕由两个部分组成:

输入区域:通过 Text 小部件显示用户输入的数学表达式,和运算结果。通过 Padding 控制文本的间距,使其看起来清晰整齐。
按钮区域:使用 GridView.builder 来生成按钮网格。每个按钮通过 ElevatedButton 实现,点击按钮后调用 _onButtonPressed 函数处理相应的输入。

  1. 输入和显示
    我们使用一个 String _input 变量来存储用户输入的数学表达式,并通过 _output 来显示当前的计算结果。

清除操作:当用户点击 "C" 按钮时,清空 _input 和 _output 变量,重置显示为 0。
计算操作:当用户点击 "=" 按钮时,调用 _calculateResult 函数计算结果,并将计算结果显示在屏幕上。

  1. 计算逻辑
    _onButtonPressed 方法会根据不同的输入更新 _input 和 _output 的内容。特别地,如果用户点击 "=",会调用 _calculateResult 方法来进行计算。
    在 _calculateResult 中,我们会将表达式中的乘法符号 "x" 和除法符号 "÷" 替换为 Dart 可识别的 "*" 和 "/"。
    然后,调用一个简单的 _parseMathExpression 方法,实际上这里只是一个简单的 double.parse 示例,您可以根据需要集成一个更强大的数学表达式解析库。
  2. 按钮
    我们定义了一个 buttonLabels 列表来存储所有按钮的标签,并使用 GridView.builder 来动态生成每个按钮。通过 ElevatedButton 来实现按钮的外观,并且通过 onPressed 回调触发计算器的功能。

  3. 优化建议
    目前的计算器实现相对简单,适用于一些基础运算,但在实际开发中,你可能需要对表达式进行更复杂的解析、错误处理和优化。比如:

支持括号运算。
支持浮点数精度处理。
使用更专业的数学表达式解析库,如 math_expressions 或其他第三方库来支持复杂的运算和表达式计算。
四、总结
本文展示了如何使用 Flutter 创建一个简单的计算器应用,从界面布局到逻辑处理都进行了详细的讲解。通过本示例,你应该能够更好地理解 Flutter 中的组件使用、状态管理以及如何处理用户输入和输出。希望这篇文章能够帮助你在开发中使用 Flutter 时更加得心应手!
————————————————

                        版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/lbcyllqj/article/details/143580131

目录
相关文章
|
1天前
|
流计算 UED
「Mac畅玩鸿蒙与硬件48」UI互动应用篇25 - 简易购物车功能实现
本篇教程将带你实现一个简易购物车功能。通过使用接口定义商品结构,我们将创建一个动态购物车,支持商品的添加、移除以及实时总价计算。
83 69
|
7天前
【HarmonyOS Next开发】:ListItemGroup使用
通过使用ListItemGroup和AlphabetIndexer两种类型组件,实现带标题分类和右侧导航栏的页面
96 61
|
2天前
|
安全 数据安全/隐私保护 Android开发
HarmonyOS 5.0 Next实战应用开发—‘我的家乡’【HarmonyOS Next华为公司完全自研的操作系统】
HarmonyOS NEXT是华为自研的鸿蒙操作系统的重要版本更新,标志着鸿蒙系统首次完全脱离Linux内核及安卓开放源代码项目(AOSP),仅支持鸿蒙内核和鸿蒙系统的应用。该版本引入了“和谐美学”设计理念,通过先进的物理渲染引擎还原真实世界的光影色彩,为用户带来沉浸式体验。应用图标设计融合国画理念,采用留白和实时模糊技术展现中式美学。 HarmonyOS NEXT强化了设备间的协同能力,支持无缝切换任务,如在手机、平板或电脑间继续阅读文章或编辑文件。系统注重数据安全和隐私保护,提供数据加密和隐私权限管理功能。此外,它利用分布式技术实现跨设备资源共
64 15
HarmonyOS 5.0 Next实战应用开发—‘我的家乡’【HarmonyOS Next华为公司完全自研的操作系统】
|
2天前
|
存储 JavaScript 开发工具
基于HarmonyOS 5.0(NEXT)与SpringCloud架构的跨平台应用开发与服务集成研究【实战】
本次的.HarmonyOS Next ,ArkTS语言,HarmonyOS的元服务和DevEco Studio 开发工具,为开发者提供了构建现代化、轻量化、高性能应用的便捷方式。这些技术和工具将帮助开发者更好地适应未来的智能设备和服务提供方式。
基于HarmonyOS 5.0(NEXT)与SpringCloud架构的跨平台应用开发与服务集成研究【实战】
|
5天前
|
Dart 前端开发 IDE
鸿蒙Flutter实战:14-现有Flutter 项目支持鸿蒙 II
本文介绍了如何将现有 Flutter 项目适配鸿蒙系统,详细步骤包括安装 FVM、使用 FVM 安装 Flutter SDK、搭建开发环境、创建项目架构和壳工程等。
63 4
鸿蒙Flutter实战:14-现有Flutter 项目支持鸿蒙 II
|
4天前
|
安全 API 数据安全/隐私保护
自学记录HarmonyOS Next DRM API 13:构建安全的数字内容保护系统
在完成HarmonyOS Camera API开发后,我深入研究了数字版权管理(DRM)技术。最新DRM API 13提供了强大的工具,用于保护数字内容的安全传输和使用。通过学习该API的核心功能,如获取许可证、解密内容和管理权限,我实现了一个简单的数字视频保护系统。该系统包括初始化DRM模块、获取许可证、解密视频并播放。此外,我还配置了开发环境并实现了界面布局。未来,随着数字版权保护需求的增加,DRM技术将更加重要。如果你对这一领域感兴趣,欢迎一起探索和进步。
56 18
|
3天前
|
人工智能 自然语言处理 API
自学记录HarmonyOS Next的HMS AI API 13:语音合成与语音识别
在完成图像处理项目后,我计划研究HarmonyOS Next API 13中的AI语音技术,包括HMS AI Text-to-Speech和Speech Recognizer。这些API提供了强大的语音合成与识别功能,支持多语言、自定义语速和音调。通过这些API,我将开发一个支持语音输入与输出的“语音助手”原型应用,实现从语音指令解析到语音响应的完整流程。此项目不仅提高了应用的交互性,也为开发者提供了广阔的创新空间。未来,语音技术将在无障碍应用和智慧城市等领域展现巨大潜力。如果你也对语音技术感兴趣,不妨一起探索这个充满无限可能的领域。 (238字符)
60 11
|
4天前
|
存储 API 计算机视觉
自学记录HarmonyOS Next Image API 13:图像处理与传输的开发实践
在完成数字版权管理(DRM)项目后,我决定挑战HarmonyOS Next的图像处理功能,学习Image API和SendableImage API。这两个API支持图像加载、编辑、存储及跨设备发送共享。我计划开发一个简单的图像编辑与发送工具,实现图像裁剪、缩放及跨设备共享功能。通过研究,我深刻体会到HarmonyOS的强大设计,未来这些功能可应用于照片编辑、媒体共享等场景。如果你对图像处理感兴趣,不妨一起探索更多高级特性,共同进步。
58 11
|
2天前
|
人工智能 监控 安全
自学记录鸿蒙 API 13:骨骼点检测应用Core Vision Skeleton Detection
骨骼点检测技术能够从图片中识别出人体的关键骨骼点位置,如头部、肩部、手肘等,广泛应用于运动健身指导、游戏交互、医疗辅助、安全监控等领域。我决定深入学习HarmonyOS Next API 13中的Skeleton Detection API,并开发一个简单的骨骼点检测应用。通过理解API核心功能、项目初始化与配置、实现检测功能、构建用户界面,以及性能优化和功能扩展,逐步实现这一技术的应用。未来计划将其应用于健身指导和智能监控领域,探索与其他AI能力的结合,开发更智能的解决方案。如果你也对骨骼点检测感兴趣,不妨一起进步!
125 9
|
1天前
|
前端开发
「Mac畅玩鸿蒙与硬件49」UI互动应用篇26 - 数字填色游戏
本篇教程将带你实现一个数字填色小游戏,通过简单的交互逻辑,学习如何使用鸿蒙开发组件创建趣味性强的应用。
36 20

热门文章

最新文章