@@ -19,6 +19,7 @@ class _BasemapStyleExamplePageState extends State<BasemapStyleExamplePage> {
19
19
/// null when executed on a platform that's not supported yet
20
20
ArcgisMapController ? _controller;
21
21
BaseMap selectedBasemap = BaseMap .values.first;
22
+ var _isSwitchingAllStyles = false ;
22
23
bool show3dMap = false ;
23
24
bool isBasemapMenuOpened = false ;
24
25
final initialCenter = const LatLng (51.16 , 10.45 );
@@ -63,7 +64,6 @@ class _BasemapStyleExamplePageState extends State<BasemapStyleExamplePage> {
63
64
@override
64
65
Widget build (BuildContext context) {
65
66
return Scaffold (
66
- // appBar: AppBar(),
67
67
key: _scaffoldKey,
68
68
body: GestureDetector (
69
69
onTap: () {
@@ -170,6 +170,14 @@ class _BasemapStyleExamplePageState extends State<BasemapStyleExamplePage> {
170
170
],
171
171
),
172
172
SizedBox (height: 8 ),
173
+ Center (
174
+ child: ElevatedButton (
175
+ onPressed:
176
+ _isSwitchingAllStyles ? null : _switchAllStyles,
177
+ child: Text (_isSwitchingAllStyles
178
+ ? "Switching... ${BaseMap .values .indexOf (selectedBasemap ) + 1 }/${BaseMap .values .length }"
179
+ : "Switch through all styles once" )),
180
+ ),
173
181
Center (
174
182
child: ElevatedButton (
175
183
style: ButtonStyle (
@@ -178,53 +186,56 @@ class _BasemapStyleExamplePageState extends State<BasemapStyleExamplePage> {
178
186
borderRadius: BorderRadius .circular (8 )),
179
187
),
180
188
),
181
- onPressed: () {
182
- showModalBottomSheet (
183
- context: context,
184
- builder: (context) {
185
- return PointerInterceptorWeb (
186
- child: ListView .separated (
187
- padding: EdgeInsets .only (
188
- top: 8 ,
189
- bottom:
190
- MediaQuery .paddingOf (context).bottom +
191
- 8 ),
192
- itemCount: BaseMap .values.length,
193
- separatorBuilder: (_, __) => Padding (
194
- padding: const EdgeInsets .symmetric (
195
- horizontal: 20 ),
196
- child: Divider (
197
- height: 1 ,
198
- ),
199
- ),
200
- itemBuilder: (context, int i) {
201
- final basemap = BaseMap .values[i];
202
- return ListTile (
203
- dense: true ,
204
- onTap: () {
205
- Navigator .pop (context);
206
- setState (() {
207
- selectedBasemap = basemap;
208
- });
209
-
210
- _controller!
211
- .toggleBaseMap (baseMap: basemap);
212
- },
213
- title: Text (
214
- basemap.name,
215
- style: TextStyle (
216
- color: Theme .of (context)
217
- .buttonTheme
218
- .colorScheme!
219
- .onPrimaryContainer,
189
+ onPressed: _isSwitchingAllStyles
190
+ ? null
191
+ : () {
192
+ showModalBottomSheet (
193
+ context: context,
194
+ builder: (context) {
195
+ return PointerInterceptorWeb (
196
+ child: ListView .separated (
197
+ padding: EdgeInsets .only (
198
+ top: 8 ,
199
+ bottom:
200
+ MediaQuery .paddingOf (context)
201
+ .bottom +
202
+ 8 ),
203
+ itemCount: BaseMap .values.length,
204
+ separatorBuilder: (_, __) => Padding (
205
+ padding: const EdgeInsets .symmetric (
206
+ horizontal: 20 ),
207
+ child: Divider (
208
+ height: 1 ,
209
+ ),
220
210
),
211
+ itemBuilder: (context, int i) {
212
+ final basemap = BaseMap .values[i];
213
+ return ListTile (
214
+ dense: true ,
215
+ onTap: () {
216
+ Navigator .pop (context);
217
+ setState (() {
218
+ selectedBasemap = basemap;
219
+ });
220
+
221
+ _controller! .toggleBaseMap (
222
+ baseMap: basemap);
223
+ },
224
+ title: Text (
225
+ basemap.name,
226
+ style: TextStyle (
227
+ color: Theme .of (context)
228
+ .buttonTheme
229
+ .colorScheme!
230
+ .onPrimaryContainer,
231
+ ),
232
+ ),
233
+ );
234
+ },
221
235
),
222
236
);
223
- },
224
- ),
225
- );
226
- });
227
- },
237
+ });
238
+ },
228
239
child: Row (
229
240
mainAxisSize: MainAxisSize .min,
230
241
children: [
@@ -264,4 +275,21 @@ class _BasemapStyleExamplePageState extends State<BasemapStyleExamplePage> {
264
275
),
265
276
);
266
277
}
278
+
279
+ Future <void > _switchAllStyles () async {
280
+ setState (() => _isSwitchingAllStyles = true );
281
+ try {
282
+ for (final baseMap in BaseMap .values) {
283
+ await _controller? .toggleBaseMap (baseMap: baseMap);
284
+ if (! mounted) return ;
285
+ setState (() => selectedBasemap = baseMap);
286
+ await Future <void >.delayed (const Duration (seconds: 2 ));
287
+ if (! mounted) return ;
288
+ }
289
+ } finally {
290
+ if (mounted) {
291
+ setState (() => _isSwitchingAllStyles = false );
292
+ }
293
+ }
294
+ }
267
295
}
0 commit comments