0

我认为这可能并不太复杂,但是我是编码新手并且不明白这一点,我也无法在网上找到我能理解的解释。

在我的应用程序中,我的 AppBar 包括标题和底部,标题只是文本,底部是用户用来搜索我的数据库的 TextFormField。

最近我将标题更新为 DropdownButton,并且我想使用用户在那里选择的内容来更改我的 TextFormField 中的搜索参数(以便它可以搜索我数据库中的不同列)。

我在单独的文档中构建了 DropdownButton,然后将其插入到标题中。寻找如何使用它更加棘手。

我构建了某种回调,它可以在我的控制台中打印,但我不知道如何将信息传递到我的 TextFormField 中。

class HomePage extends StatelessWidget {
  HomePage({Key key, this.title}) : super(key: key);
  _handleValueReturned(value) {
    if (value == 1) {print('This works');} if (value == 2) {print('This works not');} else {return null;}
  }

...

appBar: AppBar(
      title: DropDownButton(
          valueReturned: _handleValueReturned,
      ),

      bottom:...

...

我是否必须使用某种提供程序或“of”或包,如 Eventifier 或 ChangeNotifier?我无法弄清楚所有这些事情是如何运作的。

4

1 回答 1

0

根据我的理解,您正在尝试从 中设置选定的值DropDownButtonTextFormField如果这是您要执行的操作,则创建 aTextEditingController并将其添加到TextFormField然后在您的回调中设置其text属性,该属性称为_handleValueReturned,但您必须重建小部件,以便TextFormField使用新值重建小部件,当然,您必须将小部件转换为StatefulWidget才能做到这一点。

创建和初始化TextEditingController

final _controller = TextEditingController();

将控制器连接到TextFromField

TextFormField(
  controller: _controller,
  ...
);

_handleValueReturned在回调中更改控制器的值:

 _handleValueReturned(value) {
    ...
    setState((){
      _controller.text = value; // It can be any String according to your scenario.
    });
  }

旁注:当您处理简单的文本输入(例如一个输入字段)时,您不必使用TextFormField,只需将其替换为TextField.

我希望我正确地解决了您的问题,并希望它得到了解决。

于 2020-08-25T05:15:19.970 回答