Flutter 如何基于对textformfield的更改更改按钮的文本 TextEditingController\u popUpDeleteSoldText=newtextededitingcontroller(text:“Delete”); 返回showDialog(上下文:上下文,生成器:(上下文){ 返回警报对话框( 标题:文本(_popUpDeleteSoldText.Text+“”+doc['name']+“?”), 内容:容器( 身高:145, 子:列( 儿童:[ 填充物( 填充:仅限常量边集(顶部:0.0), child:Align(alignment:alignment.centerLeft,child:Text('you sall the property?',style:TextStyle(color:myColors.blue)), ), MyTextFormField( soldController, “多少钱?”, 假,, 键盘类型:TextInputType.number, digitsOnly:没错, 一旦更改:(文本){ 如果(soldController.text!=“0.00”){ 打印(“文本字段:$text”); 设置状态(){ _popUpDeleteSoldText=新文本编辑控制器(文本:“出售”); }); }否则{ 设置状态(){ _popUpDeleteSoldText=新文本编辑控制器(文本:“删除”); }); } }, ),
如您所见,我正在根据正在更改的textformfield更改_popUpDeleteSoldText控制器(mytextformfield只是基于原始字段的我自己的字段,以标准化整个应用程序的设计)。 该控制器是我在弹出按钮上使用的,用来表示“出售”或“删除”,因为我想根据字段上的值更改按钮文本Flutter 如何基于对textformfield的更改更改按钮的文本 TextEditingController\u popUpDeleteSoldText=newtextededitingcontroller(text:“Delete”); 返回showDialog(上下文:上下文,生成器:(上下文){ 返回警报对话框( 标题:文本(_popUpDeleteSoldText.Text+“”+doc['name']+“?”), 内容:容器( 身高:145, 子:列( 儿童:[ 填充物( 填充:仅限常量边集(顶部:0.0), child:Align(alignment:alignment.centerLeft,child:Text('you sall the property?',style:TextStyle(color:myColors.blue)), ), MyTextFormField( soldController, “多少钱?”, 假,, 键盘类型:TextInputType.number, digitsOnly:没错, 一旦更改:(文本){ 如果(soldController.text!=“0.00”){ 打印(“文本字段:$text”); 设置状态(){ _popUpDeleteSoldText=新文本编辑控制器(文本:“出售”); }); }否则{ 设置状态(){ _popUpDeleteSoldText=新文本编辑控制器(文本:“删除”); }); } }, ),,flutter,Flutter,如您所见,我正在根据正在更改的textformfield更改_popUpDeleteSoldText控制器(mytextformfield只是基于原始字段的我自己的字段,以标准化整个应用程序的设计)。 该控制器是我在弹出按钮上使用的,用来表示“出售”或“删除”,因为我想根据字段上的值更改按钮文本 我知道onchanged是在我测试打印时触发的,但是,按钮总是显示“delete”(初始初始化),并且不会更新为“sell”这里是另一个解决方案,其中,我保留按钮文本作为状态,保留属性值。我还添加了Te
我知道onchanged是在我测试打印时触发的,但是,按钮总是显示“delete”(初始初始化),并且不会更新为“sell”这里是另一个解决方案,其中,我保留按钮文本作为状态,保留属性值。我还添加了TextInputFormatter,以便只接受正数
import'dart:math';
进口“包装:颤振/材料.省道”;
导入“包:flifter/services.dart”;
void main(){
runApp(
材料聚丙烯(
debugShowCheckedModeBanner:false,
标题:“颤振演示”,
家:脚手架(
正文:MyWidget(),
),
),
);
}
类MyWidget扩展了StatefulWidget{
@凌驾
_MyWidgetState createState()=>\u MyWidgetState();
}
类_MyWidgetState扩展状态{
int propertyValue=0;
@凌驾
小部件构建(构建上下文){
返回中心(
子:列(
mainAxisSize:mainAxisSize.min,
crossAxisAlignment:crossAxisAlignment.center,
儿童:[
Text(‘你把房子卖了吗?’),
固有宽度(
子项:TextFormField(
initialValue:propertyValue.toString(),
键盘类型:TextInputType.number,
输入格式化程序:[
FilteringPutFormatter.digitsOnly,
positiveEnumberFormatter(),
],
textAlign:textAlign.center,
一旦更改:(值)=>
setState(()=>propertyValue=int.parse(value)),
),
),
尺寸箱(高度:16.0),
属性值>0
?ElevatedButton.icon(
图标:图标(图标。附上钱),
标签:文本('Sell'),
按下:()=>打印('SELL'),
)
:ElevatedButton.icon(
图标:图标(Icons.delete),
标签:文本(“删除”),
按下时:()=>print('DELETE'),
),
],
),
);
}
}
类EnumberFormatter扩展了TextInputFormatter{
@凌驾
文本编辑值格式编辑更新(
TextEditingValue旧值,TextEditingValue新值){
返回TextEditingValue(
text:max(0,double.tryParse(newValue.text)??0.toString(),
选择:newValue.text.length==0
?文本选择。折叠(偏移量:1)
:newValue.selection,
);
}
}
Hey!首先感谢您的广泛响应,但是它不起作用。所有这些都在showdialog(alertfdialog())中,这可能是问题所在吗?(即使绝对父级是构建的)
TextEditingController _popUpDeleteSoldText = new TextEditingController(text: "Delete");
return showDialog(context: context, builder: (context) {
return AlertDialog(
title: Text(_popUpDeleteSoldText.text + " " + doc['name'] + "?"),
content: Container(
height: 145,
child: Column(
children: <Widget>[
Padding(
padding: const EdgeInsets.only(top: 0.0),
child: Align(alignment: Alignment.centerLeft, child: Text('Did you sold the property?', style: TextStyle(color: myColors.blue),)),
),
MyTextFormField(
soldController,
'For how much?',
false,
keyboardType: TextInputType.number,
digitsOnly: true,
onChanged: (text) {
if (soldController.text != "0.00") {
print('text field: $text');
setState(() {
_popUpDeleteSoldText = new TextEditingController(text: "Sell");
});
} else {
setState(() {
_popUpDeleteSoldText = new TextEditingController(text: "Delete");
});
}
},
),
String _btnName = "";
...
@override
Widget build(BuildContext context){
...
TextFormField(
...
autovalidate: true,
validator: (String txt){
if (txt.trim().toString()==true){
setState((){
_btnName = txt;
});
} else {
setState((){
_btnName = txt;
});
}
}
...
FlatButton(
onPressed: _btnName,
child: ...
import 'dart:math';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
void main() {
runApp(
MaterialApp(
debugShowCheckedModeBanner: false,
title: 'Flutter Demo',
home: Scaffold(
body: MyWidget(),
),
),
);
}
class MyWidget extends StatefulWidget {
@override
_MyWidgetState createState() => _MyWidgetState();
}
class _MyWidgetState extends State<MyWidget> {
int propertyValue = 0;
@override
Widget build(BuildContext context) {
return Center(
child: Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
Text('Did you sell the property???'),
IntrinsicWidth(
child: TextFormField(
initialValue: propertyValue.toString(),
keyboardType: TextInputType.number,
inputFormatters: <TextInputFormatter>[
FilteringTextInputFormatter.digitsOnly,
PositiveNumberFormatter(),
],
textAlign: TextAlign.center,
onChanged: (value) =>
setState(() => propertyValue = int.parse(value)),
),
),
SizedBox(height: 16.0),
propertyValue > 0
? ElevatedButton.icon(
icon: Icon(Icons.attach_money),
label: Text('Sell'),
onPressed: () => print('SELL'),
)
: ElevatedButton.icon(
icon: Icon(Icons.delete),
label: Text('Delete'),
onPressed: () => print('DELETE'),
),
],
),
);
}
}
class PositiveNumberFormatter extends TextInputFormatter {
@override
TextEditingValue formatEditUpdate(
TextEditingValue oldValue, TextEditingValue newValue) {
return TextEditingValue(
text: max(0, double.tryParse(newValue.text) ?? 0).toString(),
selection: newValue.text.length == 0
? TextSelection.collapsed(offset: 1)
: newValue.selection,
);
}
}