当前位置: 首页 > article >正文

Flutter:父组件,向子组件传值,子组件向二级页面传值

父页面,传值给子组件,子组件把数据传递给二级页面

父页面

final List _datas; // 通过接口请求到的数据

...
...

// 父页面中的子组件:SearchCell
body: Container(
	child:SearchCell(datas: _datas,);
)

子组件:SearchCell

class SearchCell extends StatelessWidget {
  final List? datas;
  const SearchCell({this.datas});
}

// 触发某次点击事件,把datas传递过去
onTap: (){
  Navigator.of(context).push(
  	// 把数据传递给搜索页
    MaterialPageRoute(builder: (BuildContext context)=> SearchPage(datas: datas,))
  );
},

搜索页

class SearchPage extends StatefulWidget {
  final List? datas;
  const SearchPage({this.datas});
  @override
  State<SearchPage> createState() => SearchPageState();
}
class SearchPageState extends State<SearchPage> {
	final List _modals = [];
	
	// 根据搜索的内容去检索上个页面传来的datas
	void _searchData(String text) {
		// 每次搜索先清空
		_modals.clear();
		if(text.length>0){
			for(int i = 0; i < widget.datas.length; i ++){
				String name = widget.datas[i].name;
				// contains 是否包含
				if(name.contains(text)){
					_modals.add(widget.datas[i]);
				}
			}
		}
	}
	....
	....
	children: [
		// onChanged 的回调
		SearchBar(onChanged: (String texts){
			_searchData(text);
		},),
	]
}

// 搜索页内的小部件,头部的搜索框,
class SearchBar extends StatefulWidget {
  // 定义onChanged的回调方法
  final ValueChanged<String>? onChanged;
  const SearchBar({this.onChanged});
  @override
  State<SearchBar> createState() => SearchBarState();
}
class SearchBarState extends State<SearchBar> {
  // 文字编辑控制器,监听搜索框的变化。
  final TextEditingController _controller = TextEditingController();
  // 监听输入框的变化
  void _onChangeVal(String value){
    if(widget.onChanged != null){
      widget.onChanged!(value);
    }
  }
  
  ...
  ...
  // 这里有个输入框
  TextField(
	controller: _controller, // 文字编辑控制器,配合_onChange方法使用
	onChanged: _onChangeVal, // 监听输入框的变化
	autofocus: true, // 是否自动聚焦光标
	cursorColor: Colors.green, // 默认边框的颜色
	decoration: const InputDecoration( // 装饰器
		contentPadding: EdgeInsets.only(left: 10, bottom: 10), // 内容偏移
		border: InputBorder.none, // 隐藏默认边框
		hintText: '搜索', // 默认提示问题
	),
	style: const TextStyle(fontSize: 18, fontWeight: FontWeight.w300, color: Colors.black), // 文字颜色
)
}

输入框变化后,检索datas的内容:
在这里插入图片描述


http://www.kler.cn/a/398809.html

相关文章:

  • 1 设计模式原则之开闭原则
  • 搭建es环境
  • 【C#】C#编程基础:探索控制台应用与数据操作
  • latex中,两个相邻的表格,怎样留一定的空白
  • PHP代码审计 --MVC模型开发框架rce示例
  • 【STM32】MPU6050简介
  • 【React】状态管理之Redux
  • 前端面试笔试(二)
  • 【Node.js】使用 Node.js 需要了解多少 JavaScript?
  • sql中的聚合函数
  • wordpress建DTC独立站为产品添加价格区间选择
  • 高翔【自动驾驶与机器人中的SLAM技术】学习笔记(十三)图优化SLAM的本质
  • Git的概念、安装、操作与分支管理和图形化界面TortoiseGit(小乌龟 )的安装与使用
  • 【2】猫眼娱乐后端开发面试题整理
  • Javaweb开发核心之应用上下文知识(笔记)
  • Android okhttp 网络链接各阶段监控
  • c++入门基础(三)
  • ElasticSearch-全文检索(一)基本介绍
  • Golang语言系列-哈希表
  • MySQL基础(初阶+进阶)(详解)
  • Java Function 的妙用:化繁为简的魔法师!
  • 条件竞争(ctf.show web87)
  • 图形最高分
  • Unreal engine5实现类似鬼泣5维吉尔二段跳
  • 基于YOLOv8深度学习的不良坐姿监测与语音提醒系统(PyQt5界面+数据集+训练代码)
  • Spring Boot【一】