bottomDetailItemBuilder method
Thumb item widgets in bottom detail. 底部信息栏单个资源缩略部件
Implementation
@override
Widget bottomDetailItemBuilder(BuildContext context, int index) {
return Padding(
padding: const EdgeInsets.symmetric(horizontal: 8.0, vertical: 16.0),
child: AspectRatio(
aspectRatio: 1.0,
child: StreamBuilder<int>(
initialData: currentIndex,
stream: pageStreamController.stream,
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);
default:
return const SizedBox.shrink();
}
}();
return GestureDetector(
onTap: () {
if (previewAssets == selectedAssets) {
pageController.jumpToPage(index);
}
},
child: Selector<AssetPickerViewerProvider<AssetEntity>?,
List<AssetEntity>?>(
selector: (_, AssetPickerViewerProvider<AssetEntity>? p) =>
p?.currentlySelectedAssets,
child: _item,
builder: (
_,
List<AssetEntity>? currentlySelectedAssets,
Widget? w,
) {
final bool isSelected =
currentlySelectedAssets?.contains(asset) ?? false;
return Stack(
children: <Widget>[
w!,
AnimatedContainer(
duration: kThemeAnimationDuration,
curve: Curves.easeInOut,
decoration: BoxDecoration(
border: isViewing
? Border.all(
color: themeData.colorScheme.secondary,
width: 2.0,
)
: null,
color: isSelected
? null
: themeData.colorScheme.surface.withOpacity(0.54),
),
),
],
);
},
),
);
},
),
),
);
}