flutter-samples/lib/ui/home.dart
2025-05-03 15:33:44 +08:00

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);
},
);
},
),
);
}
}