import 'package:flutter/material.dart'; import 'package:flutter_dmzj/app/app_constant.dart'; import 'package:flutter_dmzj/app/app_style.dart'; import 'package:flutter_dmzj/models/novel/latest_model.dart'; import 'package:flutter_dmzj/modules/novel/home/latest/novel_latest_controller.dart'; import 'package:flutter_dmzj/routes/app_navigator.dart'; import 'package:flutter_dmzj/services/user_service.dart'; import 'package:flutter_dmzj/widgets/keep_alive_wrapper.dart'; import 'package:flutter_dmzj/widgets/net_image.dart'; import 'package:flutter_dmzj/widgets/page_list_view.dart'; import 'package:get/get.dart'; class NovelLatestView extends StatelessWidget { final NovelLatestController controller; NovelLatestView({Key? key}) : controller = Get.put(NovelLatestController()), super(key: key); @override Widget build(BuildContext context) { return KeepAliveWrapper( child: PageListView( pageController: controller, firstRefresh: true, showPageLoadding: false, separatorBuilder: (context, i) => Divider( endIndent: 12, indent: 12, color: Colors.grey.withOpacity(.2), height: 1, ), itemBuilder: (context, i) { var item = controller.list[i]; return buildItem(item); }, ), ); } Widget buildItem(NovelLatestModel item) { return InkWell( onTap: () { AppNavigator.toNovelDetail(item.id); }, child: Container( padding: AppStyle.edgeInsetsA12, child: Row( crossAxisAlignment: CrossAxisAlignment.start, children: [ NetImage( item.cover ?? "", width: 80, height: 110, borderRadius: 4, ), AppStyle.hGap12, Expanded( child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( item.title, maxLines: 1, overflow: TextOverflow.ellipsis, ), const SizedBox(height: 2), Text.rich( TextSpan(children: [ const WidgetSpan( child: Icon( Icons.account_circle, color: Colors.grey, size: 18, )), const TextSpan( text: " ", ), TextSpan( text: item.authors, style: const TextStyle(color: Colors.grey, fontSize: 14)) ]), ), const SizedBox(height: 2), Text(item.types ?? "", style: const TextStyle(color: Colors.grey, fontSize: 14)), const SizedBox(height: 2), Text(item.lastName ?? "", style: const TextStyle(color: Colors.grey, fontSize: 14)), ], ), ), Center( child: Obx( () => UserService.instance.subscribedNovelIds.contains(item.id) ? IconButton( icon: const Icon(Icons.favorite), onPressed: () { UserService.instance.cancelSubscribe( [item.id], AppConstant.kTypeNovel, ); }, ) : IconButton( icon: const Icon(Icons.favorite_border), onPressed: () { UserService.instance.addSubscribe( [item.id], AppConstant.kTypeNovel, ); }, ), ), ) ], ), ), ); } }