First commit
This commit is contained in:
352
main.dart
Normal file
352
main.dart
Normal file
@@ -0,0 +1,352 @@
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
void main() {
|
||||
runApp(const Calculator());
|
||||
}
|
||||
|
||||
class Calculator extends StatefulWidget {
|
||||
const Calculator({Key? key}) : super(key: key);
|
||||
@override
|
||||
_CalculatorState createState() => _CalculatorState();
|
||||
}
|
||||
|
||||
class _CalculatorState extends State<Calculator> {
|
||||
late double first = 0;
|
||||
late double second = 0;
|
||||
late String output = '0.00';
|
||||
late String _output = '0';
|
||||
late String operand = '0';
|
||||
void click(String input) {
|
||||
try {
|
||||
if (input == "Clear") {
|
||||
first = 0;
|
||||
second = 0;
|
||||
_output = '0';
|
||||
operand = '0';
|
||||
} else if (input == "+/-") {
|
||||
if (_output[0] != "-") {
|
||||
_output = "-" + _output;
|
||||
} else {
|
||||
_output = _output.substring(1);
|
||||
}
|
||||
} else if (input == "+" || input == "—" || input == "x" || input == "÷") {
|
||||
first = double.parse(output);
|
||||
operand = input;
|
||||
_output = '0';
|
||||
} else if (input == ".") {
|
||||
if (_output.contains(".")) {
|
||||
print("Decimal error.");
|
||||
return;
|
||||
} else {
|
||||
_output = _output + input;
|
||||
}
|
||||
} else if (input == "=") {
|
||||
second = double.parse(output);
|
||||
if (operand == "+") {
|
||||
_output = (first + second).toString();
|
||||
} else if (operand == "—") {
|
||||
_output = (first - second).toString();
|
||||
} else if (operand == "x") {
|
||||
_output = (first * second).toString();
|
||||
} else if (operand == "÷") {
|
||||
_output = (first / second).toString();
|
||||
}
|
||||
first = 0.0;
|
||||
second = 0.0;
|
||||
operand = "";
|
||||
} else {
|
||||
_output = _output + input;
|
||||
}
|
||||
|
||||
print(_output);
|
||||
setState(() {
|
||||
output = double.parse(_output).toStringAsFixed(2);
|
||||
});
|
||||
} catch (e) {
|
||||
print(e);
|
||||
first = 0;
|
||||
second = 0;
|
||||
_output = '0';
|
||||
operand = '0';
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return MaterialApp(
|
||||
debugShowCheckedModeBanner: false,
|
||||
title: "Calculator",
|
||||
theme: ThemeData(primarySwatch: Colors.brown),
|
||||
home: Scaffold(
|
||||
appBar: AppBar(
|
||||
title: Text("CALCULATOR"),
|
||||
),
|
||||
backgroundColor: Color(0xFF1C1C1C),
|
||||
body: Container(
|
||||
child: Column(
|
||||
mainAxisAlignment: MainAxisAlignment.end,
|
||||
children: [
|
||||
Container(
|
||||
child: Padding(
|
||||
padding: EdgeInsets.only(right: 15, bottom: 10),
|
||||
child: FittedBox(
|
||||
fit: BoxFit.fitWidth,
|
||||
child: Text(
|
||||
output,
|
||||
style: TextStyle(
|
||||
fontSize: 80,
|
||||
color: Color(0xFFFFFFFF),
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
alignment: Alignment(1.0, 1.0),
|
||||
),
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
|
||||
children: [
|
||||
WideButton(
|
||||
text: "Clear",
|
||||
buttonColor: 0xFFD4D4D2,
|
||||
fontColor: 0xFF1C1C1C,
|
||||
size: 24,
|
||||
press: click,
|
||||
),
|
||||
Button(
|
||||
text: "+/-",
|
||||
buttonColor: 0xFFD4D4D2,
|
||||
fontColor: 0xFF1C1C1C,
|
||||
size: 24,
|
||||
press: click,
|
||||
),
|
||||
Button(
|
||||
text: "÷",
|
||||
buttonColor: 0xFFFF9500,
|
||||
fontColor: 0xFFFFFFFF,
|
||||
size: 26,
|
||||
press: click,
|
||||
),
|
||||
],
|
||||
),
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
|
||||
children: [
|
||||
Button(
|
||||
text: "7",
|
||||
buttonColor: 0xff505050,
|
||||
fontColor: 0xFFFFFFFF,
|
||||
size: 24,
|
||||
press: click,
|
||||
),
|
||||
Button(
|
||||
text: "8",
|
||||
buttonColor: 0xff505050,
|
||||
fontColor: 0xFFFFFFFF,
|
||||
size: 24,
|
||||
press: click,
|
||||
),
|
||||
Button(
|
||||
text: "9",
|
||||
buttonColor: 0xff505050,
|
||||
fontColor: 0xFFFFFFFF,
|
||||
size: 24,
|
||||
press: click,
|
||||
),
|
||||
Button(
|
||||
text: "x",
|
||||
buttonColor: 0xFFFF9500,
|
||||
fontColor: 0xFFFFFFFF,
|
||||
size: 26,
|
||||
press: click,
|
||||
),
|
||||
],
|
||||
),
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
|
||||
children: [
|
||||
Button(
|
||||
text: "4",
|
||||
buttonColor: 0xff505050,
|
||||
fontColor: 0xFFFFFFFF,
|
||||
size: 24,
|
||||
press: click,
|
||||
),
|
||||
Button(
|
||||
text: "5",
|
||||
buttonColor: 0xff505050,
|
||||
fontColor: 0xFFFFFFFF,
|
||||
size: 24,
|
||||
press: click,
|
||||
),
|
||||
Button(
|
||||
text: "6",
|
||||
buttonColor: 0xff505050,
|
||||
fontColor: 0xFFFFFFFF,
|
||||
size: 24,
|
||||
press: click,
|
||||
),
|
||||
Button(
|
||||
text: "—",
|
||||
buttonColor: 0xFFFF9500,
|
||||
fontColor: 0xFFFFFFFF,
|
||||
size: 26,
|
||||
press: click,
|
||||
),
|
||||
],
|
||||
),
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
|
||||
children: [
|
||||
Button(
|
||||
text: "1",
|
||||
buttonColor: 0xff505050,
|
||||
fontColor: 0xFFFFFFFF,
|
||||
size: 24,
|
||||
press: click,
|
||||
),
|
||||
Button(
|
||||
text: "2",
|
||||
buttonColor: 0xff505050,
|
||||
fontColor: 0xFFFFFFFF,
|
||||
size: 24,
|
||||
press: click,
|
||||
),
|
||||
Button(
|
||||
text: "3",
|
||||
buttonColor: 0xff505050,
|
||||
fontColor: 0xFFFFFFFF,
|
||||
size: 24,
|
||||
press: click,
|
||||
),
|
||||
Button(
|
||||
text: "+",
|
||||
buttonColor: 0xFFFF9500,
|
||||
fontColor: 0xFFFFFFFF,
|
||||
size: 26,
|
||||
press: click,
|
||||
),
|
||||
],
|
||||
),
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
|
||||
children: [
|
||||
Button(
|
||||
text: "0",
|
||||
buttonColor: 0xff505050,
|
||||
fontColor: 0xFFFFFFFF,
|
||||
size: 24,
|
||||
press: click,
|
||||
),
|
||||
Button(
|
||||
text: "00",
|
||||
buttonColor: 0xff505050,
|
||||
fontColor: 0xFFFFFFFF,
|
||||
size: 24,
|
||||
press: click,
|
||||
),
|
||||
Button(
|
||||
text: ".",
|
||||
buttonColor: 0xff505050,
|
||||
fontColor: 0xFFFFFFFF,
|
||||
size: 24,
|
||||
press: click,
|
||||
),
|
||||
Button(
|
||||
text: "=",
|
||||
buttonColor: 0xFFFF9500,
|
||||
fontColor: 0xFFFFFFFF,
|
||||
size: 26,
|
||||
press: click,
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
class Button extends StatelessWidget {
|
||||
final String text;
|
||||
final int buttonColor;
|
||||
final int fontColor;
|
||||
final double size;
|
||||
final Function press;
|
||||
const Button({
|
||||
required this.text,
|
||||
required this.buttonColor,
|
||||
required this.fontColor,
|
||||
required this.size,
|
||||
required this.press,
|
||||
});
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Container(
|
||||
margin: EdgeInsets.all(10),
|
||||
child: SizedBox(
|
||||
width: 70,
|
||||
height: 70,
|
||||
child: FlatButton(
|
||||
shape: RoundedRectangleBorder(
|
||||
borderRadius: BorderRadius.circular(30.0),
|
||||
),
|
||||
child: Text(
|
||||
text,
|
||||
style: TextStyle(
|
||||
fontSize: size,
|
||||
),
|
||||
),
|
||||
onPressed: () {
|
||||
press(text);
|
||||
},
|
||||
color: Color(buttonColor),
|
||||
textColor: Color(fontColor),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
class WideButton extends StatelessWidget {
|
||||
final String text;
|
||||
final int buttonColor;
|
||||
final int fontColor;
|
||||
final double size;
|
||||
final Function press;
|
||||
const WideButton({
|
||||
required this.text,
|
||||
required this.buttonColor,
|
||||
required this.fontColor,
|
||||
required this.size,
|
||||
required this.press,
|
||||
});
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Container(
|
||||
margin: EdgeInsets.all(10),
|
||||
child: SizedBox(
|
||||
width: 170,
|
||||
height: 70,
|
||||
child: FlatButton(
|
||||
shape: RoundedRectangleBorder(
|
||||
borderRadius: BorderRadius.circular(30.0),
|
||||
),
|
||||
child: Text(
|
||||
text,
|
||||
style: TextStyle(
|
||||
fontSize: size,
|
||||
),
|
||||
),
|
||||
onPressed: () {
|
||||
press(text);
|
||||
},
|
||||
color: Color(buttonColor),
|
||||
textColor: Color(fontColor),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user