Files
yanting/lib/features/institutions/institutions_page.dart
T
2026-06-05 11:12:55 +08:00

59 lines
1.8 KiB
Dart

import 'package:flutter/material.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';
import '../../data/api/report_data_source.dart';
import '../../data/content_providers.dart';
import '../../routing/app_routes.dart';
import '../../theme/wise_tokens.dart';
import '../../widgets/institution_card.dart';
import '../../widgets/page_header.dart';
import '../../widgets/states.dart';
class InstitutionsPage extends HookConsumerWidget {
const InstitutionsPage({required this.dataSource, super.key});
final ReportDataSource dataSource;
@override
Widget build(BuildContext context, WidgetRef ref) {
final snapshot = ref.watch(institutionsProvider);
return snapshot.when(
loading: () => const LoadingState(),
error: (error, _) => ErrorState(
message: error.toString(),
onRetry: () => ref.invalidate(institutionsProvider),
),
data: (items) {
final sorted = [...items]
..sort((a, b) => b.reportCount.compareTo(a.reportCount));
if (sorted.isEmpty) {
return const EmptyState(
title: '暂无机构信息',
message: '稍后再试',
icon: Icons.account_balance_outlined,
);
}
return ListView(
padding: const EdgeInsets.fromLTRB(
WiseSpacing.x4,
4,
WiseSpacing.x4,
16,
),
children: [
const PageHeader(title: '机构', subtitle: '可获取研报的机构'),
for (final item in sorted) ...[
InstitutionCard(
institution: item,
onTap: () =>
openInstitutionDetail(context, dataSource, item.id),
),
const SizedBox(height: WiseSpacing.x3),
],
],
);
},
);
}
}