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

TDesign:Cascader 级联选择器(省市区三级联动)

Cascader 级联选择器API

参考官方示例代码
在这里插入图片描述
在这里插入图片描述

在自己的模板中使用:view

import 'package:ducafe_ui_core/ducafe_ui_core.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:tdesign_flutter/tdesign_flutter.dart';import 'index.dart';class HomePage extends GetView<HomeController> {const HomePage({super.key});// 主视图Widget _buildView(BuildContext context) {return <Widget>[_buildHorizontalCascader(context),].toColumn();}Widget _buildHorizontalCascader(BuildContext context) {return GestureDetector(onTap: () {TDCascader.showMultiCascader(context,title: '选择地址',subTitles: ['请选择省份', '请选择城市', '请选择区/县'],data: controller.cityListData.map((item) => item.toJson()).toList(),initialData: controller.initData,theme: 'tab',onChange: (selectData) {controller.onTapAddress(selectData);},onClose: () {Navigator.of(context).pop();},);},child: _buildSelectRow(context, controller.selected_1 ?? '', '选择地区'),);}Widget _buildSelectRow(BuildContext context, String output, String title) {return Container(color: TDTheme.of(context).whiteColor1,height: 56,child: Stack(alignment: Alignment.bottomCenter,children: [Row(mainAxisAlignment: MainAxisAlignment.spaceBetween,children: [Padding(padding: const EdgeInsets.only(left: 16, top: 16, bottom: 16),child: TDText(title,font: TDTheme.of(context).fontBodyLarge,),),Expanded(child: Padding(padding: const EdgeInsets.only(right: 16, left: 16),child: Row(children: [Expanded(child: TDText(output,font: TDTheme.of(context).fontBodyLarge,textColor: TDTheme.of(context).fontGyColor3.withOpacity(0.4),maxLines: 1,overflow: TextOverflow.ellipsis,),),Padding(padding: const EdgeInsets.only(left: 2),child: Icon(TDIcons.chevron_right,color: TDTheme.of(context).fontGyColor3.withOpacity(0.4),),),],),),),],),const TDDivider(margin: EdgeInsets.only(left: 16,),),],),);}@overrideWidget build(BuildContext context) {return GetBuilder<HomeController>(init: HomeController(),id: "home",builder: (_) {return Scaffold(appBar: AppBar(title: const Text("home")),body: SafeArea(child: _buildView(context),),);},);}
}

controller

import 'dart:convert';import 'package:demo/common/index.dart';
import 'package:flutter/services.dart';
import 'package:get/get.dart';
import 'package:tdesign_flutter/tdesign_flutter.dart';class HomeController extends GetxController {HomeController();String? initData;String? selected_1;List<CityListModel> cityListData = [];@overridevoid onReady() {super.onReady();_loadCityData();}void _loadCityData() async {try {// 读取本地 JSON 文件var data = await rootBundle.loadString('assets/img/city.json');// 解析 JSON 数据List<dynamic> jsonData = json.decode(data);// 将 JSON 数据转换为 List<Map<String, dynamic>>cityListData = jsonData.map((item) => CityListModel.fromJson(item as Map<String, dynamic>)).toList();print('cityListData: $cityListData');update(["home"]);} catch (e) {print('Error loading city data: $e');}}void onTapAddress(List<MultiCascaderListModel> selectData) {List result = [];int len = selectData.length;initData = selectData[len - 1].value!;selectData.forEach((element) {result.add(element.label);});selected_1 = result.join('/');update(["home"]);}}

根据官方示例制作CityListModel模型

在这里插入图片描述

import 'child.dart';
class CityListModel {String? label;String? value;List<Child>? children;CityListModel({this.label, this.value, this.children});factory CityListModel.fromJson(Map<String, dynamic> json) => CityListModel(label: json['label'] as String?,value: json['value'] as String?,children: (json['children'] as List<dynamic>?)?.map((e) => Child.fromJson(e as Map<String, dynamic>)).toList(),);Map<String, dynamic> toJson() => {'label': label,'value': value,'children': children?.map((e) => e.toJson()).toList(),};
}class Child {String? label;String? value;List<Child>? children;Child({this.label, this.value, this.children});factory Child.fromJson(Map<String, dynamic> json) => Child(label: json['label'] as String?,value: json['value'] as String?,children: (json['children'] as List<dynamic>?)?.map((e) => Child.fromJson(e as Map<String, dynamic>)).toList(),);Map<String, dynamic> toJson() => {'label': label,'value': value,'children': children?.map((e) => e.toJson()).toList(),};
}

控制器中assets/img/city.json
这里我只放出部分数据,可以通过后台获取完整数据,
只要是这个数据结构就行。(自己百度找下也有这个数据)

[{"label": "北京市","value": "110000","children": [{"label": "市辖区","value": "110100","children": [{ "label": "东城区", "value": "110101" },{ "label": "西城区", "value": "110102" },{ "label": "朝阳区", "value": "110105" },{ "label": "丰台区", "value": "110106" },{ "label": "石景山区", "value": "110107" },{ "label": "海淀区", "value": "110108" },{ "label": "门头沟区", "value": "110109" },{ "label": "房山区", "value": "110111" },{ "label": "通州区", "value": "110112" },{ "label": "顺义区", "value": "110113" },{ "label": "昌平区", "value": "110114" },{ "label": "大兴区", "value": "110115" },{ "label": "怀柔区", "value": "110116" },{ "label": "平谷区", "value": "110117" },{ "label": "密云区", "value": "110118" },{ "label": "延庆区", "value": "110119"}]}]},{"label": "天津市","value": "120000","children": [{"label": "市辖区","value": "120100","children": [{ "label": "和平区", "value": "120101" },{ "label": "河东区", "value": "120102" },{ "label": "河西区", "value": "120103" },{ "label": "南开区", "value": "120104" },{ "label": "河北区", "value": "120105" },{ "label": "红桥区", "value": "120106" },{ "label": "东丽区", "value": "120110" },{ "label": "西青区", "value": "120111" },{ "label": "津南区", "value": "120112" },{ "label": "北辰区", "value": "120113" },{ "label": "武清区", "value": "120114" },{ "label": "宝坻区", "value": "120115" },{ "label": "滨海新区", "value": "120116" },{ "label": "宁河区", "value": "120117" },{ "label": "静海区", "value": "120118" },{"label": "蓟州区", "value": "120119"}]}]},
]

更多示例:除了省市区三级联动,可以返回其他数据,实现联动

在这里插入图片描述
在这里插入图片描述

相关文章:

TDesign:Cascader 级联选择器(省市区三级联动)

Cascader 级联选择器API 参考官方示例代码 在自己的模板中使用&#xff1a;view import package:ducafe_ui_core/ducafe_ui_core.dart; import package:flutter/material.dart; import package:get/get.dart; import package:tdesign_flutter/tdesign_flutter.dart;import i…...

Ubuntu20.04下各类常用软件及库安装汇总

1.Miniconda的安装 Ubuntu 20.04版本快速安装 Miniconda&#xff08;宝宝级攻略&#xff09; 2.Nvidia显卡驱动/CUDA/cuDNN安装 Ubuntu 20.04安装nvidia显卡驱动/CUDA/cuDNN Ubuntu 20.04&#xff1a;CUDAcuDNN安装&卸载 Y9000P24款 win11ubuntu20.04 双系统教程 3.SGL…...

linux中安装部署Jenkins,成功构建springboot项目详细教程

参考别人配置Jenkins的git地址为https&#xff0c;无法连上github拉取项目&#xff0c;所以本章节介绍通过配置SSH地址来连github拉取项目 目录&#xff1a; 1、springboot项目 1.1 创建名为springcloudproject的springboot项目工程 1.2 已将工程上传到github中&#xff0c;g…...

2025系统架构师(一考就过):案例之四:架构复用、架构评估、特定架构(DSSA)、架构开发方法(ABSD)

二、软件架构复用 ◆软件产品线是指一组软件密集型系统&#xff0c;它们共享一个公共的、可管理的特性集&#xff0c;满足某个特定市场或任务的具体需要&#xff0c;是以规定的方式用公共的核心资产集成开发出来的。即围绕核心资产库进行管理复用、集成新的系统。 ◆软件架构…...

基于定制开发开源AI大模型S2B2C商城小程序的商品选品策略研究

摘要&#xff1a;随着电子商务的蓬勃发展和技术的不断进步&#xff0c;商品选品在电商领域中的重要性日益凸显。特别是在定制开发开源AI大模型S2B2C商城小程序的环境下&#xff0c;如何精准、高效地选择推广商品&#xff0c;成为商家面临的一大挑战。本文首先分析了商品选品的基…...

后端之JPA(EntityGraph+JsonView)

不同表之间的级联操作或者说关联查询是很多业务场景都会用到的。 对于这种需求最朴素的方法自然是手动写关联表&#xff0c;然后对被关联的表也是手动插入数据。但是手写容易最后写成一堆shit代码&#xff0c;而且修改起来也是非常麻烦的。 学会使用现成的工具还是非常有利的…...

linux--卡顿

1&#xff0c;swappiness swappiness是一个影响操作系统如何使用交换空间&#xff08;swap space&#xff09;的内核参数。它的值范围是从0到100&#xff0c;这个数值决定了系统将数据从物理内存&#xff08;RAM&#xff09;移动到交换分区或交换文件的倾向程度&#xff0c;交…...

【Python pro】函数

1、函数的定义及调用 1.1 为什么需要函数 提高代码复用性——封装将复杂问题分而治之——模块化利于代码的维护和管理 1.1.1 顺序式 n 5 res 1 for i in range(1, n1):res * i print(res) # 输出&#xff1a;1201.1.2 抽象成函数 def factorial(n):res 1for i in range(1…...

Docker 2025/2/24

用来快速构建、运行和管理应用的工具。帮助部署。 快速入门 代码略 解释 docker run :创建并运行一个容器&#xff0c;-d是让容器在后台运行 --name mysql :给容器起个名字&#xff0c;必须唯一 -p 3306:3306 :设置端口映射 -e KEYVALUE :是设置环境变量 mysql :指定运行的…...

4. 示例:创建带约束的随机地址生成器(范围0x1000-0xFFFF)

文章目录 前言代码示例&#xff1a;运行方法&#xff1a;查看结果&#xff1a;关键功能说明&#xff1a;扩展功能建议&#xff1a; 前言 以下是一个完整的SystemVerilog测试平台示例&#xff0c;包含约束随机地址生成、日志输出和波形生成功能&#xff1a; 代码示例&#xff1…...

爱普生SG-8101CE可编程晶振赋能智能手机的精准心脏

在智能手机高速迭代的今天&#xff0c;高性能、低功耗与小型化已成为核心诉求。智能手机作为人们生活中不可或缺的工具&#xff0c;需要在各种复杂场景下稳定运行。爱普生SG-8101CE可编程晶振凭借其卓越性能&#xff0c;成为智能手机中不可或缺的精密时钟源&#xff0c;为通信、…...

指针解剖学:穿透C/C++内存操作的核心密码与避坑指南

一、指针的本质与内存模型 指针是C/C的核心特性&#xff0c;本质是内存地址的变量化表示。每个变量在内存中占据连续的字节空间&#xff0c;地址是内存单元的唯一编号&#xff08;如0x0028FF40&#xff09;。指针变量存储的是目标数据的首地址&#xff0c;通过地址间接操作数据…...

Qt关于平滑滚动的使用QScroller及QScrollerProperties类说明

一、触控时代的滚动工具&#xff1a;QScroller类设计介绍 1.1 从机械滚轮到数字惯性 在触控设备普及前&#xff0c;滚动操作如同老式打字机的滚轴&#xff0c;只能通过鼠标滚轮或滚动条进行离散式控制。QScroller的出现如同给数字界面装上了"惯性飞轮"&#xff0c;…...

【音视频】编解码相关概念总结

NALU RTP PS流 三者总体关系 NALU在RTP中的应用&#xff1a;视频流的RTP传输通常将NALU作为基本的单元进行传输。每个RTP包携带一个或多个NALU&#xff0c;这些NALU包含了视频编码数据。RTP协议通过其头部信息&#xff08;如时间戳、序列号等&#xff09;帮助接收端重新排列和…...

Vue3 + Vite + TS,使用 配置项目别名属性:resolve

使用 resolve 配置全局项目路径别名 1.优化了开发中单页面引用其他模块的路径复杂性 2.妥妥解决了&#xff0c;组件复用当中提高开发效率 // 不使用配置 import { useStore } from ../../../stores // 使用配置 可根据开发者需求任意定义&#xff0c;较多 import { useStore…...

docker创建nginx

docker run -d -p 8080:80 --name my-nginx-container nginx docker&#xff1a;命令 run&#xff1a;命令 -d&#xff1a;在后台运行容器 -p&#xff1a;8080:80&#xff1a;将容器内部的80端口映射到宿主机的8080端口。 --name my-nginx-container&#xff1a;为容器指定一个…...

StableDiffusion打包 项目迁移 项目分发 1

文章目录 SD项目迁移前置知识webui-user.batwebui.batlaunch_utils.py 下一篇开始实践 SD项目迁移 显卡驱动更新&#xff1a;https://www.nvidia.cn/geforce/drivers/ 下载安装三个程序&#xff1a; python3.10.6: https://www.python.org/downloads/release/python-3106/gi…...

【数据结构进阶】哈希表

&#x1f31f;&#x1f31f;作者主页&#xff1a;ephemerals__ &#x1f31f;&#x1f31f;所属专栏&#xff1a;数据结构 目录 前言 一、哈希表的概念 二、哈希函数的实现方法 1. 直接定址法 2. 除留余数法 三、哈希冲突 1. 开放定址法&#xff08;闭散列&#xff0…...

【蓝桥杯嵌入式】各模块学习总结

系列文章目录 留空 文章目录 系列文章目录前言一、LED模块1.1 赛题要求1.2 模块原理图1.3 编写代码1.4 赛题实战 二、LCD模块2.1 赛题要求2.2 模块原理图2.3 编写代码2.4 赛题实战 三、按键模块3.1 赛题要求3.2 模块原理图3.3 编写代码3.4 赛题实战 四、串口模块4.1 赛题要求4…...

Rust学习总结之-枚举

枚举是一个很多语言都有的功能&#xff0c;不过不同语言中其功能各不相同但是要表达的意思是一致的&#xff0c;枚举就是对于一个事物可以穷举出所有可能得值。比如说人的性别就可以用枚举&#xff0c;男人和女人两种。下面我们来学习Rust中的枚举。 一&#xff1a;枚举定义 …...

Linux系统管理(十七)——配置英伟达驱动、Cuda、cudnn、Conda、Pytorch、Pycharm等Python深度学习环境

文章目录 前言安装驱动下载安装Cuda编辑环境变量安装Cudnn安装conda验证安装成功配置conda镜像退出conda环境创建python环境查看当前conda环境激活环境安装python包安装pytorch 安装pycharm安装jupyter notebook 前言 深度学习和大语言模型的部署不免会用到Linux系统&#xff…...

SLAM算法工程师的技术图谱和学习路径

SLAM(Simultaneous Localization and Mapping)算法工程师是负责开发和实现用于机器人、自动驾驶车辆等领域的SLAM算法的专业人士。下面是SLAM算法工程师需要掌握的基础理论知识: 机器人运动学和动力学:理解机器人在空间中的运动方式和控制方法,包括轮式、蜘蛛腿、飞行器等…...

【第三天】零基础学习量化基础代码分析-持续更新

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 记录量化基础代码总览引言基本概念量化投资 伪代码示例&#xff1a;量化投资模型框架总结 每日-往期回看 第一天零基础学量化基础知识点总览-持续更新 第二天零基础…...

深入了解 Python 中的 MRO(方法解析顺序)

文章目录 深入了解 Python 中的 MRO&#xff08;方法解析顺序&#xff09;什么是 MRO&#xff1f;如何计算 MRO&#xff1f;C3 算法的合并规则C3 算法的合并步骤示例&#xff1a;合并过程解析 MRO 解析失败的场景使用 mro() 方法查看 MRO示例 1&#xff1a;基本用法 菱形继承与…...

如何防止 Instagram 账号被盗用:安全设置与注意事项

如何防止 Instagram 账号被盗用&#xff1a;安全设置与注意事项 在这个数字化时代&#xff0c;社交媒体平台如 Instagram 已成为我们日常生活的一部分。然而&#xff0c;随着网络犯罪的增加&#xff0c;保护我们的在线账户安全变得尤为重要。以下是一些关键的安全设置和注意事…...

采样算法二:去噪扩散隐式模型(DDIM)采样算法详解教程

参考 https://arxiv.org/pdf/2010.02502 一、背景与动机 去噪扩散隐式模型&#xff08;DDIM&#xff09; 是对DDPM的改进&#xff0c;旨在加速采样过程同时保持生成质量。DDPM虽然生成效果优异&#xff0c;但其采样需迭代数百至数千次&#xff0c;效率较低。DDIM通过以下关键…...

各种类型网络安全竞赛有哪些 网络安全大赛的简称

本文是对入门学习的一些概念了解和一些常规场景记录 1.CTF&#xff08;capture the flag&#xff09;是夺旗赛的意思。 是网络安全技术人员之间进行攻防的比赛。 起源1996年DEFCON全球黑客大会&#xff0c;替代之前真实攻击的技术比拼。 (DEFCON极客大会诞生1993&#xff0c;…...

包子凑数——蓝桥杯真题Python

包子凑数 输入输出样例 示例 1 输入 2 4 5输出 6样例说明 凑不出的数目包括&#xff1a;1, 2, 3, 6, 7, 11。 示例 2 输入 2 4 6输出 INF样例说明 所有奇数都凑不出来&#xff0c;所以有无限多个 运行限制 最大运行时间&#xff1a;1s最大运行内存: 256M 最大公约数 最大公…...

网络通信/IP网络划分/子网掩码的概念和使用

文章目录 概述子网的考题子网掩码的历史有/无类地址子网划分!子网掩码超网技术/CIDR子网掩码和路由IP子网掩码定义 网络规划网络规划-拆子网网络规划-组超网子网划分案例 区分于其他特殊IP地址IP地址和网络地址子网掩码和网络地址子网掩码和广播地址 子网间的通信其他 概述 本…...

【前端】简单原生实例合集html,css,js

长期补充&#xff0c;建议关注收藏点赞。 目录 分栏input各种类型iframe表单拖拽 分栏 区分fieldset和framesetframeset是把浏览器窗口分成几个区域&#xff0c;每个区域分别放置一个html文档到对应的frame中&#xff0c;而且这个比例可以按住边栏进行调整col指定左右边栏的宽…...