import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import '../../../core/ui/components/app_button.dart'; import '../presentation/chat_view_model.dart'; /// 聊天页(Demo 按钮) /// /// 包含五个演示按钮,覆盖 go_router 的常见导航场景: /// - 「切换 Tab」 — go,替换历史,不可返回 /// - 「有参 push(extra)」 — push + extra(Dart Record),可返回 /// - 「有参 push(路径参数)」— push + URL 内嵌 id,可返回 /// - 「无参 push」 — push,可返回 /// - 「退出登录」 — 守卫自动重定向到 /login /// /// 所有操作通过 [ChatViewModel] 处理,View 不直接调用路由。 /// 正式开发后替换为会话列表,按钮相关代码一并清除。 class ChatPage extends ConsumerWidget { const ChatPage({super.key}); @override Widget build(BuildContext context, WidgetRef ref) { final vm = ref.read(chatViewModelProvider.notifier); return Scaffold( appBar: AppBar(title: const Text('聊天')), body: Center( child: Column( mainAxisSize: MainAxisSize.min, spacing: 16, children: [ // 切换 Tab:用 go,替换整个历史栈,不可返回 AppButton.inverse( label: '切换 Tab(go)', onPressed: () => vm.goToContact(context), ), // 带参数 push:extra 传 Dart Record,适合已有对象的场景 AppButton.inverse( label: '有参 push(extra)', onPressed: () => vm.pushChatDetailWithExtra(context), ), // 带参数 push:id 内嵌在路径中,适合需要深链接 / 分享的场景 AppButton.inverse( label: '有参 push(路径参数)', onPressed: () => vm.pushChatDetailById(context), ), // 无参 push:压栈,自动显示返回按钮,不切 Tab AppButton.inverse( label: '无参 push', onPressed: () => vm.pushSettingsTheme(context), ), // 无参 go:替换历史,切换到对应 Tab,TabBar 可见,不可返回 AppButton.inverse( label: '无参 go', onPressed: () => vm.goToSettings(context), ), AppButton.inverse( label: '测试数据库性能', onPressed: () => vm.goToDatabaseTest(context), ), AppButton.secondary( label: '退出登录', fullWidth: false, onPressed: () => vm.logout(), ), ], ), ), ); } }