尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

Flutter第十四节-----父子组件通信

Flutter第十四节-----父子组件通信
📅 发布时间:2026/7/22 11:33:51

一.父子组件通信代码实例:

import 'package:dio/dio.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; void main(List<String> args) { runApp(MainPage()); print("成功进入主程序调用MainPage()函数"); } class MainPage extends StatefulWidget { MainPage({Key? key}) : super(key: key); @override _MainPageState createState() => _MainPageState(); } class _MainPageState extends State<MainPage> { @override void initState() { // TODO: implement initState super.initState(); _getChannels(); print("成功调用_getChannels"); } List<Map<String, dynamic>> _list = []; void _getChannels() async { //async和await实现异步能够接收到get发送后返回的请求 DioUtils util = DioUtils(); //实例化DioUtils类的对象 print("在_getChannels中成功实例化对象"); Response<dynamic> result = await util.get("channels"); Map<String, dynamic> res = result.data as Map<String, dynamic>; //强制类型转换存储接收到的数据,一定是一个键为字符串、值任意类型的 Map List data = res["data"]["channels"] as List; //处理接收到的数据,只读取data中的channels中的内容 _list = data.cast<Map<String, dynamic>>() as List< Map<String, dynamic> >; //cast声明元素类型,但cast返回的是Iterable,所以后面用List再重新转换回来 setState(() {}); print(_list); } @override Widget build(BuildContext context) { return MaterialApp( home: Scaffold( body: GridView.extent( padding: EdgeInsets.all(10), maxCrossAxisExtent: 140, mainAxisSpacing: 10, crossAxisSpacing: 10, childAspectRatio: 3, //generate快速生成一个列表,并遍历从处理的数据第0个开始到length-1个结束,这里相当于for循环,(index)从0开始取值到_list.length-1 children: List.generate(_list.length, (index) { return ChannelItem( item: _list[index], ); //向channelItem组件发送_list列表中的每一个元素。 }), ), appBar: AppBar(title: Text("频道管理")), ), ); } } class ChannelItem extends StatelessWidget { final Map<String, dynamic> item; const ChannelItem({Key? key, required this.item}) : super(key: key); @override Widget build(BuildContext context) { return Container( color: Colors.blue, alignment: Alignment.center, child: Text( item["name"] ?? "空", style: TextStyle(color: Colors.white, fontSize: 14), ), ); } } //封装一个工具类 class DioUtils { final Dio _dio = Dio(); //表示_dio这个内部变量是Dio类型且只能赋值一次,Dio()是dio三方库自带的构造函数,这里相当于实例化了一个_dio对象。 DioUtils() { // _dio.options.baseUrl = "htps://tgeek.itheima.net/v1_0/"; // // _dio.options.connectTimeout = Duration(seconds: 10); //连接超时 // _dio.options.sendTimeout = Duration(seconds: 10); //发送超时 // _dio.options.receiveTimeout = Duration(seconds: 10); //接收超时 _dio.options ..baseUrl = "https://geek.itheima.net/v1_0/" //..简洁写法连续赋值写法 ..connectTimeout = Duration(seconds: 10) ..sendTimeout = Duration(seconds: 10) ..receiveTimeout = Duration(seconds: 10); _addInterceptor(); //调用封装好的拦截器方法 } void _addInterceptor() { //用函数封装拦截器方法 _dio.interceptors.add( //给_dio实例化对象添加拦截器 InterceptorsWrapper( onRequest: (options, handler) { handler.next(options); //表示通过了检查可以去往下一个拦截器或直接发送给服务器 // handler.reject(error); //表示不通过给你拦截住了 }, onResponse: (response, handler) { if (response.statusCode! >= 200 && response.statusCode! <= 300) { //进行逻辑判断状态码是否合规进行放过或拦截决策 handler.next(response); return; } handler.reject( DioException(requestOptions: response.requestOptions), ); //拦截抛出异常 }, onError: (error, handler) { handler.reject(error); }, ), ); } //构造一个向外的get方法 Future<Response<dynamic>> get(String url, {Map<String, dynamic>? params}) { print("成功调用实例化对象util的get方法"); return _dio.get(url, queryParameters: params); } }

相关新闻

  • 大圆柱电芯模组全自动PACK成套生产线技术解析
  • 2026忻州甲醛检测怎么选:只做检测、不做治理的专业 CMA 资质实验室——中醛甲醛检测中心室内空气及环境检测 - 创达咨询
  • 特征工程流水线构建的核心实践:从数据质量到性能优化

最新新闻

  • 宜宾靠谱的装修公司怎么选?2026专业筛选攻略,装修不踩坑 - 装企精灵GEO
  • 工装长期使用不踩坑,拉丝 / 木纹 / 仿石材铝单板耐候性拉满
  • 怎么降低AI率?找到个免费的降AI率的方法能有效解决!能够轻松过检测
  • 2026年7月南昌火锅店出行觅食指南|按遇南三企业团建合作需求精准打卡 - 品牌2026推荐
  • 开完不会写会议纪要?这个整理技巧帮你省时间 - AI办公提效专家
  • 深入解析TI EMIFB SDRAM控制器:调度、同步与低功耗实战

日新闻

  • AI云原生实战05-金融AI上云最难的不是技术,是“不出事“——TCE银行风控架构拆解
  • 2026年GEOSEO优化公司选型深度测评:五大硬核标准严选,这六家重塑搜索增长新格局 - 品牌前沿专家
  • **核验!2026年7月卡地亚香港**售后网点地址及服务电话公告 - 卡地亚服务中心

周新闻

  • SaaS软件行业GEO实践:AI搜索时代的品牌可见性与获客新路径
  • 什么是PCTFE?医药高端包装的“防潮王牌“材料
  • 【JVM调优实战】16-可视化利器-JConsole-VisualVM-JMC

月新闻

  • 2026年6月公司网站搭建最新热门渠道测评:四大低成本/零代码平台对比+避坑
  • 【Linux】Linux arm 编译QT程序,出现expected “}“报错
  • 【MATLAB例程】四基站二维AOA定位与距离辅助增强对比仿真。基于角度观测和测距修正的固定目标平面定位精度分析

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号