60 lines
1.7 KiB
Dart
60 lines
1.7 KiB
Dart
import 'package:flutter/material.dart';
|
|
|
|
class FullScreenImageViewer extends StatefulWidget {
|
|
final List<String> photoUrls;
|
|
final int initialIndex;
|
|
|
|
const FullScreenImageViewer({
|
|
super.key,
|
|
required this.photoUrls,
|
|
required this.initialIndex,
|
|
});
|
|
|
|
@override
|
|
State<FullScreenImageViewer> createState() => _FullScreenImageViewerState();
|
|
}
|
|
|
|
class _FullScreenImageViewerState extends State<FullScreenImageViewer> {
|
|
late PageController _pageController;
|
|
|
|
@override
|
|
void initState() {
|
|
super.initState();
|
|
_pageController = PageController(initialPage: widget.initialIndex);
|
|
}
|
|
|
|
String _resolveImageUrl(String path) {
|
|
if (path.startsWith('http://') || path.startsWith('https://')) return path;
|
|
return 'https://sharing-api.sparkit.by/$path';
|
|
}
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
return Scaffold(
|
|
backgroundColor: Colors.black,
|
|
appBar: AppBar(
|
|
backgroundColor: Colors.transparent,
|
|
iconTheme: const IconThemeData(color: Colors.white),
|
|
),
|
|
body: PageView.builder(
|
|
controller: _pageController,
|
|
itemCount: widget.photoUrls.length,
|
|
itemBuilder: (context, index) {
|
|
final photo = widget.photoUrls[index];
|
|
final imageUrl = _resolveImageUrl(photo);
|
|
return InteractiveViewer(
|
|
child: Center(
|
|
child: Image.network(
|
|
imageUrl,
|
|
fit: BoxFit.contain,
|
|
errorBuilder: (context, error, stackTrace) {
|
|
return const Icon(Icons.error, color: Colors.white, size: 64);
|
|
},
|
|
),
|
|
),
|
|
);
|
|
},
|
|
),
|
|
);
|
|
}
|
|
} |