Read More Tutorial
simple calculator in flutter
Hi, welcome to codeplayon to learn share, and explore your skill simple calculator in flutter. Let’s Lean more on flutter in this flutter tutorial we make a simple calculator app. So this flutter article is very interesting for beginners on how to learn flutter for the cross-platform. hare we can create a simple calculator in fluter so that you can learn share more things like.
- Simple design of a calculator in a flutter.
- making login for ( + , – ,*, / ) of two value and get results.
- Button Click Listener.
- get value on button click and show on a text file.
- Result on multiple values.
- math_expressions: ^1.1.1 dependency.
So let’s make a flutter calculator widget and do that follow the code below step to make it easy.
flutter calculator widget
Table of Contents
First of you can create an flutter project click on file –> New –> New Flutter project and build your project. after build successfully.
in you pubspec.yaml file open and math_expressions: ^1.1.1 dependency and get pub .
pubspec.yaml file source code
name: first_flutter_app description: A new Flutter application. version: 1.0.0+1 environment: sdk: ">=2.12.0 <3.0.0" dependencies: flutter: sdk: flutter # The following adds the Cupertino Icons font to your application. # Use with the CupertinoIcons class for iOS style icons. cupertino_icons: ^0.1.2 math_expressions: ^1.1.1 dev_dependencies: flutter_test: sdk: flutter # For information on the generic Dart part of this file, see the # following page: https://dart.dev/tools/pub/pubspec # The following section is specific to Flutter. flutter: # The following line ensures that the Material Icons font is # included with your application, so that you can use the icons in # the material Icons class. uses-material-design: true
You can follow these for create button Widget
Widget buildButton(String buttonText, double buttonHeight, Color buttonColor){ return Container( height: MediaQuery.of(context).size.height * 0.1 * buttonHeight, color: buttonColor, child: FlatButton( shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(0.0), side: BorderSide( color: Colors.white, width: 1, style: BorderStyle.solid ) ), padding: EdgeInsets.all(16.0), onPressed: () => buttonPressed(buttonText), child: Text( buttonText, style: TextStyle( fontSize: 30.0, fontWeight: FontWeight.normal, color: Colors.white ), ) ), ); }
On Button click to Caluculate result and value login
in these method you can see all logic like ( C ) to Clear al Result for TextFild ( X ) remove last value , ( = ) Get Result etc.
buttonPressed(String buttonText){ setState(() { if(buttonText == "C"){ equation = "0"; result = "0"; equationFontSize = 38.0; resultFontSize = 48.0; } else if(buttonText == "⌫"){ equationFontSize = 48.0; resultFontSize = 38.0; equation = equation.substring(0, equation.length - 1); if(equation == ""){ equation = "0"; } } else if(buttonText == "="){ equationFontSize = 38.0; resultFontSize = 48.0; expression = equation; expression = expression.replaceAll('×', '*'); expression = expression.replaceAll('÷', '/'); try{ Parser p = Parser(); Expression exp = p.parse(expression); ContextModel cm = ContextModel(); result = '${exp.evaluate(EvaluationType.REAL, cm)}'; }catch(e){ result = "Error"; } } else{ equationFontSize = 48.0; resultFontSize = 38.0; if(equation == "0"){ equation = buttonText; }else { equation = equation + buttonText; } } }); }
Making UI like Button click add button in a row and set text on button to follow below code .
in these method you can lear how to make a UI in flutter like how to mange mutipal widget ina row and how to set test and stype for button text color button color etc.
@override Widget build(BuildContext context) { return Scaffold( appBar: AppBar(title: Text('Calculator')), body: Column( children: <Widget>[ Container( alignment: Alignment.centerRight, padding: EdgeInsets.fromLTRB(10, 20, 10, 0), child: Text(equation, style: TextStyle(fontSize: equationFontSize),), ), Container( alignment: Alignment.centerRight, padding: EdgeInsets.fromLTRB(10, 30, 10, 0), child: Text(result, style: TextStyle(fontSize: resultFontSize),), ), Expanded( child: Divider(), ), Row( mainAxisAlignment: MainAxisAlignment.center, children: <Widget>[ Container( width: MediaQuery.of(context).size.width * .75, child: Table( children: [ TableRow( children: [ buildButton("C", 1, Colors.redAccent), buildButton("⌫", 1, Colors.blue), buildButton("÷", 1, Colors.blue), ] ), TableRow( children: [ buildButton("7", 1, Colors.black87), buildButton("8", 1, Colors.black87), buildButton("9", 1, Colors.black87), ] ), TableRow( children: [ buildButton("4", 1, Colors.black87), buildButton("5", 1, Colors.black87), buildButton("6", 1, Colors.black87), ] ), TableRow( children: [ buildButton("1", 1, Colors.black87), buildButton("2", 1, Colors.black87), buildButton("3", 1, Colors.black87), ] ), TableRow( children: [ buildButton(".", 1, Colors.black87), buildButton("0", 1, Colors.black87), buildButton("00", 1, Colors.black87), ] ), ], ), ), Container( width: MediaQuery.of(context).size.width * 0.25, child: Table( children: [ TableRow( children: [ buildButton("×", 1, Colors.blue), ] ), TableRow( children: [ buildButton("-", 1, Colors.blue), ] ), TableRow( children: [ buildButton("+", 1, Colors.blue), ] ), TableRow( children: [ buildButton("=", 2, Colors.redAccent), ] ), ], ), ) ], ), ], ), ); }
Full Source Code simple calculator in flutter.
Main.Dart File
import 'package:flutter/material.dart'; import 'package:math_expressions/math_expressions.dart'; void main(){ runApp(Calculator()); } class Calculator extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( debugShowCheckedModeBanner: false, title: 'Calculator', theme: ThemeData(primarySwatch: Colors.blue), home: SimpleCalculator(), ); } } class SimpleCalculator extends StatefulWidget { @override _SimpleCalculatorState createState() => _SimpleCalculatorState(); } class _SimpleCalculatorState extends State<SimpleCalculator> { String equation = "0"; String result = "0"; String expression = ""; double equationFontSize = 38.0; double resultFontSize = 48.0; buttonPressed(String buttonText){ setState(() { if(buttonText == "C"){ equation = "0"; result = "0"; equationFontSize = 38.0; resultFontSize = 48.0; } else if(buttonText == "⌫"){ equationFontSize = 48.0; resultFontSize = 38.0; equation = equation.substring(0, equation.length - 1); if(equation == ""){ equation = "0"; } } else if(buttonText == "="){ equationFontSize = 38.0; resultFontSize = 48.0; expression = equation; expression = expression.replaceAll('×', '*'); expression = expression.replaceAll('÷', '/'); try{ Parser p = Parser(); Expression exp = p.parse(expression); ContextModel cm = ContextModel(); result = '${exp.evaluate(EvaluationType.REAL, cm)}'; }catch(e){ result = "Error"; } } else{ equationFontSize = 48.0; resultFontSize = 38.0; if(equation == "0"){ equation = buttonText; }else { equation = equation + buttonText; } } }); } Widget buildButton(String buttonText, double buttonHeight, Color buttonColor){ return Container( height: MediaQuery.of(context).size.height * 0.1 * buttonHeight, color: buttonColor, child: FlatButton( shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(0.0), side: BorderSide( color: Colors.white, width: 1, style: BorderStyle.solid ) ), padding: EdgeInsets.all(16.0), onPressed: () => buttonPressed(buttonText), child: Text( buttonText, style: TextStyle( fontSize: 30.0, fontWeight: FontWeight.normal, color: Colors.white ), ) ), ); } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar(title: Text('Calculator')), body: Column( children: <Widget>[ Container( alignment: Alignment.centerRight, padding: EdgeInsets.fromLTRB(10, 20, 10, 0), child: Text(equation, style: TextStyle(fontSize: equationFontSize),), ), Container( alignment: Alignment.centerRight, padding: EdgeInsets.fromLTRB(10, 30, 10, 0), child: Text(result, style: TextStyle(fontSize: resultFontSize),), ), Expanded( child: Divider(), ), Row( mainAxisAlignment: MainAxisAlignment.center, children: <Widget>[ Container( width: MediaQuery.of(context).size.width * .75, child: Table( children: [ TableRow( children: [ buildButton("C", 1, Colors.redAccent), buildButton("⌫", 1, Colors.blue), buildButton("÷", 1, Colors.blue), ] ), TableRow( children: [ buildButton("7", 1, Colors.black87), buildButton("8", 1, Colors.black87), buildButton("9", 1, Colors.black87), ] ), TableRow( children: [ buildButton("4", 1, Colors.black87), buildButton("5", 1, Colors.black87), buildButton("6", 1, Colors.black87), ] ), TableRow( children: [ buildButton("1", 1, Colors.black87), buildButton("2", 1, Colors.black87), buildButton("3", 1, Colors.black87), ] ), TableRow( children: [ buildButton(".", 1, Colors.black87), buildButton("0", 1, Colors.black87), buildButton("00", 1, Colors.black87), ] ), ], ), ), Container( width: MediaQuery.of(context).size.width * 0.25, child: Table( children: [ TableRow( children: [ buildButton("×", 1, Colors.blue), ] ), TableRow( children: [ buildButton("-", 1, Colors.blue), ] ), TableRow( children: [ buildButton("+", 1, Colors.blue), ] ), TableRow( children: [ buildButton("=", 2, Colors.redAccent), ] ), ], ), ) ], ), ], ), ); } }