import 'package:auto_route/auto_route.dart'; import 'package:flutter/material.dart'; import 'package:flutter_hooks/flutter_hooks.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:shared/utils/log_utils.dart'; import 'package:widgets/ext/ex_widget.dart'; import 'package:widgets/load_state_layout.dart'; import 'package:widgets/widget_export.dart'; import '../../booking/facility_booking_page.dart'; import 'facility_book_view_model.dart'; import 'item_facility_book.dart'; @RoutePage() class FacilityBookScreen extends HookConsumerWidget { @override Widget build(BuildContext context, WidgetRef ref) { final viewModel = ref.read(facilityBookViewModelProvider.notifier); final state = ref.watch(facilityBookViewModelProvider); useEffect(() { // 组件挂载时执行 - 执行接口请求 Future.microtask(() => viewModel.fetchList()); return () { // 组件卸载时执行 }; }, []); return Container( width: double.infinity, height: double.infinity, child: EasyRefresh( controller: viewModel.refreshController, onRefresh: viewModel.onRefresh, onLoad: viewModel.loadMore, child: LoadStateLayout( state: state.loadingState, errorMessage: state.errorMessage, errorRetry: () { viewModel.retryRequest(); }, successSliverWidget: [ SliverList( delegate: SliverChildBuilderDelegate( (context, index) { return FacilityBookItem(index: index, item: state.datas[index]).onTap(() { FacilityBookingPage.startInstance(context: context); }); }, childCount: state.datas.length, )) ], ), ).marginOnly(top: 5, bottom: 5), ); } }