dzocesrce

Untitled

Apr 7th, 2026
57
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.49 KB | None | 0 0
  1. import 'package:flutter/material.dart';
  2. import 'package:provider/provider.dart';
  3.  
  4. import '../../core/utils/app_error_messages.dart';
  5. import '../../providers/info_provider.dart';
  6. import '../../widgets/common/app_error_state.dart';
  7. import 'widgets/info_page_indicator.dart';
  8. import 'widgets/info_slide_card.dart';
  9.  
  10. class InfoScreen extends StatefulWidget {
  11. const InfoScreen({super.key});
  12.  
  13. @override
  14. State<InfoScreen> createState() => _InfoScreenState();
  15. }
  16.  
  17. class _InfoScreenState extends State<InfoScreen> {
  18. final PageController _pageController = PageController();
  19. int _currentPage = 0;
  20.  
  21. @override
  22. void dispose() {
  23. _pageController.dispose();
  24. super.dispose();
  25. }
  26.  
  27. @override
  28. Widget build(BuildContext context) {
  29. final provider = context.watch<InfoProvider>();
  30. final slides = provider.slides;
  31.  
  32. if (provider.isLoading && slides.isEmpty) {
  33. return const Center(
  34. child: CircularProgressIndicator(),
  35. );
  36. }
  37.  
  38. if (provider.errorMessage != null) {
  39. return AppErrorState(
  40. message: provider.errorMessage!,
  41. imageAssetPath: AppErrorMessages.imageForType(provider.errorType),
  42. onRetry: provider.loadSlides,
  43. );
  44. }
  45.  
  46. if (slides.isEmpty) {
  47. return const Center(
  48. child: Text('No info slides available.'),
  49. );
  50. }
  51.  
  52. return Column(
  53. children: [
  54. Expanded(
  55. child: RefreshIndicator(
  56. onRefresh: provider.loadSlides,
  57. child: PageView.builder(
  58. controller: _pageController,
  59. itemCount: slides.length,
  60. onPageChanged: (index) {
  61. setState(() {
  62. _currentPage = index;
  63. });
  64. },
  65. itemBuilder: (context, index) {
  66. return ListView(
  67. physics: const AlwaysScrollableScrollPhysics(),
  68. children: [
  69. SizedBox(
  70. height: MediaQuery.of(context).size.height * 0.72,
  71. child: InfoSlideCard(
  72. slide: slides[index],
  73. ),
  74. ),
  75. ],
  76. );
  77. },
  78. ),
  79. ),
  80. ),
  81. Padding(
  82. padding: const EdgeInsets.only(bottom: 22),
  83. child: InfoPageIndicator(
  84. itemCount: slides.length,
  85. currentIndex: _currentPage,
  86. ),
  87. ),
  88. ],
  89. );
  90. }
  91. }
Advertisement
Add Comment
Please, Sign In to add comment