当前位置: 首页 > 知识库问答 >
问题:

更新跳转按钮单击中的文本字段

羊舌新荣
2023-03-14

我在flutter上开发一个应用程序,在主屏幕上我有一个按钮,打开另一个屏幕,这是在一个方法。在那个屏幕上,我想做一些计算,比如接受用户输入和更新文本字段,在单击按钮时,方法calculateAmount被称为更新变量total,它反映在文本字段上,但文本字段没有更新,它只在按键盘上完成时更新...如何才能完成这个任务。下面是我的代码:

    import 'package:flutter/material.dart';
    void main() {

      runApp(new MaterialApp(
          debugShowCheckedModeBanner: false,
        home: new homePage()
      ));
    }

    class homePage extends StatefulWidget {

      @override
      homePageState  createState() => new homePageState();
    }
    class homePageState extends State<homePage> {

    double metal = 0.0;
    double total = 0.0;

      @override
      Widget build(BuildContext context) {
        return new Scaffold(
          appBar: new AppBar(
            title: new Text("APP-Title",), backgroundColor: Colors.orange),
           body: new Container(
            child: new Center(
                child: new Column(
                  mainAxisAlignment: MainAxisAlignment.center,
                  children: <Widget>[

                    new Row(
                      mainAxisAlignment: MainAxisAlignment.center,
                      children: <Widget>[

                        new Expanded(child: new RaisedButton.icon(
                          color: Colors.orange,
                          icon: const Icon(
                            Icons.info, size: 25.0, color: Colors.white,),
                          label: new Text('Calculate', style: new TextStyle(
                              color: Colors.white
                              )),
                          onPressed: () {
                            calculateWindow();
                          ),),
                   ],
                )
              ],
            )
        ),
      ),
    );
  }
 void calculateWindow(){
    Navigator.of(context).push(
      new MaterialPageRoute(
        builder: (context) {
          return new Scaffold(
            appBar: new AppBar(
              title: new Text('Calculator'),
              backgroundColor: Colors.orange,
            ),
            body: new ListView(
              children: <Widget>[

                new Row(
                  crossAxisAlignment: CrossAxisAlignment.center,
                  children: <Widget>[
                    new Container(
                      height: 50.0,
                      width: 360.0,
                      decoration: new BoxDecoration(
                        color: Colors.orange,
                        shape: BoxShape.rectangle,
                      ),
                      child: new Center(
                        child: new Row(
                          children: <Widget>[
                            new Expanded(
                              child: new Container(
                                child:  new Text("Gold & Silver in Sold & Ornaments",
                                  style: textStyle,
                                  textAlign: textAlign
                                ),
                              ),
                            ),
                            new Container(
                              height: 40.0,
                              width: 80.0,
                              decoration:  new BoxDecoration(
                                  color: Colors.white),
                              child: new TextField(
                                  keyboardType: TextInputType.number,
                                  onSubmitted : (String value) {
                                    try {
                                      metal = double.parse(value.toString());
                                      print(total);
                                    } catch (exception) {
                                      metal = 0.0;
                                    }
                                  }
                              ),
                            ),
                          ],
                        ),
                      ),
                      ),

                  ],
                new Row(
                  mainAxisAlignment: MainAxisAlignment.center,
                  children: <Widget>[
                    new Expanded(
                      child: new Container(
                          width: 50.0,
                          child: new RaisedButton.icon(
                            color: Colors.grey,
                            icon: const Icon(
                              Icons.check, size: 25.0, color: Colors.white,),
                            label: new Text('Calculate', style: new TextStyle(
                                color: Colors.white,
                               )),
                            onPressed: calculateAmount,
                          ),
                      ),
                    ),
                  ],
                ),
                new Row(
                  crossAxisAlignment: CrossAxisAlignment.center,
                  children: <Widget>[
                    new Container(
                      height: 50.0,
                      width: 350.0,
                      decoration: new BoxDecoration(
                        color: Colors.blueGrey,
                        shape: BoxShape.rectangle,
                      ),
                      child: new Center(
                        child: new Row(
                          children: <Widget>[
                            new Expanded(
                              child: new Container(
                                child:  new Text("Total Amount:",
                                  style: new TextStyle(
                                  color: Colors.white,),
                                  textAlign: TextAlign.left,),
                              ),
                            ),
                            new Container(

                              child: new Text(
                                '$total',
                                textAlign: TextAlign.left,
                                overflow: TextOverflow.ellipsis,
                                style: textStyle,
                                textDirection: TextDirection.ltr,
                              )
                            ),
                          ],
                        ),
                      ),
                    ),
                  ],
                ),
              ],
            ),
          );
        },
      ),
    );
  }
 void calculateAmount(){

    setState((){
      total =  metal + 0.025;

    });
  }
}

共有1个答案

杜弘伟
2023-03-14

我真的不明白您想要的输出是什么,但这个示例可能有助于向您展示代码中哪里出了问题。

class TextFieldEx extends StatefulWidget {
  @override
  _TextFieldExState createState() => new _TextFieldExState();
}

class _TextFieldExState extends State<TextFieldEx> {
  TextEditingController _c ;
  double _metal = 0.0;
  double _total = 0.0;
  String _text = "initial";
  @override
  void initState() {
      _c = new TextEditingController();
      super.initState();
    }

  @override
  void dispose(){
   _c?.dispose();
   super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return new Scaffold(
      body: new Center(
        child: new Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            new TextField(
              keyboardType: TextInputType.number,
              onChanged: (v)=>setState((){_text=v;}),
              controller: _c,
            ),
            new RaisedButton(
              child: new Text("Update"),
              onPressed: (){
                setState((){
                  _metal = double.parse(_c.text);
                  _total = _metal+0.025;
                  _c.text = "";
                });
              },
            ),
            new Text("Text Input: $_text"),
            new Text("Metal :$_metal"),
            new Text("Total:$_total")
          ],
        )
      )
    );
  }
}
 类似资料:
  • 问题内容: 我正在使用此处找到的自定义表格模型。我已经使用该帖子中提供的建议更新了我的代码,并遇到了一个新问题。我对我的代码所做的改变是一个注入到我,以避免与线程的问题。完成此操作后,通过按按钮更新我的表的代码已停止工作。 用于初始化的代码如下: 我用来更新的代码如下: 我也尝试过使用,但这也不起作用。截至目前,更新的唯一方法是关闭并重新打开程序。具有我正在使用的,随着用户添加更多玩家,尺寸会增加

  • 当我单击一个按钮时,有没有一种方法可以更改TreeView的TreeItem的文本?我尝试执行oracle示例http://docs.oracle.com/javafx/2/uicontrols/tree-view.htm中所示的操作,但我不想通过单击TreeItem更改它,而是单击按钮。第二步,我想使用上下文菜单打开一个带有Textfield的窗口,在这里我可以手动插入文本以更改treeitem

  • 我正在做一个计数计时器使用按钮开始和停止。 我需要帮助解决这个...当我按下“Start”按钮时,它可以工作(使用)但是不会为我更新。 但是,如果将放在而不是在settext会更新...但我没有按“开始”键。如何使setText在“开始”按钮被按下后更新?

  • 在前面输入图像描述, 下面是我的代码,当应用程序运行时启动,但它无法选择按钮,给出如下错误: 从eclipse控制台添加wait:log后出现新错误 生成信息:版本:“2.48.2”,修订版:“41bccdd”,时间:“2015-10-09 19:59:20”系统信息:主机:“NCA1026471”,IP:“192.168.56.1”,OS.Name:“Windows 7”,OS.arch:“AM

  • 我需要一些android编程的帮助。所以onbutton click我在icite方法中调用。基本上,当单击按钮时,所有文本框文本都将转换为一个新变量上的字符串。之后,我将所有变量组合成一个名为total的字符串。然后将标签textView10的文本更改为字符串total。然而,它只是崩溃了我的应用程序。你知道我可能做错了什么吗?我的猫: 代码

  • 我正在使用和这里找到的自定义表模型。我已经用那篇文章中提供的建议更新了我的代码,遇到了一个新问题。我对代码所做的更改是注入<code>ArrayList 用于初始化< code>JTable的代码如下: 我用来更新< code>JTable的代码如下: 我也尝试过使用但这也不起作用。截至目前,使更新的唯一方法是关闭并重新打开程序。具有我用于的,随着用户添加更多玩家,其大小会增加。 为什么< cod