问题描述
我是Flutter的新手,并且一般来说都在编码,我正在构建我的第一个简单的华氏温度转换为摄氏温度(反之亦然)的温度转换器应用程序。
我希望我的应用做什么:
用户需要在文本字段中输入数字值,然后单击按钮。单击按钮后,需要将用户转移到第二个屏幕,并使用一个简单的文本小部件显示转换结果。
我已经构建了所有这些。我唯一的问题是实际结果没有显示在第二个屏幕上。现在,在文本字段中输入的值只是简单地传递到第二个屏幕上。它没有进行计算。我可以显示一个警报对话框,该对话框可以正常工作并显示正确的计算结果,但是我只想在第二个屏幕上显示一个简单的文本,而不是该文本,对我不起作用。
帖子所附的屏幕截图。
有人可以帮我解决这个问题吗?谢谢。
main.dart:
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",value: true,],);
// 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),);
// 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),);
}
}
解决方法
根据您的代码,只需替换要在main.dart中输出的值即可。
Navigator.of(context).push(
MaterialPageRoute(
builder: (context) => screentwo(value : output)
),);