From 59899f78f2d630328b75eb304411d9c76a5a48b8 Mon Sep 17 00:00:00 2001 From: Dave_12138 <207955131@qq.com> Date: Sun, 22 Feb 2026 22:08:32 +0800 Subject: [PATCH] fix: ensure MemoryProvider initialized --- lib/core/providers/memory_provider.dart | 21 ++++++++++++++++--- .../services/message_builder_service.dart | 5 +++-- .../home/services/tool_handler_service.dart | 1 + 3 files changed, 22 insertions(+), 5 deletions(-) diff --git a/lib/core/providers/memory_provider.dart b/lib/core/providers/memory_provider.dart index 0535cfc8..3f4d9c84 100644 --- a/lib/core/providers/memory_provider.dart +++ b/lib/core/providers/memory_provider.dart @@ -5,6 +5,12 @@ import '../services/memory_store.dart'; class MemoryProvider extends ChangeNotifier { List _memories = []; bool _initialized = false; + bool _loading = false; + + MemoryProvider() { + // Start loading memories asynchronously on creation + _loadAllSilent(); + } List get memories => List.unmodifiable(_memories); @@ -13,21 +19,30 @@ class MemoryProvider extends ChangeNotifier { Future initialize() async { if (_initialized) return; - await loadAll(); - _initialized = true; + await _loadAllSilent(); } - Future loadAll() async { + Future _loadAllSilent() async { + if (_loading) return; + _loading = true; try { _memories = await MemoryStore.getAll(); + _initialized = true; notifyListeners(); } catch (e) { debugPrint('Failed to load memories: $e'); _memories = []; + _initialized = true; // Still mark as initialized to prevent infinite retries notifyListeners(); + } finally { + _loading = false; } } + Future loadAll() async { + await _loadAllSilent(); + if (_loading) return; + } Future add({ required String assistantId, required String content, diff --git a/lib/features/home/services/message_builder_service.dart b/lib/features/home/services/message_builder_service.dart index 1d070b1f..c0884cf9 100644 --- a/lib/features/home/services/message_builder_service.dart +++ b/lib/features/home/services/message_builder_service.dart @@ -470,8 +470,9 @@ class MessageBuilderService { }) async { try { if (assistant?.enableMemory == true) { - final mp = contextProvider.read(); - final mems = mp.getForAssistant(assistant!.id); + final mp = contextProvider.read(); + await mp.initialize(); + final mems = mp.getForAssistant(assistant!.id); final buf = StringBuffer(); buf.writeln('## Memories'); buf.writeln( diff --git a/lib/features/home/services/tool_handler_service.dart b/lib/features/home/services/tool_handler_service.dart index 27a18c49..ee8ea244 100644 --- a/lib/features/home/services/tool_handler_service.dart +++ b/lib/features/home/services/tool_handler_service.dart @@ -352,6 +352,7 @@ class ToolHandlerService { try { final mp = contextProvider.read(); + await mp.initialize(); if (name == 'create_memory') { final content = (args['content'] ?? '').toString();