Flutter - передача расчета в виде текста на другой экран

Я новичок во Flutter и программировании в целом, и я создаю свое первое простое приложение для преобразования температуры по Фаренгейту в Цельсий (и наоборот).

Что я хочу, чтобы мое приложение делало:

Пользователю необходимо ввести числовое значение в текстовое поле и нажать кнопку. После нажатия на кнопку пользователя нужно перенести на второй экран с простым текстовым виджетом, отображающим результат конвертации.

Я уже все это построил. Моя единственная проблема в том, что фактический результат не отображается на втором экране. Прямо сейчас значение, введенное в текстовое поле, просто передается на второй экран. Это не делает расчет. Я могу отобразить диалоговое окно с предупреждением, которое отлично работает и показывает правильный расчет, но я просто хочу, чтобы на втором экране вместо этого был простой текст, и это не работает для меня.

Скриншоты прикреплены к сообщению.

Может ли кто-нибудь помочь мне решить эту проблему? Спасибо.

Снимок экрана

основной.дротик:

import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:temp_conversion/screentwo.dart';
import 'assets/global.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  build(BuildContext context) {
    return MaterialApp(
      home: TempApp(),
    );
  }
}

class TempApp extends StatefulWidget {
  @override
  TempState createState() => TempState();
}

class TempState extends State<TempApp> {

  String value;
  double input;
  double output;
  bool fOrC;

  @override
  void initState() {
    super.initState();
    input = 0.0;
    output = 0.0;
    fOrC = true;
  }



                                           // SEARCH BAR
  @override
  Widget build(BuildContext context) {

    CupertinoTextField inputField = CupertinoTextField(

      padding: EdgeInsets.all(7),
      keyboardType: TextInputType.numberWithOptions(decimal: true),
      onChanged: (text) {
        value = text;
        try {
          input = double.parse(text);
        } catch (e) {
          input = 0.0;
        }
        },

      decoration: BoxDecoration(
        border: Border.all(color: Colors.grey),
        color: Colors.white,
        borderRadius: BorderRadius.all(Radius.circular(17),
        ),
      ),

      placeholder: "Value in ${fOrC == true ? 'Fahrenheit' : 'Celsius'}",
//      textAlign: TextAlign.center,
    );





                                        // (INVISIBLE) APP BAR
    AppBar appBar = AppBar(
      backgroundColor: Colors.white,
      elevation: 0,
    );




                                                //RADIO
    Container tempSwitch = Container(
      padding: EdgeInsets.all(10.0),
      child: Row(
        mainAxisAlignment: MainAxisAlignment.center,
        children: <Widget>[
          Text("Fahrenheit", style: textSwitch),
          Radio<bool>(
              groupValue: fOrC,
              value: false,
              onChanged: (v) {
                setState(() {
                  fOrC = v;
                });
              }),
          Text("Celsius", style: textSwitch),
          Radio<bool>(
              groupValue: fOrC,
              value: true,
              onChanged: (v) {
                setState(() {
                  fOrC = v;
                });
              }),
        ],
      ),
    );


                                                  // WHITE CONTAINER AND TITLE
Container whiteContainer = Container(
  child: Container(
    padding: EdgeInsets.only(left: 40),
    child: Row(
      children: <Widget>[
        Text(
          'Convert it',
          style: titleBar,
        ),
      ],
    ),
    height: 200,
    decoration: BoxDecoration(
      boxShadow: [
        BoxShadow(
          color: Colors.grey.withOpacity(0.4),
          spreadRadius: 5,
          blurRadius: 10,
        )
      ],
      borderRadius: BorderRadius.only(
        bottomLeft: Radius.circular(30),
        bottomRight: Radius.circular(30),
      ),
      color: Colors.white,
    ),
  ),
);




                                            // DESCRIPTION
Container descText = Container(
  padding: EdgeInsets.only(top: 40, bottom: 15, right: 100),
  child: Text('Write down your value below:', style: description,),
);




                                                  // GO BUTTON
    Container calcBtn = Container(
      child: CupertinoButton(
        child: Text("Go"),
        color: Colors.blue,
        borderRadius: BorderRadius.all(Radius.circular(24)),
        onPressed: () {

          setState(() {
              fOrC == false
                  ? output = (input - 32) * (5 / 9)
                  : output = (input * 9 / 5) + 32;



          });

          Navigator.of(context).push(
            MaterialPageRoute(
                builder: (context) => screentwo(value : value)
            ),
          );
//          AlertDialog dialog = AlertDialog(
//            content: fOrC == false
//                ? Text(
//                "${input.toStringAsFixed(2)} F : ${output.toStringAsFixed(2)} C")
//                : Text(
//                "${input.toStringAsFixed(2)} C : ${output.toStringAsFixed(2)} F"),
//          );
//          showDialog(context: context, child: dialog);

        },
      ),
    );
                                                  // WIDGET TREE
    return Scaffold(
      backgroundColor: Colors.grey[300],
      appBar: appBar,
      body: Container(
//        padding: EdgeInsets.all(20.0),    CHANGE THIS IF NOT DISPLAYING CORRECTLY
        child: Column(
          children: <Widget>[



            whiteContainer,
            descText,
            inputField,
            tempSwitch,
            calcBtn,
          ],
        ),
      ),
    );
  }
}

screentwo.dart

import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'main.dart';

class screentwo extends StatefulWidget {

String value;
screentwo({this.value});


  @override
  _screentwoState createState() => _screentwoState(value);
}

class _screentwoState extends State<screentwo> {
  String value;
  _screentwoState(this.value);
  @override

  Widget build (BuildContext context) {  //THIS IS SECOND SCREEN
    return Scaffold(
      body: Center(
        child: Text(value),
      ),
    );

  }
}

person Roman Kulikov    schedule 14.08.2020    source источник
comment
всем привет. вы сделали небольшую ошибку, передав неправильное значение на втором экране, вам нужно передать output.tostring() на второй экран, а не значение. value - это значение, которое вы получаете в качестве входных данных,   -  person Zakria Khan    schedule 14.08.2020
comment
Navigator.of(context).push( MaterialPageRoute( builder: (context) =› screentwo(value : output.tostring()) ), );   -  person Zakria Khan    schedule 14.08.2020
comment
Большое спасибо, это сработало!!   -  person Roman Kulikov    schedule 14.08.2020


Ответы (1)


В соответствии с вашим кодом просто замените значение для вывода в main.dart.

Navigator.of(context).push(
            MaterialPageRoute(
                builder: (context) => screentwo(value : output)
            ),
          );
person Çağrı Aydın    schedule 14.08.2020
comment
Большое спасибо, это сработало. Тему теперь можно закрывать - person Roman Kulikov; 14.08.2020
comment
@RomanKulikov Мы не закрываем «темы», когда дается хороший ответ. Однако вы можете принять ответ, если считаете, что он помог. - person Adrian Mole; 14.08.2020
comment
Пожалуйста. Если это сработало для вас, вы можете принять мой ответ. @RomanKulikov - person Çağrı Aydın; 14.08.2020