From c43ea4977d4c043849eb12daf0d63f7f44c6a984 Mon Sep 17 00:00:00 2001 From: Yasien Mac Mini Date: Tue, 11 Mar 2025 10:19:14 +0200 Subject: [PATCH] move tools into app_tools folder --- .../calculator/app_tools/simple_calc.dart | 304 ++++++++++++++++++ .../calculator/{ => app_tools}/tip_calc.dart | 175 +++++----- .../mih_packages/calculator/simple_calc.dart | 283 ---------------- 3 files changed, 398 insertions(+), 364 deletions(-) create mode 100644 Frontend/lib/mih_packages/calculator/app_tools/simple_calc.dart rename Frontend/lib/mih_packages/calculator/{ => app_tools}/tip_calc.dart (73%) delete mode 100644 Frontend/lib/mih_packages/calculator/simple_calc.dart diff --git a/Frontend/lib/mih_packages/calculator/app_tools/simple_calc.dart b/Frontend/lib/mih_packages/calculator/app_tools/simple_calc.dart new file mode 100644 index 00000000..03714c87 --- /dev/null +++ b/Frontend/lib/mih_packages/calculator/app_tools/simple_calc.dart @@ -0,0 +1,304 @@ +import 'package:Mzansi_Innovation_Hub/main.dart'; +import 'package:Mzansi_Innovation_Hub/mih_components/mih_inputs_and_buttons/mih_button.dart'; +import 'package:Mzansi_Innovation_Hub/mih_components/mih_package/mih-app_tool_body.dart'; +import 'package:flutter/material.dart'; +import 'package:math_expressions/math_expressions.dart'; + +class SimpleCalc extends StatefulWidget { + const SimpleCalc({super.key}); + + @override + State createState() => _SimpleCalcState(); +} + +class _SimpleCalcState extends State { + var userInput = ''; + var answer = '0'; + + // Array of button + final List buttons = [ + 'C', + '(', + ')', + 'D', + '7', + '8', + '9', + '/', + '4', + '5', + '6', + 'x', + '1', + '2', + '3', + '-', + '0', + '.', + '=', + '+', + ]; + +// function to calculate the input operation + void equalPressed() { + String finaluserinput = userInput; + finaluserinput = userInput.replaceAll('x', '*'); + + Parser p = Parser(); + Expression exp = p.parse(finaluserinput); + ContextModel cm = ContextModel(); + double eval = exp.evaluate(EvaluationType.REAL, cm); + answer = eval.toString(); + } + + @override + Widget build(BuildContext context) { + return MihAppToolBody( + borderOn: false, + bodyItem: getBody(), + ); + } + + Widget getBody() { + double width = MediaQuery.sizeOf(context).width; + double height = MediaQuery.sizeOf(context).height; + var padding = MediaQuery.paddingOf(context); + double newheight = height - padding.top - padding.bottom; + print("width: $width"); + print("height: $height"); + print("newheight: $newheight"); + double calcWidth = 500; + if (MzanziInnovationHub.of(context)!.theme.screenType == "desktop") { + if (height < 700) { + calcWidth = 300; + } + } + return Padding( + padding: const EdgeInsets.all(10.0), + child: Column( + mainAxisAlignment: MainAxisAlignment.start, + mainAxisSize: MainAxisSize.min, + children: [ + Text( + "Simple Calculator", + textAlign: TextAlign.center, + style: TextStyle( + fontSize: 25, + fontWeight: FontWeight.bold, + color: MzanziInnovationHub.of(context)!.theme.secondaryColor(), + ), + ), + Divider( + color: MzanziInnovationHub.of(context)!.theme.secondaryColor()), + const SizedBox(height: 10), + Container( + //color: Colors.white, + padding: const EdgeInsets.all(20), + alignment: Alignment.centerRight, + child: Text( + userInput, + style: TextStyle( + fontSize: 18, + color: MzanziInnovationHub.of(context)!.theme.secondaryColor(), + ), + ), + ), + Container( + width: double.infinity, + //color: Colors.white, + padding: const EdgeInsets.all(15), + alignment: Alignment.centerRight, + child: Text( + answer, + style: TextStyle( + fontSize: 30, + color: + MzanziInnovationHub.of(context)!.theme.secondaryColor(), + fontWeight: FontWeight.bold), + ), + ), + Container( + alignment: Alignment.centerRight, + child: SizedBox( + width: calcWidth, + child: GridView.builder( + physics: const NeverScrollableScrollPhysics(), + shrinkWrap: true, + // padding: EdgeInsets.only( + // left: width / 10, + // right: width / 10, + // bottom: height / 15, + // //top: 20, + // ), + // shrinkWrap: true, + itemCount: buttons.length, + gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount( + crossAxisCount: 4, + //mainAxisExtent: 150, + ), + itemBuilder: (context, index) { + // Clear Button + if (index == 0) { + return Padding( + padding: const EdgeInsets.all(4.0), + child: MIHButton( + onTap: () { + setState(() { + userInput = ''; + answer = '0'; + }); + }, + buttonText: buttons[index], + buttonColor: MzanziInnovationHub.of(context)! + .theme + .messageTextColor(), + textColor: MzanziInnovationHub.of(context)! + .theme + .primaryColor(), + ), + ); + } + + // +/- button + else if (index == 1) { + return Padding( + padding: const EdgeInsets.all(4.0), + child: MIHButton( + onTap: () { + setState(() { + userInput += buttons[index]; + }); + }, + buttonText: buttons[index], + buttonColor: MzanziInnovationHub.of(context)! + .theme + .messageTextColor(), + textColor: MzanziInnovationHub.of(context)! + .theme + .primaryColor(), + ), + ); + } + // % Button + else if (index == 2) { + return Padding( + padding: const EdgeInsets.all(4.0), + child: MIHButton( + onTap: () { + setState(() { + userInput += buttons[index]; + }); + }, + buttonText: buttons[index], + buttonColor: MzanziInnovationHub.of(context)! + .theme + .messageTextColor(), + textColor: MzanziInnovationHub.of(context)! + .theme + .primaryColor(), + ), + ); + } + // Delete Button + else if (index == 3) { + return Padding( + padding: const EdgeInsets.all(4.0), + child: MIHButton( + onTap: () { + setState(() { + userInput = + userInput.substring(0, userInput.length - 1); + }); + }, + buttonText: buttons[index], + buttonColor: + MzanziInnovationHub.of(context)!.theme.errorColor(), + textColor: MzanziInnovationHub.of(context)! + .theme + .primaryColor(), + ), + ); + } + // Equal_to Button + else if (index == 18) { + return Padding( + padding: const EdgeInsets.all(4.0), + child: MIHButton( + onTap: () { + setState(() { + equalPressed(); + }); + }, + buttonText: buttons[index], + buttonColor: MzanziInnovationHub.of(context)! + .theme + .successColor(), + textColor: MzanziInnovationHub.of(context)! + .theme + .primaryColor(), + ), + ); + } + // +, -, / x buttons + else if (index == 7 || + index == 11 || + index == 15 || + index == 19) { + return Padding( + padding: const EdgeInsets.all(4.0), + child: MIHButton( + onTap: () { + if (answer == "0") { + setState(() { + userInput += buttons[index]; + }); + } else { + setState(() { + userInput = answer; + answer = "0"; + userInput += buttons[index]; + }); + } + // setState(() { + // userInput += buttons[index]; + // }); + }, + buttonText: buttons[index], + buttonColor: MzanziInnovationHub.of(context)! + .theme + .messageTextColor(), + textColor: MzanziInnovationHub.of(context)! + .theme + .primaryColor(), + ), + ); + } + // other buttons + else { + return Padding( + padding: const EdgeInsets.all(4.0), + child: MIHButton( + onTap: () { + setState(() { + userInput += buttons[index]; + }); + }, + buttonText: buttons[index], + buttonColor: MzanziInnovationHub.of(context)! + .theme + .secondaryColor(), + textColor: MzanziInnovationHub.of(context)! + .theme + .primaryColor(), + ), + ); + } + }, + ), + ), + ), + ], + ), + ); + } +} diff --git a/Frontend/lib/mih_packages/calculator/tip_calc.dart b/Frontend/lib/mih_packages/calculator/app_tools/tip_calc.dart similarity index 73% rename from Frontend/lib/mih_packages/calculator/tip_calc.dart rename to Frontend/lib/mih_packages/calculator/app_tools/tip_calc.dart index 3e8e2e4e..f63f81eb 100644 --- a/Frontend/lib/mih_packages/calculator/tip_calc.dart +++ b/Frontend/lib/mih_packages/calculator/app_tools/tip_calc.dart @@ -3,6 +3,7 @@ import 'package:Mzansi_Innovation_Hub/mih_components/mih_inputs_and_buttons/mih_ import 'package:Mzansi_Innovation_Hub/mih_components/mih_inputs_and_buttons/mih_dropdown_input.dart'; import 'package:Mzansi_Innovation_Hub/mih_components/mih_inputs_and_buttons/mih_number_input.dart'; import 'package:Mzansi_Innovation_Hub/mih_components/mih_layout/mih_window.dart'; +import 'package:Mzansi_Innovation_Hub/mih_components/mih_package/mih-app_tool_body.dart'; import 'package:Mzansi_Innovation_Hub/mih_components/mih_pop_up_messages/mih_error_message.dart'; import 'package:flutter/material.dart'; import 'package:font_awesome_flutter/font_awesome_flutter.dart'; @@ -260,91 +261,103 @@ class _TipCalcState extends State { @override Widget build(BuildContext context) { - return Column( - mainAxisSize: MainAxisSize.max, - children: [ - Text( - "Tip Calculator", - textAlign: TextAlign.center, - style: TextStyle( - fontSize: 25, - fontWeight: FontWeight.bold, - color: MzanziInnovationHub.of(context)!.theme.secondaryColor(), + return MihAppToolBody( + borderOn: false, + bodyItem: getBody(), + ); + } + + Widget getBody() { + return Padding( + padding: const EdgeInsets.all(10.0), + child: Column( + mainAxisSize: MainAxisSize.max, + children: [ + Text( + "Tip Calculator", + textAlign: TextAlign.center, + style: TextStyle( + fontSize: 25, + fontWeight: FontWeight.bold, + color: MzanziInnovationHub.of(context)!.theme.secondaryColor(), + ), ), - ), - Divider(color: MzanziInnovationHub.of(context)!.theme.secondaryColor()), - const SizedBox(height: 10), - MIHNumberField( - controller: billAmountController, - hintText: "Bill Amount", - editable: true, - required: true, - enableDecimal: true, - ), - const SizedBox(height: 10), - MIHNumberField( - controller: tipPercentageController, - hintText: "Tip %", - editable: true, - required: true, - enableDecimal: false, - ), - const SizedBox(height: 10), - MIHDropdownField( - controller: splitBillController, - hintText: "Split Bill", - dropdownOptions: const ["Yes", "No"], - required: true, - editable: true, - enableSearch: false, - ), - const SizedBox(height: 10), - ValueListenableBuilder( - valueListenable: splitValue, - builder: (BuildContext context, String value, Widget? child) { - return Visibility( - visible: value == "Yes", - child: Column( - children: [ - MIHNumberField( - controller: noPeopleController, - hintText: "No. of People", - editable: true, - required: true, - enableDecimal: false, - ), - const SizedBox(height: 10), - ], - ), - ); - }, - ), - SizedBox( - width: double.infinity, - height: 50, - child: MIHButton( - onTap: () { - validateInput(); + Divider( + color: MzanziInnovationHub.of(context)!.theme.secondaryColor()), + const SizedBox(height: 10), + MIHNumberField( + controller: billAmountController, + hintText: "Bill Amount", + editable: true, + required: true, + enableDecimal: true, + ), + const SizedBox(height: 10), + MIHNumberField( + controller: tipPercentageController, + hintText: "Tip %", + editable: true, + required: true, + enableDecimal: false, + ), + const SizedBox(height: 10), + MIHDropdownField( + controller: splitBillController, + hintText: "Split Bill", + dropdownOptions: const ["Yes", "No"], + required: true, + editable: true, + enableSearch: false, + ), + const SizedBox(height: 10), + ValueListenableBuilder( + valueListenable: splitValue, + builder: (BuildContext context, String value, Widget? child) { + return Visibility( + visible: value == "Yes", + child: Column( + children: [ + MIHNumberField( + controller: noPeopleController, + hintText: "No. of People", + editable: true, + required: true, + enableDecimal: false, + ), + const SizedBox(height: 10), + ], + ), + ); }, - buttonText: "Calculate", - buttonColor: MzanziInnovationHub.of(context)!.theme.successColor(), - textColor: MzanziInnovationHub.of(context)!.theme.primaryColor(), ), - ), - const SizedBox(height: 10), - SizedBox( - width: double.infinity, - height: 50, - child: MIHButton( - onTap: () { - clearInput(); - }, - buttonText: "Clear", - buttonColor: MzanziInnovationHub.of(context)!.theme.errorColor(), - textColor: MzanziInnovationHub.of(context)!.theme.primaryColor(), + SizedBox( + width: double.infinity, + height: 50, + child: MIHButton( + onTap: () { + validateInput(); + }, + buttonText: "Calculate", + buttonColor: + MzanziInnovationHub.of(context)!.theme.successColor(), + textColor: MzanziInnovationHub.of(context)!.theme.primaryColor(), + ), ), - ), - ], + const SizedBox(height: 10), + SizedBox( + width: double.infinity, + height: 50, + child: MIHButton( + onTap: () { + clearInput(); + }, + buttonText: "Clear", + buttonColor: MzanziInnovationHub.of(context)!.theme.errorColor(), + textColor: MzanziInnovationHub.of(context)!.theme.primaryColor(), + ), + ), + ], + ), ); } } diff --git a/Frontend/lib/mih_packages/calculator/simple_calc.dart b/Frontend/lib/mih_packages/calculator/simple_calc.dart deleted file mode 100644 index 495353e6..00000000 --- a/Frontend/lib/mih_packages/calculator/simple_calc.dart +++ /dev/null @@ -1,283 +0,0 @@ -import 'package:Mzansi_Innovation_Hub/main.dart'; -import 'package:Mzansi_Innovation_Hub/mih_components/mih_inputs_and_buttons/mih_button.dart'; -import 'package:flutter/material.dart'; -import 'package:math_expressions/math_expressions.dart'; - -class SimpleCalc extends StatefulWidget { - const SimpleCalc({super.key}); - - @override - State createState() => _SimpleCalcState(); -} - -class _SimpleCalcState extends State { - var userInput = ''; - var answer = '0'; - - // Array of button - final List buttons = [ - 'C', - '(', - ')', - 'D', - '7', - '8', - '9', - '/', - '4', - '5', - '6', - 'x', - '1', - '2', - '3', - '-', - '0', - '.', - '=', - '+', - ]; - -// function to calculate the input operation - void equalPressed() { - String finaluserinput = userInput; - finaluserinput = userInput.replaceAll('x', '*'); - - Parser p = Parser(); - Expression exp = p.parse(finaluserinput); - ContextModel cm = ContextModel(); - double eval = exp.evaluate(EvaluationType.REAL, cm); - answer = eval.toString(); - } - - @override - Widget build(BuildContext context) { - double width = MediaQuery.sizeOf(context).width; - double height = MediaQuery.sizeOf(context).height; - var padding = MediaQuery.paddingOf(context); - double newheight = height - padding.top - padding.bottom; - print("width: $width"); - print("height: $height"); - print("newheight: $newheight"); - double calcWidth = 500; - if (MzanziInnovationHub.of(context)!.theme.screenType == "desktop") { - if (height < 700) { - calcWidth = 300; - } - } - return Column( - mainAxisAlignment: MainAxisAlignment.end, - mainAxisSize: MainAxisSize.min, - children: [ - Text( - "Simple Calculator", - textAlign: TextAlign.center, - style: TextStyle( - fontSize: 25, - fontWeight: FontWeight.bold, - color: MzanziInnovationHub.of(context)!.theme.secondaryColor(), - ), - ), - Divider(color: MzanziInnovationHub.of(context)!.theme.secondaryColor()), - const SizedBox(height: 10), - Container( - //color: Colors.white, - padding: const EdgeInsets.all(20), - alignment: Alignment.centerRight, - child: Text( - userInput, - style: TextStyle( - fontSize: 18, - color: MzanziInnovationHub.of(context)!.theme.secondaryColor(), - ), - ), - ), - Container( - width: double.infinity, - //color: Colors.white, - padding: const EdgeInsets.all(15), - alignment: Alignment.centerRight, - child: Text( - answer, - style: TextStyle( - fontSize: 30, - color: MzanziInnovationHub.of(context)!.theme.secondaryColor(), - fontWeight: FontWeight.bold), - ), - ), - Container( - alignment: Alignment.centerRight, - child: SizedBox( - width: calcWidth, - child: GridView.builder( - physics: const NeverScrollableScrollPhysics(), - shrinkWrap: true, - // padding: EdgeInsets.only( - // left: width / 10, - // right: width / 10, - // bottom: height / 15, - // //top: 20, - // ), - // shrinkWrap: true, - itemCount: buttons.length, - gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount( - crossAxisCount: 4, - //mainAxisExtent: 150, - ), - itemBuilder: (context, index) { - // Clear Button - if (index == 0) { - return Padding( - padding: const EdgeInsets.all(4.0), - child: MIHButton( - onTap: () { - setState(() { - userInput = ''; - answer = '0'; - }); - }, - buttonText: buttons[index], - buttonColor: MzanziInnovationHub.of(context)! - .theme - .messageTextColor(), - textColor: - MzanziInnovationHub.of(context)!.theme.primaryColor(), - ), - ); - } - - // +/- button - else if (index == 1) { - return Padding( - padding: const EdgeInsets.all(4.0), - child: MIHButton( - onTap: () { - setState(() { - userInput += buttons[index]; - }); - }, - buttonText: buttons[index], - buttonColor: MzanziInnovationHub.of(context)! - .theme - .messageTextColor(), - textColor: - MzanziInnovationHub.of(context)!.theme.primaryColor(), - ), - ); - } - // % Button - else if (index == 2) { - return Padding( - padding: const EdgeInsets.all(4.0), - child: MIHButton( - onTap: () { - setState(() { - userInput += buttons[index]; - }); - }, - buttonText: buttons[index], - buttonColor: MzanziInnovationHub.of(context)! - .theme - .messageTextColor(), - textColor: - MzanziInnovationHub.of(context)!.theme.primaryColor(), - ), - ); - } - // Delete Button - else if (index == 3) { - return Padding( - padding: const EdgeInsets.all(4.0), - child: MIHButton( - onTap: () { - setState(() { - userInput = - userInput.substring(0, userInput.length - 1); - }); - }, - buttonText: buttons[index], - buttonColor: - MzanziInnovationHub.of(context)!.theme.errorColor(), - textColor: - MzanziInnovationHub.of(context)!.theme.primaryColor(), - ), - ); - } - // Equal_to Button - else if (index == 18) { - return Padding( - padding: const EdgeInsets.all(4.0), - child: MIHButton( - onTap: () { - setState(() { - equalPressed(); - }); - }, - buttonText: buttons[index], - buttonColor: - MzanziInnovationHub.of(context)!.theme.successColor(), - textColor: - MzanziInnovationHub.of(context)!.theme.primaryColor(), - ), - ); - } - // +, -, / x buttons - else if (index == 7 || - index == 11 || - index == 15 || - index == 19) { - return Padding( - padding: const EdgeInsets.all(4.0), - child: MIHButton( - onTap: () { - if (answer == "0") { - setState(() { - userInput += buttons[index]; - }); - } else { - setState(() { - userInput = answer; - answer = "0"; - userInput += buttons[index]; - }); - } - // setState(() { - // userInput += buttons[index]; - // }); - }, - buttonText: buttons[index], - buttonColor: MzanziInnovationHub.of(context)! - .theme - .messageTextColor(), - textColor: - MzanziInnovationHub.of(context)!.theme.primaryColor(), - ), - ); - } - // other buttons - else { - return Padding( - padding: const EdgeInsets.all(4.0), - child: MIHButton( - onTap: () { - setState(() { - userInput += buttons[index]; - }); - }, - buttonText: buttons[index], - buttonColor: MzanziInnovationHub.of(context)! - .theme - .secondaryColor(), - textColor: - MzanziInnovationHub.of(context)!.theme.primaryColor(), - ), - ); - } - }, - ), - ), - ), - ], - ); - } -}