๐ Simplest Calculator
A lightweight Flutter package that provides basic arithmetic operations:
โ
Addition (+)
โ
Subtraction (-)
โ
Multiplication (*)
โ
Division (/) (with division-by-zero handling)
๐ Installation
To use this package, add the following to your pubspec.yaml file:
dependencies:
simplest_calculator: ^0.0.1
Then, run:
flutter pub get
Alternatively, if you want to use the latest version from GitHub:
dependencies:
simplest_calculator:
git: https://github.com/roscoekerby/simplest_calculator.git
๐ Usage
Import the package:
import 'package:simplest_calculator/simplest_calculator.dart';
void main() {
final calculator = SimplestCalculator();
print(calculator.add(10, 5)); // 15
print(calculator.subtract(10, 5)); // 5
print(calculator.multiply(10, 5)); // 50
print(calculator.divide(10, 5)); // 2.0
// Handling division by zero
try {
print(calculator.divide(10, 0));
} catch (e) {
print(e); // Output: Cannot divide by zero
}
}
๐ API Reference
| Method | Description | Example Usage |
|---|---|---|
add(a, b) |
Adds two numbers | calculator.add(2, 3) โ 5 |
subtract(a, b) |
Subtracts second number from the first | calculator.subtract(5, 3) โ 2 |
multiply(a, b) |
Multiplies two numbers | calculator.multiply(4, 5) โ 20 |
divide(a, b) |
Divides first number by the second (checks for division by zero) | calculator.divide(10, 2) โ 5.0 |
๐ Example Application
An interactive example app is included. To run it:
cd example
flutter run
Example UI Implementation:
import 'package:flutter/material.dart';
import 'package:simplest_calculator/simplest_calculator.dart';
void main() {
runApp(CalculatorApp());
}
class CalculatorApp extends StatelessWidget {
final SimplestCalculator calculator = SimplestCalculator();
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(title: const Text('Simplest Calculator Example')),
body: CalculatorScreen(calculator),
),
);
}
}
class CalculatorScreen extends StatefulWidget {
final SimplestCalculator calculator;
const CalculatorScreen(this.calculator, {Key? key}) : super(key: key);
@override
_CalculatorScreenState createState() => _CalculatorScreenState();
}
class _CalculatorScreenState extends State<CalculatorScreen> {
double num1 = 0, num2 = 0;
double? result;
void calculate(String operation) {
setState(() {
switch (operation) {
case '+':
result = widget.calculator.add(num1, num2);
break;
case '-':
result = widget.calculator.subtract(num1, num2);
break;
case '*':
result = widget.calculator.multiply(num1, num2);
break;
case '/':
try {
result = widget.calculator.divide(num1, num2);
} catch (e) {
result = double.nan;
}
break;
}
});
}
@override
Widget build(BuildContext context) {
return Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
TextField(
decoration: const InputDecoration(labelText: "Enter first number"),
keyboardType: TextInputType.number,
onChanged: (value) => num1 = double.tryParse(value) ?? 0,
),
TextField(
decoration: const InputDecoration(labelText: "Enter second number"),
keyboardType: TextInputType.number,
onChanged: (value) => num2 = double.tryParse(value) ?? 0,
),
const SizedBox(height: 20),
Wrap(
spacing: 10,
children: ['+', '-', '*', '/'].map((op) {
return ElevatedButton(
onPressed: () => calculate(op),
child: Text(op),
);
}).toList(),
),
const SizedBox(height: 20),
Text(
"Result: ${result ?? ''}",
style: const TextStyle(fontSize: 24, fontWeight: FontWeight.bold),
),
],
),
);
}
}
๐งช Running Tests
This package includes unit tests to verify functionality. To run tests:
flutter test
Test file (test/simplest_calculator_test.dart):
import 'package:flutter_test/flutter_test.dart';
import 'package:simplest_calculator/simplest_calculator.dart';
void main() {
final calculator = SimplestCalculator();
test('Addition works correctly', () {
expect(calculator.add(2, 3), 5);
expect(calculator.add(-2, -3), -5);
});
test('Subtraction works correctly', () {
expect(calculator.subtract(5, 3), 2);
expect(calculator.subtract(3, 5), -2);
});
test('Multiplication works correctly', () {
expect(calculator.multiply(2, 3), 6);
expect(calculator.multiply(-2, 3), -6);
});
test('Division works correctly', () {
expect(calculator.divide(6, 3), 2);
expect(calculator.divide(-6, 3), -2);
});
test('Division by zero throws an error', () {
expect(() => calculator.divide(6, 0), throwsArgumentError);
});
}
๐ Contributing
We welcome contributions! To contribute:
-
Fork the repository:
Click on the Fork button at the top-right corner of the repo. -
Clone the repository:
git clone https://github.com/roscoekerby/simplest_calculator.git cd simplest_calculator -
Create a new branch:
git checkout -b feature-yourfeature -
Make your changes and commit:
git add . git commit -m "Added a new feature" -
Push and open a Pull Request:
git push origin feature-yourfeature
๐ License
This package is licensed under the MIT License. See the LICENSE file for details.
๐ Contact
- Author: Roscoe Kerby
- GitHub: roscoekerby
- Email: roscoe.kerby@gmail.com
๐ Final Notes
This package is designed to be minimalistic yet functional. Future updates may include:
โ
Scientific calculator operations (exponents, square roots, logs)
โ
Support for fractions & decimals
โ
Graphing functionalities