Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

🎨 Use switch pattern #462

Merged
merged 1 commit into from
Jul 23, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 10 additions & 21 deletions example/lib/customs/pickers/directory_file_asset_picker.dart
Original file line number Diff line number Diff line change
Expand Up @@ -702,17 +702,10 @@ class FileAssetPickerBuilder
int index,
List<File> currentAssets,
) {
int currentIndex;
switch (specialItemPosition) {
case SpecialItemPosition.none:
case SpecialItemPosition.append:
currentIndex = index;
break;
case SpecialItemPosition.prepend:
currentIndex = index - 1;
break;
}

final int currentIndex = switch (specialItemPosition) {
SpecialItemPosition.none || SpecialItemPosition.append => index,
SpecialItemPosition.prepend => index - 1,
};
final File asset = currentAssets.elementAt(currentIndex);
final Widget builder = imageAndVideoItemBuilder(
context,
Expand Down Expand Up @@ -745,16 +738,12 @@ class FileAssetPickerBuilder
required List<File> assets,
int placeholderCount = 0,
}) {
int length;
switch (specialItemPosition) {
case SpecialItemPosition.none:
length = assets.length;
break;
case SpecialItemPosition.prepend:
case SpecialItemPosition.append:
length = assets.length + 1;
break;
}
final int length = switch (specialItemPosition) {
SpecialItemPosition.none => assets.length,
SpecialItemPosition.prepend ||
SpecialItemPosition.append =>
assets.length + 1,
};
return length + placeholderCount;
}

Expand Down
34 changes: 10 additions & 24 deletions example/lib/customs/pickers/multi_tabs_assets_picker.dart
Original file line number Diff line number Diff line change
Expand Up @@ -359,19 +359,12 @@ class MultiTabAssetPickerBuilder extends DefaultAssetPickerBuilderDelegate {
builder: (_, __) => Selector<TabController, int>(
selector: (_, TabController p) => p.index,
builder: (_, int index, __) {
final DefaultAssetPickerProvider pickerProvider;
switch (index) {
case 1:
pickerProvider = videosProvider;
break;
case 2:
pickerProvider = imagesProvider;
break;
default:
pickerProvider = provider;
}
return ChangeNotifierProvider<DefaultAssetPickerProvider>.value(
value: pickerProvider,
value: switch (index) {
1 => videosProvider,
2 => imagesProvider,
_ => provider,
},
builder: (BuildContext c, _) => selector(c),
);
},
Expand Down Expand Up @@ -417,19 +410,12 @@ class MultiTabAssetPickerBuilder extends DefaultAssetPickerBuilderDelegate {
builder: (_, __) => Selector<TabController, int>(
selector: (_, TabController p) => p.index,
builder: (_, int index, __) {
final DefaultAssetPickerProvider pickerProvider;
switch (index) {
case 1:
pickerProvider = videosProvider;
break;
case 2:
pickerProvider = imagesProvider;
break;
default:
pickerProvider = provider;
}
return ChangeNotifierProvider<DefaultAssetPickerProvider>.value(
value: pickerProvider,
value: switch (index) {
1 => videosProvider,
2 => imagesProvider,
_ => provider,
},
builder: (_, __) => button,
);
},
Expand Down
14 changes: 5 additions & 9 deletions example/lib/widgets/asset_widget_builder.dart
Original file line number Diff line number Diff line change
Expand Up @@ -80,14 +80,10 @@ class AssetWidgetBuilder extends StatelessWidget {

@override
Widget build(BuildContext context) {
switch (entity.type) {
case AssetType.audio:
return _audioAssetWidget(context);
case AssetType.video:
return _videoAssetWidget(context);
case AssetType.image:
case AssetType.other:
return _imageAssetWidget(context);
}
return switch (entity.type) {
AssetType.audio => _audioAssetWidget(context),
AssetType.video => _videoAssetWidget(context),
AssetType.image || AssetType.other => _imageAssetWidget(context),
};
}
}
31 changes: 11 additions & 20 deletions lib/src/delegates/asset_picker_builder_delegate.dart
Original file line number Diff line number Diff line change
Expand Up @@ -1255,19 +1255,13 @@ class DefaultAssetPickerBuilderDelegate
}

final AssetEntity asset = currentAssets.elementAt(currentIndex);
final Widget builder;
switch (asset.type) {
case AssetType.audio:
builder = audioItemBuilder(context, currentIndex, asset);
break;
case AssetType.image:
case AssetType.video:
builder = imageAndVideoItemBuilder(context, currentIndex, asset);
break;
case AssetType.other:
builder = const SizedBox.shrink();
break;
}
final Widget builder = switch (asset.type) {
AssetType.image ||
AssetType.video =>
imageAndVideoItemBuilder(context, currentIndex, asset),
AssetType.audio => audioItemBuilder(context, currentIndex, asset),
AssetType.other => const SizedBox.shrink(),
};
final Widget content = Stack(
key: ValueKey<String>(asset.id),
children: <Widget>[
Expand Down Expand Up @@ -1401,13 +1395,10 @@ class DefaultAssetPickerBuilderDelegate
if (currentPathEntity?.isAll != true && specialItem == null) {
return length;
}
switch (specialItemPosition) {
case SpecialItemPosition.none:
return length;
case SpecialItemPosition.prepend:
case SpecialItemPosition.append:
return length + 1;
}
return switch (specialItemPosition) {
SpecialItemPosition.none => length,
SpecialItemPosition.prepend || SpecialItemPosition.append => length + 1,
};
}

@override
Expand Down
28 changes: 12 additions & 16 deletions lib/src/delegates/asset_picker_text_delegate.dart
Original file line number Diff line number Diff line change
Expand Up @@ -107,10 +107,10 @@ class AssetPickerTextDelegate {
String durationIndicatorBuilder(Duration duration) {
const String separator = ':';
final String minute = duration.inMinutes.toString().padLeft(2, '0');
final String second =
(duration - Duration(minutes: duration.inMinutes)).inSeconds
.toString()
.padLeft(2, '0');
final String second = (duration - Duration(minutes: duration.inMinutes))
.inSeconds
.toString()
.padLeft(2, '0');
return '$minute$separator$second';
}

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

String semanticTypeLabel(AssetType type) {
switch (type) {
case AssetType.audio:
return sTypeAudioLabel;
case AssetType.image:
return sTypeImageLabel;
case AssetType.video:
return sTypeVideoLabel;
case AssetType.other:
return sTypeOtherLabel;
}
return switch (type) {
AssetType.audio => sTypeAudioLabel,
AssetType.image => sTypeImageLabel,
AssetType.video => sTypeVideoLabel,
AssetType.other => sTypeOtherLabel,
};
}

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

@override
String get goToSystemSettings => 'Sistem ayarlarına gidin';
Expand Down
65 changes: 23 additions & 42 deletions lib/src/delegates/asset_picker_viewer_builder_delegate.dart
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
// in the LICENSE file.

import 'dart:async';
import 'dart:io';
import 'dart:io' show Platform;
import 'dart:math' as math;

import 'package:extended_image/extended_image.dart';
Expand Down Expand Up @@ -324,17 +324,13 @@ abstract class AssetPickerViewerBuilderDelegate<Asset, Path> {
ExtendedImageState state, {
bool hasLoaded = false,
}) {
switch (state.extendedImageLoadState) {
case LoadState.completed:
if (hasLoaded) {
return state.completedWidget;
}
return FadeImageBuilder(child: state.completedWidget);
case LoadState.failed:
return failedItemBuilder(context);
case LoadState.loading:
return const SizedBox.shrink();
}
return switch (state.extendedImageLoadState) {
LoadState.completed => hasLoaded
? state.completedWidget
: FadeImageBuilder(child: state.completedWidget),
LoadState.failed => failedItemBuilder(context),
LoadState.loading => const SizedBox.shrink(),
};
}

/// The item widget when [AssetEntity.thumbnailData] load failed.
Expand Down Expand Up @@ -413,34 +409,25 @@ class DefaultAssetPickerViewerBuilderDelegate
@override
Widget assetPageBuilder(BuildContext context, int index) {
final AssetEntity asset = previewAssets.elementAt(index);
final Widget builder;
switch (asset.type) {
case AssetType.audio:
builder = AudioPageBuilder(asset: asset);
break;
case AssetType.image:
builder = ImagePageBuilder(
final Widget builder = switch (asset.type) {
AssetType.audio => AudioPageBuilder(asset: asset),
AssetType.image => ImagePageBuilder(
asset: asset,
delegate: this,
previewThumbnailSize: previewThumbnailSize,
);
break;
case AssetType.video:
builder = VideoPageBuilder(
),
AssetType.video => VideoPageBuilder(
asset: asset,
delegate: this,
hasOnlyOneVideoAndMoment: isWeChatMoment && hasVideo,
);
break;
case AssetType.other:
builder = Center(
),
AssetType.other => Center(
child: ScaleText(
textDelegate.unSupportedAssetType,
semanticsLabel: semanticsTextDelegate.unSupportedAssetType,
),
);
break;
}
),
};
return MergeSemantics(
child: Consumer<AssetPickerViewerProvider<AssetEntity>?>(
builder: (
Expand Down Expand Up @@ -643,18 +630,12 @@ class DefaultAssetPickerViewerBuilderDelegate
builder: (_, AsyncSnapshot<int> snapshot) {
final AssetEntity asset = selectedAssets!.elementAt(index);
final bool isViewing = previewAssets[snapshot.data!] == asset;
final Widget item = () {
switch (asset.type) {
case AssetType.image:
return _imagePreviewItem(asset);
case AssetType.video:
return _videoPreviewItem(asset);
case AssetType.audio:
return _audioPreviewItem(asset);
case AssetType.other:
return const SizedBox.shrink();
}
}();
final Widget item = switch (asset.type) {
AssetType.image => _imagePreviewItem(asset),
AssetType.video => _videoPreviewItem(asset),
AssetType.audio => _audioPreviewItem(asset),
AssetType.other => const SizedBox.shrink(),
};
return Semantics(
label: '${semanticsTextDelegate.semanticTypeLabel(asset.type)}'
'${index + 1}',
Expand Down
19 changes: 5 additions & 14 deletions lib/src/widget/builder/asset_entity_grid_item_builder.dart
Original file line number Diff line number Diff line change
Expand Up @@ -31,20 +31,11 @@ class AssetEntityGridItemWidgetState extends State<AssetEntityGridItemBuilder> {
return ExtendedImage(
image: widget.image,
fit: BoxFit.cover,
loadStateChanged: (ExtendedImageState state) {
Widget loader = const SizedBox.shrink();
switch (state.extendedImageLoadState) {
case LoadState.loading:
loader = const ColoredBox(color: Color(0x10ffffff));
break;
case LoadState.completed:
loader = RepaintBoundary(child: state.completedWidget);
break;
case LoadState.failed:
loader = widget.failedItemBuilder(context);
break;
}
return loader;
loadStateChanged: (ExtendedImageState state) =>
switch (state.extendedImageLoadState) {
LoadState.loading => const ColoredBox(color: Color(0x10ffffff)),
LoadState.completed => RepaintBoundary(child: state.completedWidget),
LoadState.failed => widget.failedItemBuilder(context),
},
);
}
Expand Down
8 changes: 5 additions & 3 deletions lib/src/widget/platform_progress_indicator.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,8 @@
// Use of this source code is governed by an Apache license that can be found
// in the LICENSE file.

import 'dart:io';

import 'package:flutter/cupertino.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';

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

bool get isAppleOS => Platform.isIOS || Platform.isMacOS;
bool get isAppleOS => switch (defaultTargetPlatform) {
TargetPlatform.iOS || TargetPlatform.macOS => true,
_ => false,
};

@override
Widget build(BuildContext context) {
Expand Down