Calculator operations

A simple Flutter package to calculate numbers.

You can perform operations in the following ways:

Calculator.add(double a, double b)
Calculator.sub(double a, double b)
Calculator.multiply(double a, double b)
Calculator.divide(double a, double b)
Calculator.power(double a, double b)
Calculator.square(double  a)
Calculator.cube(double a)
Calculator.squareRoot(double a)
Calculator.cubeRoot(double a)
Calculator.root(double a,double b)
Calculator.percent(double a,double b)

Installation

Add this to your pubspec.yaml:

dependencies:
  calculator_flutter: ^1.0.0
import 'package:flutter/material.dart';
import 'calculator_flutter.dart'; 

class CalculatorUI extends StatefulWidget {
  const CalculatorUI({super.key});

  @override
  CalculatorUIState createState() => CalculatorUIState();
}

class CalculatorUIState extends State<CalculatorUI> {
  String display = "0";
  double? num1;
  double? num2;
  String? operator;

  void buttonPressed(String text) {
    setState(() {
      if (text == "C") {
        display = "0";
        num1 = num2 = null;
        operator = null;
      } else if (["+", "-", "×", "÷", "^", "√", "∛", "%"].contains(text)) {
        operator = text;
        num1 = double.tryParse(display);
        display = "0";
      } else if (text == "=") {
        num2 = double.tryParse(display);
        if (num1 != null && operator != null) {
          switch (operator) {
            case "+":
              display = Calculator.add(num1!, num2!).toString();
              break;
            case "-":
              display = Calculator.sub(num1!, num2!).toString();
              break;
            case "×":
              display = Calculator.multiply(num1!, num2!).toString();
              break;
            case "÷":
              display = Calculator.divide(num1!, num2!).toString();
              break;
            case "^":
              display = Calculator.power(num1!, num2!).toString();
              break;
            case "√":
              display = Calculator.squareRoot(num1!).toString();
              break;
            case "∛":
              display = Calculator.cubeRoot(num1!).toString();
              break;
            case "%":
              display = Calculator.percent(num1!, num2!).toString();
              break;
          }
        }
        operator = null;
      } else {
        display = display == "0" ? text : display + text;
      }
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title:const Text("Advanced Calculator"),
      ),
      body: Column(
        mainAxisAlignment: MainAxisAlignment.end,
        children: [
          Expanded(
            child: Container(
              alignment: Alignment.bottomRight,
              padding:const EdgeInsets.all(20),
              child: Text(
                display,
                style:const TextStyle(fontSize: 48, fontWeight: FontWeight.bold),
              ),
            ),
          ),
          ..._buildKeypad()
        ],
      ),
    );
  }

  List<Widget> _buildKeypad() {
    const keys = [
      ["7", "8", "9", "÷"],
      ["4", "5", "6", "×"],
      ["1", "2", "3", "-"],
      ["C", "0", "=", "+"],
      ["√", "∛", "^", "%"],
    ];

    return keys.map((row) {
      return Row(
        mainAxisAlignment: MainAxisAlignment.spaceEvenly,
        children: row.map((key) {
          return ElevatedButton(
            onPressed: () => buttonPressed(key),
            style: ElevatedButton.styleFrom(
              padding:const EdgeInsets.all(16),
              minimumSize:const Size(64, 64),
            ),
            child: Text(key, style:const TextStyle(fontSize: 24)),
          );
        }).toList(),
      );
    }).toList();
  }
}