Flutter 直到我选择了一个下拉项,即使在指定了一个默认值之后,升起的按钮也不会显示答案
我正在制作一个简单的S.I计算器,它有一个用于本金和时间的字段,同时我还有一个下拉列表来选择货币。 问题是当我按下“calculate”(计算)RaisedButton(上升按钮)时,查看图像可能会帮助屏幕上没有显示任何内容最初我认为Button有问题,但后来我发现,在按下RaisedButton(上升按钮)后,如果我从下拉列表中选择了任何项目,则会出现答案为什么会发生这种情况,我已将初始值设置为_selected='rupe'我做错什么了吗Flutter 直到我选择了一个下拉项,即使在指定了一个默认值之后,升起的按钮也不会显示答案,flutter,button,drop-down-menu,Flutter,Button,Drop Down Menu,我正在制作一个简单的S.I计算器,它有一个用于本金和时间的字段,同时我还有一个下拉列表来选择货币。 问题是当我按下“calculate”(计算)RaisedButton(上升按钮)时,查看图像可能会帮助屏幕上没有显示任何内容最初我认为Button有问题,但后来我发现,在按下RaisedButton(上升按钮)后,如果我从下拉列表中选择了任何项目,则会出现答案为什么会发生这种情况,我已将初始值设置为_selected='rupe'我做错什么了吗 import 'package:flutter/ma
import 'package:flutter/material.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
title: 'Simple Intrest Calculator',
home: MyHomePage(),
theme: ThemeData(
brightness: Brightness.dark,
primaryColor: Colors.indigo,
accentColor: Colors.indigoAccent,
),
);
}
}
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
var _currencies = ['Rupee', 'Dollar', 'Pound'];
final _minPadding = 5.0;
var _selected = 'Rupee';
TextEditingController principalCntr = TextEditingController();
TextEditingController roiCntr = TextEditingController();
TextEditingController termCntr = TextEditingController();
String _amount = '0';
@override
Widget build(BuildContext context) {
TextStyle styles = Theme.of(context).textTheme.headline6;
return Scaffold(
//resizeToAvoidBottomPadding: false,
appBar: AppBar(
title: Text('S.I Calculator'),
centerTitle: true,
),
body: Container(
margin: EdgeInsets.symmetric(vertical: 0, horizontal: _minPadding * 2),
child: ListView(
children: [
getImg(),
Padding(
padding: const EdgeInsets.symmetric(vertical: 5),
child: TextField(
controller: principalCntr,
keyboardType: TextInputType.number,
style: styles,
decoration: InputDecoration(
labelText: 'Principal',
hintText: 'Enter principal amount',
labelStyle: styles,
border: OutlineInputBorder(
borderRadius: BorderRadius.circular(5.0),
),
),
),
),
Padding(
padding: const EdgeInsets.symmetric(vertical: 5),
child: TextField(
controller: roiCntr,
keyboardType: TextInputType.number,
style: styles,
decoration: InputDecoration(
labelText: 'Intrest',
hintText: 'Enter intrest rate',
labelStyle: styles,
border: OutlineInputBorder(
borderRadius: BorderRadius.circular(5.0),
),
),
),
),
Padding(
padding: const EdgeInsets.all(8.0),
child: Row(
children: [
Expanded(
child: TextField(
controller: termCntr,
keyboardType: TextInputType.number,
style: styles,
decoration: InputDecoration(
labelText: 'Time',
hintText: 'Time in years',
labelStyle: styles,
border: OutlineInputBorder(
borderRadius: BorderRadius.circular(5.0),
),
),
),
),
SizedBox(width: 50,),
Expanded(
child: DropdownButton(
value: _selected,
onChanged: (newVal) {
setState(() {
_selected = newVal;
});
},
items: _currencies.map((selectedVal) {
return DropdownMenuItem(
value: selectedVal,
child: Text(selectedVal),
);
}).toList(),
),
),
],
),
),
Padding(
padding: const EdgeInsets.all(8.0),
child: Row(
children: [
Expanded(
child: RaisedButton(
color: Theme.of(context).accentColor,
textColor: Theme.of(context).primaryColor,
child: Text('Calculate'),
onPressed: (){
_amount = _calculateReturns();
},
),
),
SizedBox(width: 20),
Expanded(
child: RaisedButton(
color: Theme.of(context).primaryColorDark,
textColor: Theme.of(context).primaryColorLight,
child: Text('Clear', style: TextStyle(fontSize: 20,),),
onPressed: (){
debugPrint('pressed');
},
),
),
],
),
),
Padding(
padding: const EdgeInsets.all(8.0),
child: Text(_amount, style: styles,),
),
],
),
),
);
}
String _calculateReturns(){
double principal = double.parse(principalCntr.text);
double roi = double.parse(roiCntr.text);
double year = double.parse(termCntr.text);
double sI = principal + (principal*roi*year)/100;
String res = 'After $year years, you get $sI';
return res;
}
Widget getImg() {
AssetImage img = AssetImage('images/money.jpg');
Image image = Image(image: img, width: 125, height: 125);
return Container(
child: image,
margin: EdgeInsets.all(_minPadding * 10),
);
}
}
这是在我点击提升按钮之后
这是在我从下拉列表中选择一个项目但不再单击按钮之后:
代码演练:
列了一张"货币清单"。
添加了文本输入字段下拉按钮和两个提升按钮。
当按下“计算”按钮时,调用“计算返回”,返回一个值并将其存储在“金额”中
输出只是一个文本小部件。
按下按钮时忘记更新屏幕,记住每次需要更改页面内容或更新页面时,都必须调用该方法:
setState(() {
// code here for values to be updated
});
因此,在您按下的升起按钮功能中,您必须添加如下内容:
onPressed: (){
_amount = _calculateReturns();
setState(() { });
}
对它是这样工作的,因为setState只在下拉菜单中定义,这就是为什么选择它后会出现结果。这就是为什么它只在下拉菜单中工作的原因。