Решение математического выражения путем ввода текстового поля во Flutter

1.Краткое изложение моей проблемы Получение решения для следующего выражения: t4.text = ((secondValue - третье значение) - (firstValue - третье значение)). ToString(); Здесь по какой-то причине Flutter напрямую вычитает первое значение из второго и оставляет третье значение.

- Подробная информация о моей цели Использование текстовых полей для получения ввода от использования и отображения вывода в последнем текстовом поле

- Ожидаемые результаты Здесь t4, который является TextEditingController текстового поля 4, должен использовать всю формулу и отображать результат

- Фактические результаты Значение текстового поля 1 вычитается из текстового поля 2, и результат отображается в текстовом поле 4, текстовое поле 3 не используется.

-Что я пробовал до сих пор - Погуглил решение и попытался использовать некоторые пакеты, такие как math_expressions и т. Д., Но не смог понять это

-Вот код -

      class Watchlist extends StatefulWidget {
  @override
  _WatchlistState createState() => _WatchlistState();
}

class _WatchlistState extends State<Watchlist> {


TextEditingController t1 = TextEditingController();
TextEditingController t2 = TextEditingController();
TextEditingController t3 = TextEditingController();
TextEditingController t4 = TextEditingController();

//  List<bool> isSelected = [false, false];
bool long;



  @override
  Widget build(BuildContext context) {
    return Container(
      decoration: BoxDecoration(
        color: Colors.white,
        boxShadow: [kCalculatorShadow] ,
        borderRadius: BorderRadius.all(Radius.circular(10)),
      ),
      margin: EdgeInsets.symmetric(vertical: MediaQuery.of(context).size.height * 0.060, horizontal: MediaQuery.of(context).size.width * 0.07),
      child: Padding(
        padding:  EdgeInsets.symmetric(horizontal: MediaQuery.of(context).size.height * 0.025),
        child: Column(
          children: [
            Column(
              crossAxisAlignment: CrossAxisAlignment.start,
                children: [
                  SizedBox(height: MediaQuery.of(context).size.height*0.055),
                  TextField(
                      keyboardType: TextInputType.number,//style: TextStyle(fontWeight: FontWeight.w300, color: Colors.white),
                      cursorColor: Colors.blue[900], //Blinking cursor that comes when typing number
                      controller: t1,
                      onChanged: (value){
                        calculate();
                      },
                      decoration: InputDecoration(
                        labelText: 'Initial Price',
                        labelStyle: TextStyle(fontWeight: FontWeight.w400, color: appBarColor),
                    //   fillColor: Colors.white,
                        enabledBorder: OutlineInputBorder(
                          borderSide: BorderSide(color: Colors.blue[900],width: 2),
                          borderRadius: BorderRadius.circular(18.0),
                        ),
                        focusedBorder: OutlineInputBorder(
                          borderSide: BorderSide(color: Colors.blue,width: 2),
                          borderRadius: BorderRadius.all(Radius.circular(30)),
                        ),
                      ),
                    ),
                  SizedBox(height: MediaQuery.of(context).size.height*0.05),
                  TextField(
                        keyboardType: TextInputType.number,//style: TextStyle(fontWeight: FontWeight.w300, color: Colors.white),
                        cursorColor: Colors.blue[900], //Blinking cursor that comes when typing number
                        controller: t2,
                        onChanged: (value){
                          calculate();
                        },
                        decoration: InputDecoration(
                          labelText: 'Target Price',
                          labelStyle: TextStyle(fontWeight: FontWeight.w400, color: appBarColor),
                      //   fillColor: Colors.white,
                          enabledBorder: OutlineInputBorder(
                            borderSide: BorderSide(color: Colors.blue[900],width: 2),
                            borderRadius: BorderRadius.circular(18.0),
                          ),
                          focusedBorder: OutlineInputBorder(
                            borderSide: BorderSide(color: Colors.blue,width: 2),
                            borderRadius: BorderRadius.all(Radius.circular(30)),
                          ),
                        ),
                      ),
                  SizedBox(height: MediaQuery.of(context).size.height*0.05),
                  Row(
                    mainAxisAlignment: MainAxisAlignment.spaceAround,
                    children: [
                      Container(
                          width:  MediaQuery.of(context).size.width*0.37,
                      child: TextField(
                        keyboardType: TextInputType.number,//style: TextStyle(fontWeight: FontWeight.w300, color: Colors.white),
                        cursorColor: Colors.blue[900], //Blinking cursor that comes when typing number
                        controller: t3,
                        onChanged: (value){
                          calculate();
                        },
                        decoration: InputDecoration(
                          labelText: 'Maker/Taker Fee',
                          labelStyle: TextStyle(fontWeight: FontWeight.w400, color: Colors.redAccent,fontSize:  MediaQuery.of(context).size.height*0.02),
                       //   hintText: 'Default: 0.2',
                          enabledBorder: OutlineInputBorder(
                            borderSide: BorderSide(color: Colors.red,width: 2),
                            borderRadius: BorderRadius.circular(18.0),
                          ),
                          focusedBorder: OutlineInputBorder(
                            borderSide: BorderSide(color: Colors.red,width: 2),
                            borderRadius: BorderRadius.all(Radius.circular(30)),
                          ),
                        ),
                      ),
                      //     child: CustomInputTextField(labelText: 'Maker/Taker Fee', controller: t2)),
                      // SizedBox(height: MediaQuery.of(context).size.height*0.05
                          ),
                      SizedBox(width: MediaQuery.of(context).size.width*0.01),
                      LiteRollingSwitch(
                        value: true,
                        textOn: 'Long',
                        textOff: 'Short',
                        colorOn: Colors.green,
                        colorOff: Colors.deepOrange,
                        iconOn: Icons.lightbulb_outline,
                        iconOff: Icons.power_settings_new,
                        animationDuration: const Duration(milliseconds: 200),
                        onChanged: (bool state) {
                          print('turned ${(state) ? 'Long On' : 'Short On'}');
                          if(state == true){ /// long will be used to switch case between which formula to use for calculation
                            long = true;
                          }else{
                            long = false;
                          }
                        },
                      ),
                    ],
                  ),
                  SizedBox(height: MediaQuery.of(context).size.height*0.05),
                  ]),
                  AbsorbPointer(
                                      child: TextField(
                          keyboardType: TextInputType.number,//style: TextStyle(fontWeight: FontWeight.w300, color: Colors.white),
                         // cursorColor: Colors.blue[900], //Blinking cursor that comes when typing number
                          controller: t4,
                          onChanged: (value){
                            calculate();
                          },
                          decoration: InputDecoration(
                            labelText: 'Result',
                            labelStyle: TextStyle(fontWeight: FontWeight.w400, color: appBarColor),
                            enabledBorder: OutlineInputBorder(
                              borderSide: BorderSide(color: Colors.greenAccent,width: 2),
                              borderRadius: BorderRadius.circular(18.0),
                            ),
                          
                          ),
                        ),
                  ),
                  SizedBox(height: MediaQuery.of(context).size.height*0.05),
          ]),
      ),
    );
  }
 void calculate() {
    if (t1.text.trim().isNotEmpty &&
        t2.text.trim().isNotEmpty &&
        t3.text.trim().isNotEmpty) {
      if(long == true){
        final firstValue = double.parse(t1.text);
        final secondValue = double.parse(t2.text);
        final thirdvalue = double.parse(t3.text);
        t4.text = ((secondValue - thirdvalue) - (firstValue - thirdvalue)).toString();
      }else{
        final firstValue = double.parse(t1.text);
        final secondValue = double.parse(t2.text);
        final thirdvalue = double.parse(t3.text);
       t4.text = (firstValue - secondValue -thirdvalue).toString();
      }
    }
  }
}

0 ответов

Другие вопросы по тегам