Skip to content

Commit 61547b6

Browse files
123dw-botesmexu
andauthored
TDPicker:支持初始化和后续动态加载适量数据,修复卡顿问题 (#728)
TDPicker:支持初始化和后续动态加载适量数据,解决卡顿问题 Co-authored-by: esmexu <[email protected]>
1 parent e9b1540 commit 61547b6

File tree

2 files changed

+369
-205
lines changed

2 files changed

+369
-205
lines changed

tdesign-component/example/lib/page/td_picker_page.dart

Lines changed: 147 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,130 @@ class _TDPickerPageState extends State<TDPickerPage> {
4141
},
4242
};
4343

44+
Map data_test = {
45+
'广东省': {
46+
'深圳市': ['南山区', '宝安区', '罗湖区', '福田区'],
47+
'广州市': ['天河区', '越秀区', '白云区', '花都区'],
48+
'佛山市': ['顺德区', '南海区', '禅城区']
49+
},
50+
'浙江省': {
51+
'杭州市': ['西湖区', '余杭区', '萧山区'],
52+
'宁波市': ['江东区', '北仑区', '奉化市'],
53+
'温州市': ['鹿城区', '瑞安市', '乐清市']
54+
},
55+
'江苏省': {
56+
'南京市': ['玄武区', '秦淮区', '建邺区', '鼓楼区', '浦口区', '栖霞区', '雨花台区', '江宁区', '六合区', '溧水区', '高淳区'],
57+
'无锡市': ['梁溪区', '锡山区', '惠山区', '滨湖区', '新吴区'],
58+
'徐州市': ['鼓楼区', '云龙区', '贾汪区', '泉山区', '铜山区'],
59+
'常州市': ['天宁区', '钟楼区', '新北区', '武进区', '金坛区'],
60+
'苏州市': ['姑苏区', '虎丘区', '吴中区', '相城区', '吴江区'],
61+
'南通市': ['崇川区', '港闸区', '通州区'],
62+
'连云港市': ['连云区', '海州区', '赣榆区'],
63+
'淮安市': ['淮安区', '淮阴区', '清江浦区', '洪泽区'],
64+
'盐城市': ['亭湖区', '盐都区', '大丰区', '建湖县'],
65+
'扬州市': ['广陵区', '邗江区', '江都区'],
66+
'镇江市': ['京口区', '润州区', '丹徒区'],
67+
'泰州市': ['海陵区', '高港区', '姜堰区'],
68+
'宿迁市': ['宿城区', '宿豫区']
69+
},
70+
'山东省': {
71+
'济南市': ['历下区', '市中区', '天桥区'],
72+
'青岛市': ['市南区', '市北区', '黄岛区'],
73+
'烟台市': ['芝罘区', '莱山区']
74+
},
75+
'河南省': {
76+
'郑州市': ['金水区', '中原区', '惠济区'],
77+
'洛阳市': ['老城区', '西工区'],
78+
'开封市': ['龙亭区', '顺河区']
79+
},
80+
'河北省': {
81+
'石家庄市': ['长安区', '桥西区', '裕华区'],
82+
'唐山市': ['路南区', '路北区'],
83+
'邯郸市': ['丛台区', '邯山区']
84+
},
85+
'四川省': {
86+
'成都市': ['锦江区', '青羊区', '武侯区'],
87+
'绵阳市': ['涪城区', '游仙区'],
88+
'德阳市': ['旌阳区', '罗江区']
89+
},
90+
'湖南省': {
91+
'长沙市': ['岳麓区', '开福区', '天心区'],
92+
'株洲市': ['天元区', '芦淞区'],
93+
'湘潭市': ['雨湖区', '岳塘区']
94+
},
95+
'湖北省': {
96+
'武汉市': ['江汉区', '武昌区', '洪山区'],
97+
'宜昌市': ['西陵区', '伍家岗区'],
98+
'襄阳市': ['樊城区', '襄城区']
99+
},
100+
'安徽省': {
101+
'合肥市': ['庐阳区', '蜀山区', '包河区'],
102+
'芜湖市': ['镜湖区', '弋江区'],
103+
'马鞍山市': ['花山区', '雨山区']
104+
},
105+
'江西省': {
106+
'南昌市': ['东湖区', '西湖区', '青山湖区'],
107+
'九江市': ['濂溪区', '浔阳区'],
108+
'赣州市': ['章贡区', '南康区']
109+
},
110+
'福建省': {
111+
'福州市': ['鼓楼区', '台江区', '仓山区'],
112+
'厦门市': ['思明区', '湖里区'],
113+
'泉州市': ['丰泽区', '鲤城区']
114+
},
115+
'云南省': {
116+
'昆明市': ['五华区', '盘龙区'],
117+
'大理市': ['大理古城', '下关镇'],
118+
'丽江市': ['古城区', '玉龙县']
119+
},
120+
'贵州省': {
121+
'贵阳市': ['云岩区', '南明区'],
122+
'遵义市': ['红花岗区', '汇川区'],
123+
'安顺市': ['西秀区', '平坝区']
124+
},
125+
'陕西省': {
126+
'西安市': ['碑林区', '莲湖区', '雁塔区'],
127+
'咸阳市': ['秦都区', '渭城区'],
128+
'宝鸡市': ['渭滨区', '金台区']
129+
},
130+
'山西省': {
131+
'太原市': ['小店区', '迎泽区'],
132+
'大同市': ['平城区', '云冈区'],
133+
'运城市': ['盐湖区', '永济市']
134+
},
135+
'辽宁省': {
136+
'沈阳市': ['和平区', '沈河区', '皇姑区'],
137+
'大连市': ['中山区', '西岗区'],
138+
'鞍山市': ['铁东区', '铁西区']
139+
},
140+
'吉林省': {
141+
'长春市': ['朝阳区', '南关区'],
142+
'吉林市': ['船营区', '昌邑区'],
143+
'延边州': ['延吉市', '敦化市']
144+
},
145+
'黑龙江省': {
146+
'哈尔滨市': ['道里区', '南岗区', '香坊区'],
147+
'齐齐哈尔市': ['龙沙区', '铁锋区'],
148+
'大庆市': ['萨尔图区', '龙凤区']
149+
},
150+
'北京市': {
151+
'北京市': ['朝阳区', '海淀区', '东城区', '西城区']
152+
},
153+
'上海市': {
154+
'上海市': ['浦东新区', '黄浦区', '静安区']
155+
},
156+
'重庆市': {
157+
'重庆市': ['渝中区', '江北区', '九龙坡区', '南岸区']
158+
},
159+
'香港': {
160+
'香港': ['九龙城区', '黄大仙区', '湾仔区', '离岛区']
161+
},
162+
'澳门': {
163+
'澳门': ['花地玛堂区', '圣安多尼堂区', '大堂区', '风顺堂区']
164+
}
165+
};
166+
167+
44168
String selected_5 = '';
45169

46170
@override
@@ -122,16 +246,19 @@ class _TDPickerPageState extends State<TDPickerPage> {
122246
Widget buildMultiArea(BuildContext context) {
123247
return GestureDetector(
124248
onTap: (){
125-
TDPicker.showMultiLinkedPicker(context, title: '选择地区',
126-
onConfirm: (selected) {
127-
setState(() {
128-
selected_3 = '${selected[0]} ${selected[1]} ${selected[2]}';
129-
});
130-
Navigator.of(context).pop();
131-
},
132-
data: data_3,
133-
columnNum: 3,
134-
initialData: ['浙江省', '杭州市', '西湖区']);
249+
TDPicker.showMultiLinkedPicker(context,
250+
title: '选择地区',
251+
onConfirm: (selected) {
252+
setState(() {
253+
selected_3 = '${selected[0]} ${selected[1]} ${selected[2]}';
254+
});
255+
Navigator.of(context).pop();
256+
},
257+
columnNum: 3,
258+
data: data_test, // ← 这里添加了必需的 data 参数
259+
initialData: ['广东省', '深圳市', '南山区'],
260+
261+
);
135262
},
136263
child: buildSelectRow(context, selected_3, '选择地区'),
137264
);
@@ -179,11 +306,11 @@ class _TDPickerPageState extends State<TDPickerPage> {
179306
leftText: '自定义取消',
180307
rightText: '自定义确认',
181308
title: '基础选择器', onConfirm: (selected) {
182-
setState(() {
183-
selected_5 = '${data_1[selected[0]]}';
184-
});
185-
Navigator.of(context).pop();
186-
}, data: [data_1]);
309+
setState(() {
310+
selected_5 = '${data_1[selected[0]]}';
311+
});
312+
Navigator.of(context).pop();
313+
}, data: [data_1]);
187314
},
188315
child: buildSelectRow(context, selected_5, '基础选择器'),
189316
),
@@ -193,11 +320,11 @@ class _TDPickerPageState extends State<TDPickerPage> {
193320
leftText: '自定义取消',
194321
rightText: '自定义确认',
195322
title: '联动选择器', onConfirm: (selected) {
196-
setState(() {
197-
selected_3 = '${selected[0]} ${selected[1]} ${selected[2]}';
198-
});
199-
Navigator.of(context).pop();
200-
}, data: data_3, columnNum: 3, initialData: ['浙江省', '杭州市', '西湖区']);
323+
setState(() {
324+
selected_3 = '${selected[0]} ${selected[1]} ${selected[2]}';
325+
});
326+
Navigator.of(context).pop();
327+
}, data: data_3, columnNum: 3, initialData: ['浙江省', '杭州市', '西湖区']);
201328
},
202329
child: buildSelectRow(context, selected_3, '联动选择器'),
203330
)

0 commit comments

Comments
 (0)