我认为这可能不太复杂,但我是编码新手,不理解这一点,也无法在网上找到我能理解的解释。
在我的应用程序中,我的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:...
我必须使用某种提供者吗;的";或者像Eventifier或ChangeNotificationer这样的包?我搞不明白这些事情是怎么回事。
根据我的理解,您正试图在TextFormField
中设置DropDownButton
中的选定值,如果这是您想要做的,那么创建一个TextEditingController
并将其添加到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
即可。
我希望我对你的问题理解正确,希望它能得到解决。