Skip to content

Commit 4add48c

Browse files
authored
🎨 Use switch pattern (#462)
1 parent 092e244 commit 4add48c

8 files changed

+81
-149
lines changed

example/lib/customs/pickers/directory_file_asset_picker.dart

Lines changed: 10 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -702,17 +702,10 @@ class FileAssetPickerBuilder
702702
int index,
703703
List<File> currentAssets,
704704
) {
705-
int currentIndex;
706-
switch (specialItemPosition) {
707-
case SpecialItemPosition.none:
708-
case SpecialItemPosition.append:
709-
currentIndex = index;
710-
break;
711-
case SpecialItemPosition.prepend:
712-
currentIndex = index - 1;
713-
break;
714-
}
715-
705+
final int currentIndex = switch (specialItemPosition) {
706+
SpecialItemPosition.none || SpecialItemPosition.append => index,
707+
SpecialItemPosition.prepend => index - 1,
708+
};
716709
final File asset = currentAssets.elementAt(currentIndex);
717710
final Widget builder = imageAndVideoItemBuilder(
718711
context,
@@ -745,16 +738,12 @@ class FileAssetPickerBuilder
745738
required List<File> assets,
746739
int placeholderCount = 0,
747740
}) {
748-
int length;
749-
switch (specialItemPosition) {
750-
case SpecialItemPosition.none:
751-
length = assets.length;
752-
break;
753-
case SpecialItemPosition.prepend:
754-
case SpecialItemPosition.append:
755-
length = assets.length + 1;
756-
break;
757-
}
741+
final int length = switch (specialItemPosition) {
742+
SpecialItemPosition.none => assets.length,
743+
SpecialItemPosition.prepend ||
744+
SpecialItemPosition.append =>
745+
assets.length + 1,
746+
};
758747
return length + placeholderCount;
759748
}
760749

example/lib/customs/pickers/multi_tabs_assets_picker.dart

Lines changed: 10 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -359,19 +359,12 @@ class MultiTabAssetPickerBuilder extends DefaultAssetPickerBuilderDelegate {
359359
builder: (_, __) => Selector<TabController, int>(
360360
selector: (_, TabController p) => p.index,
361361
builder: (_, int index, __) {
362-
final DefaultAssetPickerProvider pickerProvider;
363-
switch (index) {
364-
case 1:
365-
pickerProvider = videosProvider;
366-
break;
367-
case 2:
368-
pickerProvider = imagesProvider;
369-
break;
370-
default:
371-
pickerProvider = provider;
372-
}
373362
return ChangeNotifierProvider<DefaultAssetPickerProvider>.value(
374-
value: pickerProvider,
363+
value: switch (index) {
364+
1 => videosProvider,
365+
2 => imagesProvider,
366+
_ => provider,
367+
},
375368
builder: (BuildContext c, _) => selector(c),
376369
);
377370
},
@@ -417,19 +410,12 @@ class MultiTabAssetPickerBuilder extends DefaultAssetPickerBuilderDelegate {
417410
builder: (_, __) => Selector<TabController, int>(
418411
selector: (_, TabController p) => p.index,
419412
builder: (_, int index, __) {
420-
final DefaultAssetPickerProvider pickerProvider;
421-
switch (index) {
422-
case 1:
423-
pickerProvider = videosProvider;
424-
break;
425-
case 2:
426-
pickerProvider = imagesProvider;
427-
break;
428-
default:
429-
pickerProvider = provider;
430-
}
431413
return ChangeNotifierProvider<DefaultAssetPickerProvider>.value(
432-
value: pickerProvider,
414+
value: switch (index) {
415+
1 => videosProvider,
416+
2 => imagesProvider,
417+
_ => provider,
418+
},
433419
builder: (_, __) => button,
434420
);
435421
},

example/lib/widgets/asset_widget_builder.dart

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -80,14 +80,10 @@ class AssetWidgetBuilder extends StatelessWidget {
8080

8181
@override
8282
Widget build(BuildContext context) {
83-
switch (entity.type) {
84-
case AssetType.audio:
85-
return _audioAssetWidget(context);
86-
case AssetType.video:
87-
return _videoAssetWidget(context);
88-
case AssetType.image:
89-
case AssetType.other:
90-
return _imageAssetWidget(context);
91-
}
83+
return switch (entity.type) {
84+
AssetType.audio => _audioAssetWidget(context),
85+
AssetType.video => _videoAssetWidget(context),
86+
AssetType.image || AssetType.other => _imageAssetWidget(context),
87+
};
9288
}
9389
}

lib/src/delegates/asset_picker_builder_delegate.dart

Lines changed: 11 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1255,19 +1255,13 @@ class DefaultAssetPickerBuilderDelegate
12551255
}
12561256

12571257
final AssetEntity asset = currentAssets.elementAt(currentIndex);
1258-
final Widget builder;
1259-
switch (asset.type) {
1260-
case AssetType.audio:
1261-
builder = audioItemBuilder(context, currentIndex, asset);
1262-
break;
1263-
case AssetType.image:
1264-
case AssetType.video:
1265-
builder = imageAndVideoItemBuilder(context, currentIndex, asset);
1266-
break;
1267-
case AssetType.other:
1268-
builder = const SizedBox.shrink();
1269-
break;
1270-
}
1258+
final Widget builder = switch (asset.type) {
1259+
AssetType.image ||
1260+
AssetType.video =>
1261+
imageAndVideoItemBuilder(context, currentIndex, asset),
1262+
AssetType.audio => audioItemBuilder(context, currentIndex, asset),
1263+
AssetType.other => const SizedBox.shrink(),
1264+
};
12711265
final Widget content = Stack(
12721266
key: ValueKey<String>(asset.id),
12731267
children: <Widget>[
@@ -1401,13 +1395,10 @@ class DefaultAssetPickerBuilderDelegate
14011395
if (currentPathEntity?.isAll != true && specialItem == null) {
14021396
return length;
14031397
}
1404-
switch (specialItemPosition) {
1405-
case SpecialItemPosition.none:
1406-
return length;
1407-
case SpecialItemPosition.prepend:
1408-
case SpecialItemPosition.append:
1409-
return length + 1;
1410-
}
1398+
return switch (specialItemPosition) {
1399+
SpecialItemPosition.none => length,
1400+
SpecialItemPosition.prepend || SpecialItemPosition.append => length + 1,
1401+
};
14111402
}
14121403

14131404
@override

lib/src/delegates/asset_picker_text_delegate.dart

Lines changed: 12 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -107,10 +107,10 @@ class AssetPickerTextDelegate {
107107
String durationIndicatorBuilder(Duration duration) {
108108
const String separator = ':';
109109
final String minute = duration.inMinutes.toString().padLeft(2, '0');
110-
final String second =
111-
(duration - Duration(minutes: duration.inMinutes)).inSeconds
112-
.toString()
113-
.padLeft(2, '0');
110+
final String second = (duration - Duration(minutes: duration.inMinutes))
111+
.inSeconds
112+
.toString()
113+
.padLeft(2, '0');
114114
return '$minute$separator$second';
115115
}
116116

@@ -127,16 +127,12 @@ class AssetPickerTextDelegate {
127127
String get sTypeOtherLabel => '其他资源';
128128

129129
String semanticTypeLabel(AssetType type) {
130-
switch (type) {
131-
case AssetType.audio:
132-
return sTypeAudioLabel;
133-
case AssetType.image:
134-
return sTypeImageLabel;
135-
case AssetType.video:
136-
return sTypeVideoLabel;
137-
case AssetType.other:
138-
return sTypeOtherLabel;
139-
}
130+
return switch (type) {
131+
AssetType.audio => sTypeAudioLabel,
132+
AssetType.image => sTypeImageLabel,
133+
AssetType.video => sTypeVideoLabel,
134+
AssetType.other => sTypeOtherLabel,
135+
};
140136
}
141137

142138
String get sActionPlayHint => '播放';
@@ -991,8 +987,8 @@ class TurkishAssetPickerTextDelegate extends AssetPickerTextDelegate {
991987
@override
992988
String get accessAllTip =>
993989
'Uygulama, cihazdaki yalnızca bazı dosyalara erişebilir. '
994-
'Sistem ayarlarını açın ve uygulamanın şunları yapmasına izin verin '
995-
'Cihazdaki tüm dosyalara erişin';
990+
'Sistem ayarlarını açın ve uygulamanın şunları yapmasına izin verin '
991+
'Cihazdaki tüm dosyalara erişin';
996992

997993
@override
998994
String get goToSystemSettings => 'Sistem ayarlarına gidin';

lib/src/delegates/asset_picker_viewer_builder_delegate.dart

Lines changed: 23 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
// in the LICENSE file.
44

55
import 'dart:async';
6-
import 'dart:io';
6+
import 'dart:io' show Platform;
77
import 'dart:math' as math;
88

99
import 'package:extended_image/extended_image.dart';
@@ -324,17 +324,13 @@ abstract class AssetPickerViewerBuilderDelegate<Asset, Path> {
324324
ExtendedImageState state, {
325325
bool hasLoaded = false,
326326
}) {
327-
switch (state.extendedImageLoadState) {
328-
case LoadState.completed:
329-
if (hasLoaded) {
330-
return state.completedWidget;
331-
}
332-
return FadeImageBuilder(child: state.completedWidget);
333-
case LoadState.failed:
334-
return failedItemBuilder(context);
335-
case LoadState.loading:
336-
return const SizedBox.shrink();
337-
}
327+
return switch (state.extendedImageLoadState) {
328+
LoadState.completed => hasLoaded
329+
? state.completedWidget
330+
: FadeImageBuilder(child: state.completedWidget),
331+
LoadState.failed => failedItemBuilder(context),
332+
LoadState.loading => const SizedBox.shrink(),
333+
};
338334
}
339335

340336
/// The item widget when [AssetEntity.thumbnailData] load failed.
@@ -413,34 +409,25 @@ class DefaultAssetPickerViewerBuilderDelegate
413409
@override
414410
Widget assetPageBuilder(BuildContext context, int index) {
415411
final AssetEntity asset = previewAssets.elementAt(index);
416-
final Widget builder;
417-
switch (asset.type) {
418-
case AssetType.audio:
419-
builder = AudioPageBuilder(asset: asset);
420-
break;
421-
case AssetType.image:
422-
builder = ImagePageBuilder(
412+
final Widget builder = switch (asset.type) {
413+
AssetType.audio => AudioPageBuilder(asset: asset),
414+
AssetType.image => ImagePageBuilder(
423415
asset: asset,
424416
delegate: this,
425417
previewThumbnailSize: previewThumbnailSize,
426-
);
427-
break;
428-
case AssetType.video:
429-
builder = VideoPageBuilder(
418+
),
419+
AssetType.video => VideoPageBuilder(
430420
asset: asset,
431421
delegate: this,
432422
hasOnlyOneVideoAndMoment: isWeChatMoment && hasVideo,
433-
);
434-
break;
435-
case AssetType.other:
436-
builder = Center(
423+
),
424+
AssetType.other => Center(
437425
child: ScaleText(
438426
textDelegate.unSupportedAssetType,
439427
semanticsLabel: semanticsTextDelegate.unSupportedAssetType,
440428
),
441-
);
442-
break;
443-
}
429+
),
430+
};
444431
return MergeSemantics(
445432
child: Consumer<AssetPickerViewerProvider<AssetEntity>?>(
446433
builder: (
@@ -643,18 +630,12 @@ class DefaultAssetPickerViewerBuilderDelegate
643630
builder: (_, AsyncSnapshot<int> snapshot) {
644631
final AssetEntity asset = selectedAssets!.elementAt(index);
645632
final bool isViewing = previewAssets[snapshot.data!] == asset;
646-
final Widget item = () {
647-
switch (asset.type) {
648-
case AssetType.image:
649-
return _imagePreviewItem(asset);
650-
case AssetType.video:
651-
return _videoPreviewItem(asset);
652-
case AssetType.audio:
653-
return _audioPreviewItem(asset);
654-
case AssetType.other:
655-
return const SizedBox.shrink();
656-
}
657-
}();
633+
final Widget item = switch (asset.type) {
634+
AssetType.image => _imagePreviewItem(asset),
635+
AssetType.video => _videoPreviewItem(asset),
636+
AssetType.audio => _audioPreviewItem(asset),
637+
AssetType.other => const SizedBox.shrink(),
638+
};
658639
return Semantics(
659640
label: '${semanticsTextDelegate.semanticTypeLabel(asset.type)}'
660641
'${index + 1}',

lib/src/widget/builder/asset_entity_grid_item_builder.dart

Lines changed: 5 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -31,20 +31,11 @@ class AssetEntityGridItemWidgetState extends State<AssetEntityGridItemBuilder> {
3131
return ExtendedImage(
3232
image: widget.image,
3333
fit: BoxFit.cover,
34-
loadStateChanged: (ExtendedImageState state) {
35-
Widget loader = const SizedBox.shrink();
36-
switch (state.extendedImageLoadState) {
37-
case LoadState.loading:
38-
loader = const ColoredBox(color: Color(0x10ffffff));
39-
break;
40-
case LoadState.completed:
41-
loader = RepaintBoundary(child: state.completedWidget);
42-
break;
43-
case LoadState.failed:
44-
loader = widget.failedItemBuilder(context);
45-
break;
46-
}
47-
return loader;
34+
loadStateChanged: (ExtendedImageState state) =>
35+
switch (state.extendedImageLoadState) {
36+
LoadState.loading => const ColoredBox(color: Color(0x10ffffff)),
37+
LoadState.completed => RepaintBoundary(child: state.completedWidget),
38+
LoadState.failed => widget.failedItemBuilder(context),
4839
},
4940
);
5041
}

lib/src/widget/platform_progress_indicator.dart

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,8 @@
22
// Use of this source code is governed by an Apache license that can be found
33
// in the LICENSE file.
44

5-
import 'dart:io';
6-
75
import 'package:flutter/cupertino.dart';
6+
import 'package:flutter/foundation.dart';
87
import 'package:flutter/material.dart';
98

109
/// Progress Indicator. Used in loading data.
@@ -26,7 +25,10 @@ class PlatformProgressIndicator extends StatelessWidget {
2625
final double? value;
2726
final Brightness? brightness;
2827

29-
bool get isAppleOS => Platform.isIOS || Platform.isMacOS;
28+
bool get isAppleOS => switch (defaultTargetPlatform) {
29+
TargetPlatform.iOS || TargetPlatform.macOS => true,
30+
_ => false,
31+
};
3032

3133
@override
3234
Widget build(BuildContext context) {

0 commit comments

Comments
 (0)