import 'package:cpt_community/components/newsfeed_card_content.dart'; import 'package:cpt_community/components/newsfeed_card_footer.dart'; import 'package:cs_resources/generated/assets.dart'; import 'package:flutter/material.dart'; import 'package:auto_route/auto_route.dart'; import 'package:flutter/rendering.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:router/ext/auto_router_extensions.dart'; import 'package:shared/utils/color_utils.dart'; import 'package:shared/utils/log_utils.dart'; import 'package:widgets/ext/ex_widget.dart'; import 'package:widgets/my_load_image.dart'; import 'package:widgets/my_text_view.dart'; import 'package:widgets/widget_export.dart'; import 'package:widgets/my_button.dart'; import '../../components/newfeed_card_header.dart'; import '../../router/page/community_page_router.dart'; import '../community/community_vm.dart'; import 'newsfeed_tabs.dart'; import 'newsfeed_vm.dart'; @RoutePage() class NewsfeedPage extends HookConsumerWidget { const NewsfeedPage({Key? key}) : super(key: key); //启动当前页面 static void startInstance({BuildContext? context}) { if (context != null) { context.router.push(const NewsfeedPageRoute()); } else { appRouter.push(const NewsfeedPageRoute()); } } Widget _buildTabsSection(BuildContext context, WidgetRef ref, vm){ return Container( width: double.infinity, padding: const EdgeInsets.only(left: 15, right: 15,top: 14,bottom: 14), child: NewsfeedTabs( tabsList: vm.state.tabsList, ), ); } Widget _buildPostSection(BuildContext context, WidgetRef ref, vm){ return Container( height: 65.5, width: double.infinity, padding: const EdgeInsets.only(left: 20, right: 20), color: Colors.white, child: Row( children: [ const MyAssetImage(Assets.communityNesFeed, width: 45,height: 45,), Expanded( child: Row( children: [ Expanded( child: Container( // height: 65.5, // color: Colors.blue, child: MyTextView( "What’s on your mind?", textColor: ColorUtils.string2Color('#000000'), fontSize: 15, marginLeft: 15, alignment: Alignment.centerLeft, textAlign: TextAlign.left, backgroundColor: ColorUtils.string2Color('#ffffff'), maxLines: 1, isFontMedium: true, ), ), ), const MyAssetImage( Assets.communityCamera, width: 21, height: 16.5, ), ], ).onTap((){ vm.handlerGotoPost(context); }), ), ], ), ); } Widget _buildNewsItem(BuildContext context, WidgetRef ref, item, vm){ return Container( width: double.infinity, // color: Colors.yellow, child: Stack( children: [ Container( margin: const EdgeInsets.only(left: 15, right: 15,top: 14,bottom: 14), color: Colors.white, padding: const EdgeInsets.only(left: 15, right: 15,top: 17,bottom: 17), height: 280, child: Column( mainAxisAlignment: MainAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.start, children: [ // 卡片头部(头像 标题 时间) NewsFeedCardHeader( title: item['title'], avator: item['avator'], time: item['time'], ), const SizedBox(height: 15), // 卡片中间 (文字和图片) Expanded( child: NewsFeedCardContent( content: item['content'], imageUrls: item['imageUrls'], ), ), const SizedBox(height: 26), // // 卡片底部 (点赞 评论 分享) NewsFeedCardFooter( isLike: item['isLike'], ), ] ), ), // 右上角 关注/取消关注 按钮 Positioned( right: 20, top: 20, child: Container( width: 100, alignment: Alignment.center, decoration: BoxDecoration( color: item['isFollow'] ? ColorUtils.string2Color('#FFEBEE') : ColorUtils.string2Color('#F2F3F6'), borderRadius: BorderRadius.circular(15), ), child: MyButton( text: item['isFollow'] ? 'Following' : 'Follow', textColor: item['isFollow'] ? ColorUtils.string2Color('#FF0000') : ColorUtils.string2Color('#000000'), backgroundColor: item['isFollow'] ? ColorUtils.string2Color('#F2F3F6') : ColorUtils.string2Color('#FFEBEE'), radius: 0, minHeight: 50, fontWeight: FontWeight.w500, fontSize: 14, onPressed: (){ // Navigator.pop(context); }, ), ) ) ], ), ); } Widget _buildNesFeedList(BuildContext context, WidgetRef ref, vm){ final itemList = vm.state.list?? []; if(itemList.isEmpty){ return const Center(child: Text('No Data')); }else { List itemsList = vm.state.list.toList(); return ListView.builder( itemCount: itemsList.length, itemBuilder: (context, index) { return _buildNewsItem(context, ref, itemsList[index], vm); }, ); } } @override Widget build(BuildContext context, WidgetRef ref) { final vm = ref.read(newsfeedVmProvider.notifier); return Scaffold( backgroundColor: ColorUtils.string2Color("#F2F3F6"), body: Column( children: [ _buildTabsSection(context, ref, vm), _buildPostSection(context, ref, vm), // Expanded( // child: EasyRefresh( // // 上拉加载 // onLoad: () async{ // Log.d("----onLoad"); // vm.onLoadData(); // }, // // 下拉刷新 // onRefresh: () async{ // Log.d("----onRefresh"); // vm.refreshListData(); // }, // child: _buildNesFeedList(context, ref, vm), // ), // ) NotificationListener ( onNotification: (ScrollNotification notification) { // 检查当前页面是否是可见的 bool isDownOrUp = notification.metrics.axis == Axis.vertical; if (notification is UserScrollNotification) { // 检查滚动方向 switch (notification.direction) { case ScrollDirection.forward: print('Scrolling down'); break; case ScrollDirection.reverse: print('Scrolling up'); break; case ScrollDirection.idle: print('Scrolling stopped'); break; } } else if (notification is ScrollUpdateNotification) { // 检查滚动位置变化 double currentScrollPosition = notification.metrics.pixels; double maxScrollExtent = notification.metrics.maxScrollExtent; // 判断是否满足某个条件 if (currentScrollPosition > 0 && currentScrollPosition < maxScrollExtent) { print('Current scroll position: $currentScrollPosition'); // 在这里添加你的条件判断逻辑 } // 只有当上下滚动时才拦截通知 if (notification.metrics.axis == Axis.vertical) { final tabsRouter = ref.watch(communityVmProvider).tabsRouter; final curUseTag = ref.watch(communityVmProvider).useTag; if(curUseTag != 0 ){ // 非当前 页面都阻止滚动 return true; // 返回 true 表示已处理通知 } } } return false; // 返回 false 表示不拦截通知 }, child: Expanded( child: _buildNesFeedList(context, ref, vm), ), ) ], ), ); } }