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 如何基于对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

如您所见,我正在根据正在更改的textformfield更改_popUpDeleteSoldText控制器(mytextformfield只是基于原始字段的我自己的字段,以标准化整个应用程序的设计)。 该控制器是我在弹出按钮上使用的,用来表示“出售”或“删除”,因为我想根据字段上的值更改按钮文本
我知道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,
    );
  }
}