Fix chat page stuck: defer provider state changes past build phase
connect() and disconnect() were modifying provider state inside initState/dispose, which Riverpod disallows during widget tree building. Wrapped both in Future.microtask() to defer past the build phase. Applied to both mitra_app and client_app. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -25,16 +25,19 @@ class _ChatScreenState extends ConsumerState<ChatScreen> {
|
|||||||
@override
|
@override
|
||||||
void initState() {
|
void initState() {
|
||||||
super.initState();
|
super.initState();
|
||||||
|
Future.microtask(() {
|
||||||
ref.read(chatProvider.notifier).connect(widget.sessionId);
|
ref.read(chatProvider.notifier).connect(widget.sessionId);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void dispose() {
|
void dispose() {
|
||||||
ref.read(chatProvider.notifier).disconnect();
|
final notifier = ref.read(chatProvider.notifier);
|
||||||
_messageController.dispose();
|
_messageController.dispose();
|
||||||
_scrollController.dispose();
|
_scrollController.dispose();
|
||||||
_typingThrottle?.cancel();
|
_typingThrottle?.cancel();
|
||||||
super.dispose();
|
super.dispose();
|
||||||
|
Future.microtask(() => notifier.disconnect());
|
||||||
}
|
}
|
||||||
|
|
||||||
void _scrollToBottom() {
|
void _scrollToBottom() {
|
||||||
|
|||||||
@@ -24,16 +24,19 @@ class _MitraChatScreenState extends ConsumerState<MitraChatScreen> {
|
|||||||
@override
|
@override
|
||||||
void initState() {
|
void initState() {
|
||||||
super.initState();
|
super.initState();
|
||||||
|
Future.microtask(() {
|
||||||
ref.read(mitraChatProvider.notifier).connect(widget.sessionId);
|
ref.read(mitraChatProvider.notifier).connect(widget.sessionId);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void dispose() {
|
void dispose() {
|
||||||
ref.read(mitraChatProvider.notifier).disconnect();
|
final notifier = ref.read(mitraChatProvider.notifier);
|
||||||
_messageController.dispose();
|
_messageController.dispose();
|
||||||
_scrollController.dispose();
|
_scrollController.dispose();
|
||||||
_typingThrottle?.cancel();
|
_typingThrottle?.cancel();
|
||||||
super.dispose();
|
super.dispose();
|
||||||
|
Future.microtask(() => notifier.disconnect());
|
||||||
}
|
}
|
||||||
|
|
||||||
void _scrollToBottom() {
|
void _scrollToBottom() {
|
||||||
|
|||||||
Reference in New Issue
Block a user