refactor: enhance model loading and error handling in providers

- Improved handling of asynchronous states in the model loading process.
- Added debug logging for better traceability of model loading failures.
- Ensured proper checks for mounted state to prevent updates after disposal.
- Cleaned up code formatting for better readability.
- Updated the `defaultModel` provider to include more detailed logging and error handling.
This commit is contained in:
cogwheel0
2025-09-30 15:20:08 +05:30
parent fd35ba3167
commit ff6d33abdf
2 changed files with 117 additions and 27 deletions

View File

@@ -1170,11 +1170,43 @@ class _ChatPageState extends ConsumerState<ChatPage> {
),
)
: GestureDetector(
onTap: () {
onTap: () async {
final modelsAsync = ref.read(modelsProvider);
modelsAsync.whenData(
(models) => _showModelDropdown(context, ref, models),
);
// Handle all async states properly
if (modelsAsync.isLoading) {
// If still loading, wait for it to complete
try {
final models = await ref.read(modelsProvider.future);
if (mounted) {
_showModelDropdown(context, ref, models);
}
} catch (e) {
DebugLogger.error(
'model-load-failed',
scope: 'chat/model-selector',
error: e,
);
}
} else if (modelsAsync.hasValue) {
// If we have data, show immediately
_showModelDropdown(context, ref, modelsAsync.value!);
} else if (modelsAsync.hasError) {
// If there's an error, try to refresh and load
try {
ref.invalidate(modelsProvider);
final models = await ref.read(modelsProvider.future);
if (mounted) {
_showModelDropdown(context, ref, models);
}
} catch (e) {
DebugLogger.error(
'model-refresh-failed',
scope: 'chat/model-selector',
error: e,
);
}
}
},
onLongPress: () {
final conversation = ref.read(activeConversationProvider);