feat: custom horizontal preview

Closes #117

Signed-off-by: bggRGjQaUbCoE <githubaccount56556@proton.me>
This commit is contained in:
bggRGjQaUbCoE
2025-01-08 19:13:37 +08:00
parent 0b9d4d970a
commit 8d4294ba75
22 changed files with 255 additions and 97 deletions

View File

@@ -8,6 +8,7 @@ import 'package:flutter_html/flutter_html.dart';
Widget articleContent({
required BuildContext context,
required List<ArticleContentModel> list,
Function(List<String>, int)? callback,
}) {
List<String>? imgList = list
.where((item) => item.pic != null)
@@ -59,10 +60,17 @@ Widget articleContent({
tag: item.pic!.pics!.first.url!,
child: GestureDetector(
onTap: () {
context.imageView(
initialPage: imgList.indexOf(item.pic!.pics!.first.url!),
imgList: imgList,
);
if (callback != null) {
callback(
imgList,
imgList.indexOf(item.pic!.pics!.first.url!),
);
} else {
context.imageView(
initialPage: imgList.indexOf(item.pic!.pics!.first.url!),
imgList: imgList,
);
}
},
child: NetworkImgLayer(
width: constraints.maxWidth,

View File

@@ -9,6 +9,7 @@ Widget htmlRender({
int? imgCount,
List<String>? imgList,
required double constrainedWidth,
Function(List<String>, int)? callback,
}) {
return SelectionArea(
child: Html(
@@ -49,9 +50,13 @@ Widget htmlRender({
tag: imgUrl,
child: GestureDetector(
onTap: () {
context.imageView(
imgList: [imgUrl],
);
if (callback != null) {
callback([imgUrl], 0);
} else {
context.imageView(
imgList: [imgUrl],
);
}
},
child: NetworkImgLayer(
width: isEmote ? 22 : constrainedWidth,

View File

@@ -25,10 +25,11 @@ class ImageModel {
Widget imageview(
double maxWidth,
List<ImageModel> picArr, [
List<ImageModel> picArr, {
VoidCallback? onViewImage,
ValueChanged<int>? onDismissed,
]) {
Function(List<String>, int)? callback,
}) {
double imageWidth = (maxWidth - 2 * 5) / 3;
double imageHeight = imageWidth;
if (picArr.length == 1) {
@@ -59,12 +60,16 @@ Widget imageview(
tag: picArr[index].url,
child: GestureDetector(
onTap: () {
onViewImage?.call();
context.imageView(
initialPage: index,
imgList: picArr.map((item) => item.url).toList(),
onDismissed: onDismissed,
);
if (callback != null) {
callback(picArr.map((item) => item.url).toList(), index);
} else {
onViewImage?.call();
context.imageView(
initialPage: index,
imgList: picArr.map((item) => item.url).toList(),
onDismissed: onDismissed,
);
}
},
child: Stack(
alignment: Alignment.center,

View File

@@ -42,8 +42,11 @@ class InteractiveviewerGallery<T> extends StatefulWidget {
this.minScale = 1.0,
this.onPageChanged,
this.onDismissed,
this.setStatusBar,
});
final bool? setStatusBar;
/// The sources to show.
final List<String> sources;
@@ -108,7 +111,9 @@ class _InteractiveviewerGalleryState extends State<InteractiveviewerGallery>
});
currentIndex = widget.initIndex;
setStatusBar();
if (widget.setStatusBar != false) {
setStatusBar();
}
}
setStatusBar() async {
@@ -125,8 +130,10 @@ class _InteractiveviewerGalleryState extends State<InteractiveviewerGallery>
_pageController?.dispose();
_animationController.removeListener(() {});
_animationController.dispose();
if (Platform.isIOS || Platform.isAndroid) {
StatusBarControl.setHidden(false, animation: StatusBarAnimation.FADE);
if (widget.setStatusBar != false) {
if (Platform.isIOS || Platform.isAndroid) {
StatusBarControl.setHidden(false, animation: StatusBarAnimation.FADE);
}
}
for (int index = 0; index < widget.sources.length; index++) {
CachedNetworkImageProvider(_getActualUrl(index)).evict();