You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter TextFormField接收跨页面数据后无法自动展示对应信息

问题:跨页面传入ID后无法自动触发搜索展示数据

我的TextFormField支持手动输入ID编号(custnum)查询并展示对应信息,但从其他页面传入编号后,输入框仅能显示编号,无法自动触发搜索加载数据,必须删除并重新输入至少一个字符才会生效。

搜索函数代码

onSearch(String text) async {
  if (text.isNotEmpty) {
    List<Item> itemList = [];
    for (var item in items) {
      // 这里先转小写再转大写可简化为text.toUpperCase()
      if (item.custnum == text.toLowerCase().toUpperCase()) {
        itemList.add(item);
      }
    }
    setState(() {
      searchitems.clear();
      searchitems.addAll(itemList);
      // 直接取searchitems[0]会在列表为空时报错,建议加非空判断
      print('name : ${searchitems[0].name}');
      // if (searchitems.isEmpty) {
      //   searchitems = [];
      // print('searchitems : ${searchitems[0].address!.length}');
      // print('searchitems : ${searchitems[0].address!}');
    });
  } else {
    setState(() {
      searchCus.clear();
      searchitems.clear();

      // searchitems.addAll(items);
      print('searchitems : $searchitems');
    });
  }
}

TextFormField代码

TextFormField(
  initialValue:
      '${searchCus.isEmpty ? "" : searchCus[widget.indexCus].custnum}',
  onChanged: onSearch,
  decoration: InputDecoration(
    labelText: 'custnum',
    labelStyle: TextStyle(fontFamily: 'supermarket', fontSize: 14),
    isDense: true,
  ),
),

解决方法

  • 手动触发初始搜索:initialValue仅设置输入框初始文本,不会触发onChanged回调。在页面初始化阶段(如initState),若存在传入的有效编号,主动调用onSearch函数:
    @override
    void initState() {
      super.initState();
      // 检查是否有传入的有效编号
      if (searchCus.isNotEmpty && searchCus[widget.indexCus].custnum.isNotEmpty) {
        onSearch(searchCus[widget.indexCus].custnum);
      }
    }
    
  • 优化大小写处理:text.toLowerCase().toUpperCase()等价于直接转大写,简化为text.toUpperCase()即可,减少冗余操作。
  • 增加空值安全判断:在onSearch中打印searchitems[0].name前,先判断searchitems.isNotEmpty,避免空列表访问下标导致崩溃:
    if (searchitems.isNotEmpty) {
      print('name : ${searchitems[0].name}');
    }
    

内容的提问来源于stack exchange,提问作者Ppnncs

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 02:31:14