bottomDetailItemBuilder method

  1. @override
Widget bottomDetailItemBuilder(
  1. BuildContext context,
  2. int index
)
override

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),
                      ),
                    ),
                  ],
                );
              },
            ),
          );
        },
      ),
    ),
  );
}