【发布时间】:2020-09-25 09:04:12
【问题描述】:
我正在开发 Flutter 项目,但遇到了一个问题。文本字段应该从控制器中获取一个可以正常工作但 onChanged 函数不起作用的值。但是它不起作用。我必须重新输入值才能显示结果。
当我的文本字段带来值时,我如何从 onchanged 获得结果?
代码: // 搜索调用 api 的函数
class _SearchPageTState extends State<SearchPageT> {
GlobalState _store = GlobalState.instance;
List<dynamic> searchResults = [];
searchT(value) async {
SearchServicet.searchApiT(value).then((responseBody) {
List<dynamic> data = jsonDecode(responseBody);
setState(() {
data.forEach((value) {
searchResults.add(value);
});
});
});
}
@override
/////// //code textfield search onchanged
Widget build(BuildContext context) {
return MaterialApp(
localizationsDelegates: [
GlobalMaterialLocalizations.delegate,
GlobalWidgetsLocalizations.delegate,
],
debugShowCheckedModeBanner: false,
home: Scaffold(
appBar: AppBar(
centerTitle: true,
),
body: ListView(
children: <Widget>[
Padding(
padding: const EdgeInsets.all(10.0),
child: TextField(
autofocus: true,
controller: TextEditingController()
..text = '${_store.get('num')}',
onChanged: (value) {
searchResults.clear();
searchCodeighniterT(value);
},
textAlign: TextAlign.center,
decoration: InputDecoration(
contentPadding: EdgeInsets.only(left: 25.0),
labelText: 'number',
border: OutlineInputBorder(
borderRadius: BorderRadius.circular(4.0),
),
suffixIcon: IconButton(
icon: Icon(Icons.search),
onPressed: null,
),
),
),
),
SizedBox(
height: 10.0,
),
ListView.builder(
physics: ScrollPhysics(),
shrinkWrap: true,
itemCount: searchResults.length,
itemBuilder: (BuildContext context, int index) {
return buildResultCard(context, searchResults[index]);
},
),
],
),
),
);
}
//这里显示结果
Widget buildResultCard(BuildContext context, data) {
return Padding(
padding: const EdgeInsets.all(8.0),
child: Column(
children: <Widget>[
new Container(
decoration: BoxDecoration(
image: DecorationImage(
image: AssetImage("assets/bgwlgo.png"), fit: BoxFit.cover),
),
margin: EdgeInsets.all(5.0),
child: Column(
children: <Widget>[
new Card(
child: ListTile(
title: Text(
"DATE:",
),
subtitle: Text(
data['DATETIME'].toString(),
),
),
),
new Card(
child: ListTile(
title: Text(
"TRAITEMENT:",
),
subtitle: Text(
data['TRAITEMENT_DETAIL'].toString()
),
),
),
new Padding(
padding: EdgeInsets.all(9.0),
),
],
),
),
Divider(
color: Colors.black,
)
],
),
);
}
【问题讨论】:
-
请尝试改进您的描述。我知道英语不是您的母语,但请尝试清理它。事实上,你可以继续写近 50 个单词,没有逗号或句号。这是非常难以阅读的。这意味着您获得帮助的机会可能很低。尽量遵循指南:stackoverflow.com/help/how-to-ask
-
你能再看看我的帖子吗谢谢
-
进步很大!
-
您是否尝试过单独重现您的问题?在您的应用程序的上下文之外。仅测试 TextField 的 onChanged 方法,如果它有效,则增加您在应用程序中存在的复杂性,直到它中断并且您可以识别他的问题?
-
是的,我尝试了 onchenged 方法,当我手动输入值时效果很好,但是当我从控制器调用值时没有显示结果,所以我必须手动重新输入值它工作