import 'package:didvan/models/requests/news.dart'; import 'package:didvan/views/home/news/news_details/news_details_state.dart'; import 'package:didvan/views/home/widgets/floating_navigation_bar.dart'; import 'package:didvan/views/widgets/didvan/page_view.dart'; import 'package:didvan/views/widgets/state_handlers/state_handler.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; class NewsDetails extends StatefulWidget { final Map pageData; const NewsDetails({Key? key, required this.pageData}) : super(key: key); @override State createState() => _NewsDetailsState(); } class _NewsDetailsState extends State { final ScrollController _scrollController = ScrollController(); @override void initState() { final state = context.read(); _scrollController.addListener(() { if (_scrollController.position.pixels > _scrollController.position.maxScrollExtent - 200 && !state.relatedQueue.contains(state.currentNews.id)) { state.getRelatedContents(); } }); state.args = widget.pageData['args'] ?? const NewsRequestArgs(page: 0); Future.delayed(Duration.zero, () { state.getNewsDetails(widget.pageData['id']); }); super.initState(); } @override Widget build(BuildContext context) { return Scaffold( body: Consumer( builder: (context, state, child) => StateHandler( onRetry: () => state.getNewsDetails(state.currentNews.id), state: state, builder: (context, state) => Stack( children: [ IgnorePointer( ignoring: state.isFetchingNewItem, child: DidvanPageView( isRadar: false, initialIndex: state.initialIndex, onPageChanged: _onPageChnaged, scrollController: _scrollController, items: state.news, currentIndex: state.currentIndex, onMarkChanged: (id, value) => widget.pageData['onMarkChanged'](id, value), ), ), Positioned( bottom: 0, left: 0, right: 0, child: FloatingNavigationBar( hasUnmarkConfirmation: widget.pageData['hasUnmarkConfirmation'] ?? false, scrollController: _scrollController, item: state.currentNews, onCommentsChanged: state.onCommentsChanged, onMarkChanged: (value) => widget.pageData['onMarkChanged']( state.currentNews.id, value, ), isRadar: false, ), ), ], ), ), ), ); } void _onPageChnaged(int index) { final state = context.read(); state.getNewsDetails( state.news[index]!.id, isForward: state.currentIndex < index, ); } }