74 lines
2.2 KiB
Dart
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);
|
|
});
|