import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_samples/helpers/constants/route.dart'; import 'package:flutter_samples/logics/entities/page/poetry.dart'; import 'package:flutter_samples/logics/entities/state/poetry_list.dart'; import 'package:flutter_samples/logics/models/poetry.dart'; import 'package:flutter_samples/router/router.dart'; class PoetryListService extends StateNotifier { final PoetryModel _poetryModel; PoetryListService(this._poetryModel) : super(const PoetryListState()); void setUp() { queryPoetryList(); } void toPoetryDetailPage(Poetry poetry) { router.pushNamed( Routes.poetry, queryParameters: {'id': poetry.id.toString()}, ); } // 分页加载更多 Future queryMorePoetryList() async { final loading = state.poetryData.loading; final loadAll = state.poetryData.loadAll; if (loading || loadAll) return; await queryPoetryList(); } // 获取诗词列表 Future queryPoetryList() async { try { final size = state.poetryData.size; final page = state.poetryData.page; final loading = state.poetryData.loading; final loadAll = state.poetryData.loadAll; if (loading || loadAll) { return; } state = state.copyWith( poetryData: state.poetryData.copyWith(loading: true), ); final resp = await _poetryModel.getPoetryList({ 'page': page, 'size': size, }); state = state.copyWith( poetryData: state.poetryData.copyWith( list: page == 1 ? resp.list : [...state.poetryData.list, ...resp.list], page: resp.page, size: resp.size, total: resp.total, loadAll: resp.list.length < size, loading: false, ), ); await Future.delayed(Duration(milliseconds: 500)); state = state.copyWith( poetryData: state.poetryData.copyWith(loading: false), ); } catch (e) { // Handle error } } } final poetryListServiceProvider = StateNotifierProvider((ref) { final poetryModel = ref.read(poetryProvider); return PoetryListService(poetryModel); });