flutter - 我有三个文本字段,想在前两个之间进行选择,并使用第三个
问题描述
我有三个文本字段。我想在前两个之间进行选择,并与第三个一起工作。
怎么做?请指导
import 'package:flutter/material.dart';
void main() => runApp(new CalculatorApp());
class CalculatorApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(title:'Bending Calculator',
home: Calculator()
);
}
}
class Calculator extends StatefulWidget {
@override
State<StatefulWidget> createState() => Calculatore();
}
class Calculatore extends State<Calculator> {
final a = TextEditingController();
final b = TextEditingController();
final c = TextEditingController();
// controller mentioned
String total= "";
void calculate() {
int numberA = int.parse(a.text);
int numberB = int.parse(b.text);
int numberC = int.parse(c.text);
int result;
// if numberA have value then answer will be a+c
if(
// what condition to do here for between choosing between textfields a or b.
// i tried numberB ==null that does not work
// very much confused, no idea what to do please help
){
result = numberA + numberC
} else{ result = numberB + numberC
}
setState(() {
total = "$result";
});
}
@override
Widget build(BuildContext context) {
return Scaffold(appBar: AppBar(title:Text("Calculator")),
body: SafeArea(
child: ListView(
children: <Widget>[
Row( mainAxisAlignment: MainAxisAlignment.center ,
children: <Widget>[
// first textfield
Container(width: MediaQuery.of(context).size.width *0.45 ,height: 50,
child: TextField(
controller: a,
decoration: InputDecoration(hintText: " Enter a value"),
keyboardType: TextInputType.number),
),
Container(width: MediaQuery.of(context).size.width * 0.04,height: 50,),
// second textfield
Container(width: MediaQuery.of(context).size.width* 0.45,height: 50,
child: TextField(
controller: b,
decoration: InputDecoration(hintText: " Enter b value"),
keyboardType: TextInputType.number),), ],
),
Row(mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
// third textfield
Container(width: MediaQuery.of(context).size.width *0.9, height: 50,
child: TextField(
controller: c,
decoration: InputDecoration(hintText: " Enter c value"),
keyboardType: TextInputType.number),),
],
),
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
//button
RaisedButton(
onPressed: calculate,
child: Text('Calculate'),),
],
),
Text(" Total : $total", style: TextStyle(fontSize: 20.0),),
],
))
);
}
}
解决方案
根据您的评论,这可能会有所帮助。如果您提供的要解析的文本为空,则正常int.parse
会抛出错误。而是在此处int.tryParse
的文档中使用。如果提供的字符串为空,这将返回 a 。此dartpad中提供实时版本。null
int numberA = int.tryParse(a.text);
int numberB = int.tryParse(b.text);
int numberC = int.tryParse(c.text);
int result;
// if numberA have value then answer will be a+c
// Note following conditions have order precedence. So only one of them execute.
if (numberA != null && numberC != null) {
result = numberA + numberC;
} else if (numberB != null && numberC != null){
result = numberB + numberC;
}
如果您想在所有三个字段都存在的情况下计算总计。使用以下条件。
if (numberA != null && numberB != null && numberC != null) {
result = numberA + numberB + numberC;
} else if (numberA != null && numberC != null) {
result = numberA + numberC;
} else if (numberB != null && numberC != null){
result = numberB + numberC;
}
您可以通过检查文本而不是解析的数字来实现相同的目的。
推荐阅读
- android-studio - Android Studio 模拟器屏幕塌陷
- angular - Angular 应用程序使用 index.php 而不是 index.html
- r - 如何根据 x 轴上的指定点有选择地为绘图的整个区域着色?
- python - Python:如何创建具有动态参数数量的参数网格
- jpos - jpos : 如何打包 DE 55
- sql - 我的 INSERT 语句与 FOREIGN KEY 约束冲突
- c# - C# 等效于 CreateIoCompletionPort
- uwp - 是否可以在机器范围内安装 Microsoft Store 应用程序?
- javascript - 选中复选框时引导数据表保持全部禁用
- .net-core - 带日期时间的 Odata V4