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

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

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

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); } }

http://www.jsqmd.com/news/1240880/

相关文章:

  • 2026最适合中小少儿街舞培训机构低成本获客神器,主流招生裂变工具功能实测,含零代码SAAS、AI编程、源码定制交付
  • 从1.6mm到超高多层
  • DeepSeek V4架构解析:MoE模型与代码生成技术
  • 最近超级爆火的泛程序,你了解了吗?
  • 深入解析C28x+FPU64:嵌入式DSP浮点运算单元架构与优化实践
  • HTTP协议详解:从基础到性能优化实践
  • 中频滚焊机源头厂家常见问题解答(2026专家版) - 全域品牌推荐
  • 宁波二手腕表定价核心解析,正规门店名表回收估价不压价 - 奢侈品回收评测
  • 《郑州考研机构如何用3个策略吸引职场考生》
  • Minecraft 2026创造模式指令全解析:从基础语法到自动化实战
  • 2026忻州甲醛检测怎么选:只做检测、不做治理的专业 CMA 资质实验室——中醛甲醛检测中心室内空气及环境检测 - 创达咨询
  • 央视两次报道的石英砖企业,到底做对了什么?
  • 用AI做画卷上的家乡,让城市动起来
  • AI工具集体“变脸”:从免费狂欢到付费寒冬,开发者如何应对商业化浪潮?
  • 亿俐缇国际物流 | 中国到巴林海运双清包税门到门服务解析
  • 2026 宁波黄金回收市场洗牌!正规门店白名单发布,安心变现不踩坑 - 好物测评局
  • Unity多人FPS网络同步:状态同步与预测回滚实战解析
  • Unity 2D角色平滑转向:旋转矩阵与Quaternion.RotateTowards实战
  • 嵌入式开发环境搭建:VMware+Ubuntu+Xshell全攻略
  • XU9231 2.6V-5.5V的输入电压 1A异步升压芯片
  • 武汉黄金回收市场观察:高位变现如何避开套路,安全落袋为安? - 奢侈品回收探店ing
  • Keystone II DDR3初始化实战:读写均衡原理与调试指南
  • 2026答辩翻车重灾区!别再瞎做毕业PPT|Okbiye AI学术PPT才是正确打开方式[特殊字符]
  • 特征工程流水线构建的核心实践:从数据质量到性能优化
  • 避开炒作陷阱!2026西安黄金理性变现攻略,普通人不亏的交易逻辑 - 一日一测评
  • 2026最适合中小钢琴考级培训机构低成本获客神器,主流招生裂变工具功能实测,含零代码SAAS、AI编程、源码定制交付
  • 中小团队VS大企业,项目管理工具怎么选?
  • Unity UMA角色系统:从零构建动态可定制3D角色
  • TM4C微控制器EPI时序配置与CRC硬件加速实战指南
  • 深入解析Tiva™ TM4C129 LCD控制器:从信号时序到实战配置