![](/img/trans.png)
[英]How can I pass flutter textediting controller value from one stateless widget to another stateless widget
[英]How can I pass the controller data from one widget to another in flutter
在我的searchPage.dart
我有兩個 statefulWidget, SearchScreen
和TopSearchWidget
。 SearchScreen
有一個TextField
,當用戶開始輸入時,它應該從另一個小部件TopSearchWidget
填充,但我不知道如何將參數/數據從一個小部件傳遞到另一個小部件。 這是我的代碼
class SearchPage extends StatefulWidget {
const SearchPage({Key key}) : super(key: key);
@override
State<StatefulWidget> createState() => _SearchPageState();
}
class _SearchPageState extends State<SearchPage> {
TextEditingController dropOffTextEditingController = TextEditingController();
);
@override
void initState() {
super.initState();
dropOffTextEditingController.addListener(textOnChanged);
}
void textOnChanged() {
controller.setSearchableText(dropOffTextEditingController.text);
}
@override
void dispose() {
dropOffTextEditingController.removeListener(textOnChanged);
super.dispose();
}
@override
Widget build(BuildContext context) {
......
Row(
children: [
SizedBox(width: 18.0),
Expanded(
child: Container(
decoration: BoxDecoration(
color: Colors.grey[400],
borderRadius: BorderRadius.circular(5.0),
),
child: Padding(
padding: EdgeInsets.all(3.0),
child: TextField(
controller: dropOffTextEditingController,
onEditingComplete: () async {
FocusScope.of(context).requestFocus(new FocusNode());
},
decoration: InputDecoration(
hintText: "Drop off Location",
fillColor: Colors.grey[400],
filled: true,
border: InputBorder.none,
isDense: true,
contentPadding: EdgeInsets.only(left: 11.0, top: 8.0, bottom: 8.0),
),
),
),
))
],
),
SizedBox(height: 10.0),
topWidgetPicker: TopSearchWidget(),
並從 TextField 接收數據,以便它可以開始搜索..
class TopSearchWidget extends StatefulWidget {
@override
State<StatefulWidget> createState() => _TopSearchWidgetState();
}
class _TopSearchWidgetState extends State<TopSearchWidget> {
@override
void initState() {
super.initState();
controller = ***** What should go here *****?
controller.searchableText.addListener(onSearchableTextChanged);
}
void onSearchableTextChanged() async {
final v = controller.searchableText.value;
.............
}
您可以將SearchPage
中的 controller 傳遞到TopSearchWidget
嗎?
class _SearchPageState extends State<SearchPage> {
final dropOffTextEditingController = TextEditingController();
@override
Widget build(BuildContext context) {
// ...
topWidgetPicker: TopSearchWidget(dropOffTextEditingController),
// ...
}
}
class TopSearchWidget extends StatefulWidget {
final TextEditingController controller;
TopSearchWidget(this.controller);
@override
State<StatefulWidget> createState() => _TopSearchWidgetState();
}
class _TopSearchWidgetState extends State<TopSearchWidget> {
@override
void initState() {
super.initState();
widget.controller.searchableText.addListener(onSearchableTextChanged);
}
void onSearchableTextChanged() async {
final v = widget.controller.searchableText.value;
.............
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.