Dart 语言 Dart 中的计算器应用高级功能

Dart阿木 发布于 2025-06-19 5 次阅读


Dart 语言中的计算器应用高级功能实现

Dart 是一种由 Google 开发的编程语言,旨在构建高性能的网络应用。Dart 语言以其简洁、高效和易于学习而受到开发者的喜爱。在 Dart 中,我们可以轻松地创建一个功能丰富的计算器应用,不仅包括基本的加减乘除运算,还可以实现高级功能,如科学计算、单位转换、历史记录等。本文将围绕 Dart 语言,探讨如何实现一个具有高级功能的计算器应用。

环境准备

在开始编写代码之前,我们需要准备以下环境:

1. Dart SDK:从 Dart 官网下载并安装 Dart SDK。

2. 编辑器:推荐使用 Dart 语言支持的编辑器,如 IntelliJ IDEA、VS Code 等。

3. Dart 运行环境:确保你的计算机上安装了 Dart 运行环境。

基本功能实现

我们需要实现计算器的基本功能,包括数字输入、运算符输入和结果显示。以下是一个简单的 Dart 计算器应用的实现:

dart

import 'package:flutter/material.dart';

void main() {


runApp(MyApp());


}

class MyApp extends StatelessWidget {


@override


Widget build(BuildContext context) {


return MaterialApp(


title: 'Dart Calculator',


theme: ThemeData(


primarySwatch: Colors.blue,


),


home: Calculator(),


);


}


}

class Calculator extends StatefulWidget {


@override


_CalculatorState createState() => _CalculatorState();


}

class _CalculatorState extends State<Calculator> {


String _expression = '';


double _result = 0.0;

void _onButtonPressed(String value) {


setState(() {


if (value == 'C') {


_expression = '';


} else if (value == '=') {


_result = evaluateExpression(_expression);


} else {


_expression += value;


}


});


}

double evaluateExpression(String expression) {


// 这里可以使用 Dart 内置的 eval 函数,但为了安全起见,我们使用自己的解析器


// ...


return 0.0;


}

@override


Widget build(BuildContext context) {


return Scaffold(


appBar: AppBar(


title: Text('Dart Calculator'),


),


body: Column(


children: <Widget>[


Expanded(


child: Container(


padding: EdgeInsets.all(16.0),


child: TextField(


controller: TextEditingController(text: _expression),


decoration: InputDecoration(


border: OutlineInputBorder(),


hintText: 'Enter expression',


),


readOnly: true,


textAlign: TextAlign.right,


),


),


),


Expanded(


child: Container(


padding: EdgeInsets.all(16.0),


child: Column(


children: <Widget>[


Row(


mainAxisAlignment: MainAxisAlignment.spaceEvenly,


children: <Widget>[


ElevatedButton(


onPressed: () => _onButtonPressed('1'),


child: Text('1'),


),


ElevatedButton(


onPressed: () => _onButtonPressed('2'),


child: Text('2'),


),


ElevatedButton(


onPressed: () => _onButtonPressed('3'),


child: Text('3'),


),


ElevatedButton(


onPressed: () => _onButtonPressed('+'),


child: Text('+'),


),


],


),


// ... 其他按钮


ElevatedButton(


onPressed: () => _onButtonPressed('C'),


child: Text('C'),


),


ElevatedButton(


onPressed: () => _onButtonPressed('='),


child: Text('='),


),


],


),


),


),


],


),


);


}


}


高级功能实现

在实现基本功能的基础上,我们可以添加以下高级功能:

1. 科学计算

为了实现科学计算,我们可以使用 Dart 的 `math` 库。以下是一个添加了科学计算功能的计算器示例:

dart

import 'package:flutter/material.dart';


import 'dart:math';

void main() {


runApp(MyApp());


}

class MyApp extends StatelessWidget {


@override


Widget build(BuildContext context) {


return MaterialApp(


title: 'Dart Calculator',


theme: ThemeData(


primarySwatch: Colors.blue,


),


home: Calculator(),


);


}


}

class Calculator extends StatefulWidget {


@override


_CalculatorState createState() => _CalculatorState();


}

class _CalculatorState extends State<Calculator> {


String _expression = '';


double _result = 0.0;

void _onButtonPressed(String value) {


setState(() {


if (value == 'C') {


_expression = '';


} else if (value == '=') {


_result = evaluateExpression(_expression);


} else {


_expression += value;


}


});


}

double evaluateExpression(String expression) {


// 使用 Dart 的 math 库进行科学计算


if (expression.contains('sin')) {


var angle = double.parse(expression.split('sin')[1]);


return sin(angle);


} else if (expression.contains('cos')) {


var angle = double.parse(expression.split('cos')[1]);


return cos(angle);


}


// ... 其他科学计算


return 0.0;


}

@override


Widget build(BuildContext context) {


// ... 省略其他代码


}


}


2. 单位转换

为了实现单位转换功能,我们可以创建一个简单的函数来处理不同单位之间的转换。以下是一个添加了单位转换功能的计算器示例:

dart

class Calculator extends StatefulWidget {


@override


_CalculatorState createState() => _CalculatorState();


}

class _CalculatorState extends State<Calculator> {


String _expression = '';


double _result = 0.0;

void _onButtonPressed(String value) {


setState(() {


if (value == 'C') {


_expression = '';


} else if (value == '=') {


_result = evaluateExpression(_expression);


} else {


_expression += value;


}


});


}

double evaluateExpression(String expression) {


// 单位转换


if (expression.contains('m/s')) {


var speed = double.parse(expression.split('m/s')[0]);


return speed 3.6; // m/s to km/h


} else if (expression.contains('km/h')) {


var speed = double.parse(expression.split('km/h')[0]);


return speed / 3.6; // km/h to m/s


}


// ... 其他单位转换


return 0.0;


}

@override


Widget build(BuildContext context) {


// ... 省略其他代码


}


}


3. 历史记录

为了记录用户的历史操作,我们可以使用一个列表来存储每次计算的结果。以下是一个添加了历史记录功能的计算器示例:

dart

class Calculator extends StatefulWidget {


@override


_CalculatorState createState() => _CalculatorState();


}

class _CalculatorState extends State<Calculator> {


String _expression = '';


double _result = 0.0;


List<String> _history = [];

void _onButtonPressed(String value) {


setState(() {


if (value == 'C') {


_expression = '';


_result = 0.0;


} else if (value == '=') {


_result = evaluateExpression(_expression);


_history.add('$_expression = $_result');


} else {


_expression += value;


}


});


}

double evaluateExpression(String expression) {


// ... 省略其他代码


return 0.0;


}

@override


Widget build(BuildContext context) {


// ... 省略其他代码


return Scaffold(


appBar: AppBar(


title: Text('Dart Calculator'),


),


body: Column(


children: <Widget>[


// ... 省略其他代码


Expanded(


child: Container(


padding: EdgeInsets.all(16.0),


child: ListView.builder(


itemCount: _history.length,


itemBuilder: (context, index) {


return ListTile(


title: Text(_history[index]),


);


},


),


),


),


],


),


);


}


}


总结

通过以上示例,我们展示了如何在 Dart 语言中实现一个具有高级功能的计算器应用。从基本功能到科学计算、单位转换和历史记录,我们逐步扩展了计算器的功能。这些示例展示了 Dart 语言的强大和灵活性,使其成为构建高性能网络应用的理想选择。

在实际开发中,我们还可以进一步优化代码,例如使用表达式解析器来处理复杂的数学表达式,或者使用状态管理库来更好地管理应用状态。Dart 语言为我们提供了丰富的工具和库,让我们能够轻松地创建出功能丰富的应用。