flutter-samples/lib/logics/services/poetry_list.dart
2025-05-03 15:33:44 +08:00

74 lines
2.2 KiB
Dart

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<PoetryListState> {
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<void> queryMorePoetryList() async {
final loading = state.poetryData.loading;
final loadAll = state.poetryData.loadAll;
if (loading || loadAll) return;
await queryPoetryList();
}
// 获取诗词列表
Future<void> 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<PoetryListService, PoetryListState>((ref) {
final poetryModel = ref.read(poetryProvider);
return PoetryListService(poetryModel);
});