初始化
This commit is contained in:
61
lib/widgets/common/preview/file_previewer.dart
Normal file
61
lib/widgets/common/preview/file_previewer.dart
Normal file
@@ -0,0 +1,61 @@
|
||||
import 'package:cached_network_image/cached_network_image.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_cached_pdfview/flutter_cached_pdfview.dart';
|
||||
import 'package:go_router/go_router.dart';
|
||||
|
||||
void showFilePreviewer(
|
||||
BuildContext context, {
|
||||
required String url,
|
||||
}) {
|
||||
showDialog(
|
||||
context: context,
|
||||
builder: (BuildContext context) {
|
||||
return FilePreviewer(
|
||||
url: url,
|
||||
);
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
class FilePreviewer extends StatelessWidget {
|
||||
final String url;
|
||||
|
||||
const FilePreviewer({super.key, this.url = ""});
|
||||
|
||||
bool _isImage(String suffix) {
|
||||
final lower = suffix.toLowerCase();
|
||||
return ['jpg', 'jpeg', 'png', 'gif', 'webp'].contains(lower);
|
||||
}
|
||||
|
||||
bool _isPdf(String suffix) {
|
||||
return suffix.toLowerCase() == 'pdf';
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final suffix = url.split('.').last;
|
||||
Widget child;
|
||||
|
||||
if (_isImage(suffix)) {
|
||||
child = InteractiveViewer(
|
||||
child: CachedNetworkImage(
|
||||
imageUrl: url,
|
||||
),
|
||||
);
|
||||
} else if (_isPdf(suffix)) {
|
||||
child = PDF(
|
||||
enableSwipe: true,
|
||||
).cachedFromUrl(url);
|
||||
} else {
|
||||
child = const Text('不支持的文件类型');
|
||||
}
|
||||
return GestureDetector(
|
||||
onTap: () {
|
||||
context.pop();
|
||||
},
|
||||
child: Container(
|
||||
child: child,
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user