import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_template/app/theme/app_theme.dart'; import 'package:flutter_template/features/demo/demo_controller.dart'; import 'package:flutter_template/shared/widgets/widgets.dart'; class DemoPage extends ConsumerWidget { const DemoPage({super.key}); @override Widget build(BuildContext context, WidgetRef ref) { final state = ref.watch(demoControllerProvider); final controller = ref.read(demoControllerProvider.notifier); return Scaffold( appBar: AppBar(title: const Text('Flutter Template')), body: SafeAreaWrapper( child: ListView( padding: const EdgeInsets.all(AppSpacing.lg), children: [ AppSearchBar(hint: '搜索模板组件', onChanged: controller.updateQuery), const SizedBox(height: AppSpacing.lg), AppCard( child: Row( children: [ const AppAvatar(initials: 'T', size: 48), const SizedBox(width: AppSpacing.md), Expanded( child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( '通用 Flutter 快速开发模板', style: Theme.of(context).textTheme.titleMedium, ), const SizedBox(height: 4), Text( '已内置网络、缓存、路由、主题、权限、日志和常用 UI 组件。', style: Theme.of(context).textTheme.bodyMedium ?.copyWith( color: Theme.of( context, ).colorScheme.onSurfaceVariant, ), ), ], ), ), ], ), ), const SizedBox(height: AppSpacing.md), Wrap( spacing: 8, runSpacing: 8, children: const [ AppTag(label: 'Riverpod', tone: AppTagTone.info), AppTag(label: 'Dio', tone: AppTagTone.success), AppTag(label: '缓存', tone: AppTagTone.warning), AppTag(label: '无业务代码'), ], ), const SizedBox(height: AppSpacing.lg), AppCard( child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( '状态管理示例', style: Theme.of(context).textTheme.titleMedium, ), const SizedBox(height: AppSpacing.sm), Text('当前计数:${state.count}'), if (state.query.isNotEmpty) ...[ const SizedBox(height: AppSpacing.sm), Text('搜索关键字:${state.query}'), ], const SizedBox(height: AppSpacing.md), AppButton( label: '增加计数', icon: const Icon(Icons.add, size: 18), onPressed: controller.increment, ), ], ), ), const SizedBox(height: AppSpacing.lg), AppStatusView( status: AppViewStatus.empty, empty: AppEmptyView( title: '空状态组件', message: '业务项目可替换图标、文案和操作按钮。', action: AppButton( label: '显示确认弹窗', variant: AppButtonVariant.outline, icon: const Icon(Icons.open_in_new, size: 18), onPressed: () async { final confirmed = await AppDialog.confirm( context, title: '模板弹窗', message: '这是可复用的确认弹窗示例。', ); if (confirmed == true) { AppToast.show('已确认'); } }, ), ), child: const SizedBox.shrink(), ), ], ), ), ); } }