Create a Calculator App for Android in Flutter
- The Flutter Create Calculator app demonstrates how to build an app with Flutter.
- The app is a calculator that is capable of floating around the screen.
- The background color, text color, and buttons colors can be controlled by the user.
- The app is built with a main.dart file and buttons.dart file.
- The button's colors are set through the MainStatelessWidget using a StatelessWidget method.
Step 1: Add the Dependency to pubspec.yaml file as shown below:
dependencies:
lint: ^1.8.2
math_expressions: ^2.3.0
Step 2: Import the library
Now in your Dart code, you can use:
import 'package:math_expressions/math_expressions.dart';
Create a Button List
List button = [
"AC","DLT","%","/","9","8","7","*","6","5","4","-","3","2","1","+","0",".","=",
];
Expression method() create
void expression(){
Parser p = Parser();
Expression exp = p.parse(userInput);
ContextModel cm = ContextModel();
var evalue = exp.evaluate(EvaluationType.REAL, cm);
userInput = evalue.toString();
}
Operations create
isOperator(String x){
if(x == "%" || x == "+" || x == "-" || x == "*" || x == "/" || x == "="){
return true;
}
return false;
}
Full Source Code
main.dart
import 'package:calculator/HomeScreen/home_screen.dart';
import 'package:flutter/material.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
title: 'Calculator Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: HomeScreen(),
);
}
}
button_widget.dart
import 'package:flutter/material.dart';
class ButtonWid extends StatefulWidget {
ButtonWid(
{required this.buttonColor,
required this.buttonText,
required this.buttonTextColor,
this.onPressed});
Color buttonColor;
String buttonText;
Color buttonTextColor;
final VoidCallback? onPressed;
@override
State createState() => _ButtonWidState();
}
class _ButtonWidState extends State {
@override
Widget build(BuildContext context) {
return GestureDetector(
onTap: widget.onPressed,
child: Padding(
padding: const EdgeInsets.all(8.0),
child: Container(
decoration: BoxDecoration(
color: widget.buttonColor,
borderRadius: BorderRadius.circular(20),
),
child: Center(
child: Text(
widget.buttonText,
style: TextStyle(
color: widget.buttonTextColor,
fontWeight: FontWeight.bold,
fontSize: 20),
),
),
),
),
);
}
}
home_screen.dart
import 'package:calculator/Widgets/botton_widget.dart';
import 'package:flutter/material.dart';
import 'package:math_expressions/math_expressions.dart';
class HomeScreen extends StatefulWidget {
const HomeScreen({Key? key}) : super(key: key);
@override
_HomeScreenState createState() => _HomeScreenState();
}
class _HomeScreenState extends State {
List button = [
"AC","DLT","%","/","9","8","7","*","6","5","4","-","3","2","1","+","0",".","=",
];
void expression(){
Parser p = Parser();
Expression exp = p.parse(userInput);
ContextModel cm = ContextModel();
var evalue = exp.evaluate(EvaluationType.REAL, cm);
userInput = evalue.toString();
}
isOperator(String x){
if(x == "%" || x == "+" || x == "-" || x == "*" || x == "/" || x == "="){
return true;
}
return false;
}
var userInput = "";
var userOutput = "";
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.white,
body: Column(
children: [
Expanded(
child: Padding(
padding: const EdgeInsets.only(top: 85.0),
child: Column(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: [
Container(
child: Text(
userInput,
style: TextStyle(color: Colors.black, fontSize: 35),
),
),
Divider(
indent: 25,
endIndent: 25,
thickness: 2,
color: Colors.grey,
),
Container(
alignment: Alignment.centerRight,
child: Text(userOutput,style: TextStyle(
color: Colors.black,fontSize: 30
),),
),
],
),
),
),
Expanded(
flex: 2,
child: SizedBox(
width: 350,
child: GridView.builder(
gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 4,
),
itemCount: button.length,
itemBuilder: (BuildContext context, int index) {
if(index == 0){
return ButtonWid(
onPressed: (){
setState(() {
userInput = "";
});
},
buttonColor: Colors.amber,
buttonText: button[index],
buttonTextColor: Colors.white,
);
} else if(index == 1){
return ButtonWid(
onPressed: (){
setState(() {
userInput = userInput.substring(0,userInput.length - 1);
});
},
buttonColor: Colors.amber,
buttonText: button[index],
buttonTextColor: Colors.white,
);
} else if(index == button.length - 1){
return ButtonWid(
onPressed: (){
setState(() {
expression();
});
},
buttonColor: Colors.amber,
buttonText: button[index],
buttonTextColor: Colors.white,
);
} else {
return ButtonWid(
onPressed: (){
setState(() {
userInput = userInput + button[index];
});
},
buttonColor: isOperator(button[index])
? Colors.amber
: Colors.blue,
buttonText: button[index],
buttonTextColor: Colors.white,
);
}
},
),
),
)
],
));
}
}
OUTPUT
0 Comments
Please Do Not Comments Any Span Or Span link..