import 'dart:async'; import 'dart:math'; import 'package:flutter/material.dart'; import '../models/message.dart'; class ChatProvider extends ChangeNotifier { final List _messages = []; bool _isTyping = false; String _currentAiResponse = ''; List get messages => List.unmodifiable(_messages); bool get isTyping => _isTyping; String get currentAiResponse => _currentAiResponse; // Simulated AI responses for demo final List _aiResponses = [ '''# 你好!👋 我是你的 AI 助手,很高兴为你服务! 我可以帮助你: - 回答各种问题 - 进行创意写作 - 代码编程辅助 - 翻译和语言学习 有什么我可以帮助你的吗?''', '''## 这是一个很好的问题! 让我来详细解释一下: 1. **首先**,我们需要理解问题的核心 2. **其次**,分析可能的解决方案 3. **最后**,选择最优的实现方式 ```dart void main() { print('Hello, Flutter!'); } ``` 希望这个解释对你有帮助!''', '''### 关于这个话题 我有以下几点想法: > "创新是区分领导者和追随者的关键。" — 史蒂夫·乔布斯 | 方面 | 优点 | 缺点 | |------|------|------| | 性能 | ⚡ 快速 | 💾 内存占用 | | 易用性 | ✅ 简单 | 📚 学习曲线 | 如果你有更多问题,随时问我!''', '''我理解你的需求。让我为你提供一些建议: 1. 保持代码简洁清晰 2. 注重用户体验设计 3. 定期进行代码审查 4. 编写详细的文档 *记住:好的软件不仅仅是功能强大,更要易于使用和维护。*''', ]; void sendMessage(String content) { if (content.trim().isEmpty) return; // Add user message final userMessage = Message( id: DateTime.now().millisecondsSinceEpoch.toString(), content: content, isUser: true, ); _messages.add(userMessage); notifyListeners(); // Simulate AI response _simulateAiResponse(); } Future _simulateAiResponse() async { _isTyping = true; _currentAiResponse = ''; notifyListeners(); // Wait a bit before starting to "type" await Future.delayed(const Duration(milliseconds: 800)); // Get a random response final random = Random(); final response = _aiResponses[random.nextInt(_aiResponses.length)]; // Simulate typing effect for (int i = 0; i < response.length; i++) { await Future.delayed(Duration(milliseconds: 10 + random.nextInt(20))); _currentAiResponse = response.substring(0, i + 1); notifyListeners(); } // Add the complete message final aiMessage = Message( id: DateTime.now().millisecondsSinceEpoch.toString(), content: response, isUser: false, ); _messages.add(aiMessage); _isTyping = false; _currentAiResponse = ''; notifyListeners(); } void clearMessages() { _messages.clear(); notifyListeners(); } }