61 lines
1.9 KiB
Dart
61 lines
1.9 KiB
Dart
import 'package:flutter/material.dart';
|
|
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
|
import 'package:flutter_samples/components/PoetryCard.dart';
|
|
import 'package:flutter_samples/logics/services/poetry_list.dart';
|
|
|
|
class PoetryListPage extends ConsumerStatefulWidget {
|
|
const PoetryListPage({super.key});
|
|
|
|
@override
|
|
ConsumerState<PoetryListPage> createState() => _PoetryListPageState();
|
|
}
|
|
|
|
class _PoetryListPageState extends ConsumerState<PoetryListPage> {
|
|
final ScrollController _controller = ScrollController();
|
|
@override
|
|
void initState() {
|
|
super.initState();
|
|
WidgetsBinding.instance.addPostFrameCallback((_) {
|
|
// 初始化数据
|
|
ref.read(poetryListServiceProvider.notifier).setUp();
|
|
});
|
|
// 监听滚动事件
|
|
_controller.addListener(listener);
|
|
}
|
|
|
|
void listener() {
|
|
if (_controller.position.pixels >=
|
|
_controller.position.maxScrollExtent - 200) {
|
|
// 加载更多
|
|
ref.read(poetryListServiceProvider.notifier).queryMorePoetryList();
|
|
}
|
|
}
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
final state = ref.watch(poetryListServiceProvider);
|
|
final service = ref.read(poetryListServiceProvider.notifier);
|
|
return Scaffold(
|
|
appBar: AppBar(title: const Text('诗词列表')),
|
|
body:
|
|
state.poetryData.list.isEmpty
|
|
? const Center(child: Text("暂无数据"))
|
|
: ListView.builder(
|
|
itemCount:
|
|
state.poetryData.list.length +
|
|
(state.poetryData.loadAll ? 1 : 0),
|
|
itemBuilder: (_, index) {
|
|
final poetry = state.poetryData.list[index];
|
|
return Poetrycard(
|
|
poetry: poetry,
|
|
onClick: () {
|
|
// 点击诗词
|
|
service.toPoetryDetailPage(poetry);
|
|
},
|
|
);
|
|
},
|
|
),
|
|
);
|
|
}
|
|
}
|