【问题标题】:create more on same page on clicked button在单击按钮的同一页面上创建更多
【发布时间】:2022-06-10 18:24:18
【问题描述】:

所以我已经用我想要的东西创建了一个小部件(包括文本表单)。我目前在页面上显示一个,但我想在按下另一个按钮时添加一个。我想让文本毡 = 不同的东西,这样我就可以在另一个页面上显示两者。

这是我创建的页面

@override
  Widget build(BuildContext context) => Scaffold(
        appBar: AppBar(
          leading: CloseButton(),
          actions: buildEditingActions(),
          backgroundColor: Colors.red,
        ),
        body: SingleChildScrollView(
          padding: EdgeInsets.all(12),
          child: Form(
            key: _formKey,
            child: Column(
              mainAxisSize: MainAxisSize.min,
              children: <Widget>[
                Text("Text...",style: TextStyle(fontSize: 24)),
                buildTitle(),
                SizedBox(height: 12),
                buildDateTimePickers(),
                Text("\nText",style: TextStyle(fontSize: 24)),
                buildWidget(),
              ],
            ),
          ),
        ),
      );

我希望能够在另一个页面上显示不同的文本输入字段,但是从主页上的一个开始,每次单击按钮时都会添加另一个文本字段,有人知道怎么做吗?

我在想,用 PHP "$NR" 中的变量创建一个循环并设置 = 1,然后将文本字段命名为 "Text$NR" 之类的名称,并在循环结束时设置 $NR += 1,然后循环的次数=按下按钮的时间。 但我不太确定这是否可行

提前致谢:-)

【问题讨论】:

  • 您想要一个按钮来向屏幕添加新的文本字段吗?因为我无法理解问题中的这一部分:“想要让文字感觉=不同的东西,所以我可以在另一个页面上显示两者。”
  • 我希望能够在另一个页面上显示不同的文本输入字段,但是从主页上的一个开始,并且每次单击按钮时都会添加另一个文本字段
  • 当用户点击按钮时,是添加到新页面还是当前页面?
  • 当前的
  • 好的,你想为新页面做什么?

标签: flutter dart


【解决方案1】:

第一步:确保包含文本字段的屏幕是StatefulWidget。

第二步:声明一个int变量来保存屏幕中文本字段的计数,并以1(初始文本字段)开头,例如:

int numberOfTextFields = 1;

第三步:在您放置文本字段的代码中,创建一个for loop,其迭代次数等于保存文本字段计数的变量的值并呈现文本字段小部件,例如:

Form(
    key: _formKey,
    child: Column(
        children: [
            ...
            for(int i = 0 ; i < numberOfTextFields ; i++)
                TextField()
            ...
        ],
    ),
),

第四步:在按钮的回调中,增加setState()方法内的count变量,例如:

{
    ...
    setState((){
        numberOfTextFields++;
    })
    ...
}

最后:要从文本字段中获取值并将它们传递到新屏幕,您可以按照任何教程了解如何从 Flutter 中的文本字段中获取值,然后传递它们以及您使用的原因,例如,在新屏幕的构造函数中传递它们或在使用命名路由时将它们传递给 arguments 参数。

【讨论】:

  • 非常感谢 :-) 我明天要先试试这个。要早起?
  • 我正在考虑的一件事是新的文本字段,因为它具有相同的名称,是否只需替换旧值?
  • 别担心这是基本的,请随时提出任何问题❤
  • 不,它不会取代它。
  • 如果两个文本字段都命名为 TextField(),我将如何在另一个页面上显示它
【解决方案2】:

该方法就像创建 ekstra 字段的魅力一样。我遇到的问题是我在文本字段 1 中输入的任何内容都会自动成为文本字段 2 中的输入。

Widget buildSets() => TextFormField(
        keyboardType: TextInputType.number,
        inputFormatters: <TextInputFormatter>[
          FilteringTextInputFormatter.digitsOnly
        ],
        style: TextStyle(fontSize: 15),
        decoration: InputDecoration(
          border: OutlineInputBorder(),
          labelText: 'Sets',
        ),
        onFieldSubmitted: (_) => saveForm,
        validator: (sets) =>
            sets != null && sets.isEmpty ? 'Sets cannot be empty' : null,
        controller: setsController,
      );

我存储信息的方式是在“集合”中,如果这与 PHP 类似,我会说 sets$numberOfTextFields 给它们一个不同的存储位置。我不太确定如何在颤动中做到这一点,我尝试了使用 sets${numberOfTextFields} 的方法。但我没有工作

【讨论】:

    猜你喜欢
    • 2017-10-13
    • 2015-10-16
    • 2020-02-11
    • 2019-01-18
    • 1970-01-01
    • 2019-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多