import 'dart:io'; import 'package:flutter/material.dart'; import '../../models/data_models.dart'; import '../../widgets/fade_in_local_image.dart'; /// 海报画廊页面 - 支持左右滑动浏览 class PosterGalleryPage extends StatefulWidget { final List posters; final int initialIndex; const PosterGalleryPage({ super.key, required this.posters, required this.initialIndex, }); @override State createState() => _PosterGalleryPageState(); } class _PosterGalleryPageState extends State { late PageController _pageController; late int _currentIndex; @override void initState() { super.initState(); _currentIndex = widget.initialIndex; _pageController = PageController(initialPage: widget.initialIndex); } @override void dispose() { _pageController.dispose(); super.dispose(); } @override Widget build(BuildContext context) { return Scaffold( backgroundColor: Colors.black, body: Stack( children: [ // 页面视图 - 支持左右滑动 PageView.builder( controller: _pageController, itemCount: widget.posters.length, onPageChanged: (index) { setState(() => _currentIndex = index); }, itemBuilder: (context, index) { final poster = widget.posters[index]; return InteractiveViewer( minScale: 0.5, maxScale: 3.0, child: Center( child: FadeInLocalImage( path: poster.posterPath, fit: BoxFit.contain, ), ), ); }, ), // 顶部导航栏 Positioned( top: 0, left: 0, right: 0, child: SafeArea( child: Container( padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 8), decoration: BoxDecoration( gradient: LinearGradient( begin: Alignment.topCenter, end: Alignment.bottomCenter, colors: [ Colors.black.withOpacity(0.7), Colors.transparent, ], ), ), child: Row( children: [ // 返回按钮 IconButton( onPressed: () => Navigator.pop(context), icon: const Icon(Icons.arrow_back, color: Colors.white), ), const Spacer(), // 页码指示器 Text( '${_currentIndex + 1} / ${widget.posters.length}', style: const TextStyle( color: Colors.white, fontSize: 16, fontWeight: FontWeight.w500, ), ), const Spacer(), // 占位,保持对称 const SizedBox(width: 48), ], ), ), ), ), // 底部指示器(点状) if (widget.posters.length > 1) Positioned( bottom: 20, left: 0, right: 0, child: SafeArea( child: Row( mainAxisAlignment: MainAxisAlignment.center, children: List.generate( widget.posters.length, (index) => Container( width: 8, height: 8, margin: const EdgeInsets.symmetric(horizontal: 4), decoration: BoxDecoration( shape: BoxShape.circle, color: index == _currentIndex ? Colors.white : Colors.white.withOpacity(0.4), ), ), ), ), ), ), ], ), ); } }