Skip to content

Commit dc1bf57

Browse files
committed
feat: rename chat controller methods
- insert -> insertMessage - update -> updateMessage - remove -> removeMessage - set -> setMessages
1 parent 1dd315c commit dc1bf57

File tree

20 files changed

+61
-58
lines changed

20 files changed

+61
-58
lines changed

.cursor/rules/6-streaming-text-message.mdc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ The library itself does not dictate state management for streams. The example pr
2929
* It requires the `ChatController` instance.
3030
* **Finalization:** Upon stream completion or error, the manager:
3131
* Waits for a duration matching the UI animation (`chunkAnimationDuration`).
32-
* Calls `chatController.update(originalStreamMessage, finalTextMessage)` to replace the `TextStreamMessage` with a standard `TextMessage` in the data source.
32+
* Calls `chatController.updateMessage(originalStreamMessage, finalTextMessage)` to replace the `TextStreamMessage` with a standard `TextMessage` in the data source.
3333
* Cleans up its internal state for that `streamId`.
3434
* **Integration:** The example ([gemini.dart](mdc:examples/flyer_chat/lib/gemini.dart)) provides the manager via `ChangeNotifierProvider` and uses `context.watch` within the `textStreamMessageBuilder` to get the current `StreamState` for the widget.
3535

@@ -40,7 +40,7 @@ The library itself does not dictate state management for streams. The example pr
4040
3. The external manager is notified (`startStream`).
4141
4. Subsequent chunks are sent to the manager (`addChunk`), which updates its state and notifies listeners.
4242
5. The `FlyerChatTextStreamMessage` widget rebuilds via `context.watch`, receives the new `StreamState`, detects the new chunk in `didUpdateWidget`, and initiates the animation for that chunk.
43-
6. When the stream ends, the manager (`completeStream`/`errorStream`) delays, then calls `chatController.update`.
43+
6. When the stream ends, the manager (`completeStream`/`errorStream`) delays, then calls `chatController.updateMessage`.
4444
7. The `ChatAnimatedList` reacts to the controller update, eventually causing `ChatMessageInternal` to rebuild with the final `TextMessage`, which is then rendered by the `textMessageBuilder`.
4545

4646
This approach ensures animations occur inline, the UI handles list recycling gracefully, and the final message state is persisted correctly via the controller.

examples/flyer_chat/lib/api/api.dart

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,7 @@ class ApiState extends State<Api> {
108108
try {
109109
await _apiService.flush();
110110
if (mounted) {
111-
await _chatController.set([]);
111+
await _chatController.setMessages([]);
112112
await _showInfo('All messages cleared');
113113
}
114114
} catch (error) {
@@ -146,13 +146,13 @@ class ApiState extends State<Api> {
146146

147147
switch (event.type) {
148148
case WebSocketEventType.newMessage:
149-
_chatController.insert(event.message!);
149+
_chatController.insertMessage(event.message!);
150150
break;
151151
case WebSocketEventType.deleteMessage:
152-
_chatController.remove(event.message!);
152+
_chatController.removeMessage(event.message!);
153153
break;
154154
case WebSocketEventType.flush:
155-
_chatController.set([]);
155+
_chatController.setMessages([]);
156156
break;
157157
case WebSocketEventType.error:
158158
_showInfo('Error: ${event.error}');
@@ -172,7 +172,7 @@ class ApiState extends State<Api> {
172172
final originalMetadata = message.metadata;
173173

174174
if (mounted) {
175-
await _chatController.insert(
175+
await _chatController.insertMessage(
176176
message.copyWith(metadata: {...?originalMetadata, 'sending': true}),
177177
);
178178
}
@@ -196,7 +196,7 @@ class ApiState extends State<Api> {
196196
),
197197
metadata: originalMetadata,
198198
);
199-
await _chatController.update(currentMessage, nextMessage);
199+
await _chatController.updateMessage(currentMessage, nextMessage);
200200
}
201201
} catch (error) {
202202
debugPrint('Error sending message: $error');
@@ -224,7 +224,7 @@ class ApiState extends State<Api> {
224224
);
225225

226226
// Insert message to UI before uploading
227-
await _chatController.insert(imageMessage);
227+
await _chatController.insertMessage(imageMessage);
228228

229229
try {
230230
final response = await uploadFile(image.path, bytes, id, _chatController);
@@ -247,7 +247,7 @@ class ApiState extends State<Api> {
247247
// Saves the same image to persistent cache using the new url as key
248248
// Alternatively, you could use updateKey to update the same content with a different key
249249
await _crossCache.set(nextMessage.source, bytes);
250-
await _chatController.update(
250+
await _chatController.updateMessage(
251251
currentMessage,
252252
nextMessage.copyWith(
253253
metadata: {...?originalMetadata, 'sending': true},
@@ -272,7 +272,7 @@ class ApiState extends State<Api> {
272272
),
273273
metadata: originalMetadata,
274274
);
275-
await _chatController.update(currentMessage2, nextMessage2);
275+
await _chatController.updateMessage(currentMessage2, nextMessage2);
276276
}
277277
}
278278
} catch (error) {
@@ -281,7 +281,7 @@ class ApiState extends State<Api> {
281281
}
282282

283283
void _removeItem(Message item, {int? index, TapUpDetails? details}) async {
284-
await _chatController.remove(item);
284+
await _chatController.removeMessage(item);
285285

286286
try {
287287
await _apiService.delete(item);

examples/flyer_chat/lib/basic.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ class BasicState extends State<Basic> {
2727
chatController: _chatController,
2828
currentUserId: 'user1',
2929
onMessageSend: (text) {
30-
_chatController.insert(
30+
_chatController.insertMessage(
3131
TextMessage(
3232
// Better to use UUID or similar for the ID - IDs must be unique
3333
id: '${Random().nextInt(1000) + 1}',

examples/flyer_chat/lib/gemini.dart

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ class GeminiState extends State<Gemini> {
113113
icon: Icons.delete_sweep,
114114
title: 'Clear all',
115115
onPressed: () {
116-
_chatController.set([]);
116+
_chatController.setMessages([]);
117117
_chatSession = _model.startChat();
118118
},
119119
destructive: true,
@@ -178,7 +178,7 @@ class GeminiState extends State<Gemini> {
178178
}
179179

180180
void _handleMessageSend(String text) async {
181-
await _chatController.insert(
181+
await _chatController.insertMessage(
182182
TextMessage(
183183
id: _uuid.v4(),
184184
authorId: _currentUser.id,
@@ -200,7 +200,7 @@ class GeminiState extends State<Gemini> {
200200

201201
await _crossCache.downloadAndSave(image.path);
202202

203-
await _chatController.insert(
203+
await _chatController.insertMessage(
204204
ImageMessage(
205205
id: _uuid.v4(),
206206
authorId: _currentUser.id,
@@ -241,7 +241,7 @@ class GeminiState extends State<Gemini> {
241241
createdAt: DateTime.now().toUtc(),
242242
streamId: streamId,
243243
);
244-
await _chatController.insert(streamMessage);
244+
await _chatController.insertMessage(streamMessage);
245245
_streamManager.startStream(streamId, streamMessage);
246246
}
247247

examples/flyer_chat/lib/gemini_stream_manager.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ class GeminiStreamManager extends ChangeNotifier {
9797
try {
9898
// Attempt to update the message. The controller should handle
9999
// cases where the original message might have been removed.
100-
await _chatController.update(originalMessage, finalTextMessage);
100+
await _chatController.updateMessage(originalMessage, finalTextMessage);
101101
} catch (e) {
102102
// Log potential errors during update (e.g., message not found, controller disposed)
103103
debugPrint(
@@ -131,7 +131,7 @@ class GeminiStreamManager extends ChangeNotifier {
131131
);
132132

133133
try {
134-
await _chatController.update(originalMessage, errorTextMessage);
134+
await _chatController.updateMessage(originalMessage, errorTextMessage);
135135
} catch (e) {
136136
debugPrint(
137137
'GeminiStreamManager: Failed to update message $streamId after error: $e',

examples/flyer_chat/lib/hive_chat_controller.dart

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ class HiveChatController implements ChatController {
88
final _operationsController = StreamController<ChatOperation>.broadcast();
99

1010
@override
11-
Future<void> insert(Message message, {int? index}) async {
11+
Future<void> insertMessage(Message message, {int? index}) async {
1212
if (_box.containsKey(message.id)) return;
1313

1414
_box.write(() {
@@ -25,7 +25,7 @@ class HiveChatController implements ChatController {
2525
}
2626

2727
@override
28-
Future<void> remove(Message message) async {
28+
Future<void> removeMessage(Message message) async {
2929
final index = _box
3030
.getRange(0, _box.length)
3131
.map((json) => Message.fromJson(json))
@@ -41,7 +41,7 @@ class HiveChatController implements ChatController {
4141
}
4242

4343
@override
44-
Future<void> update(Message oldMessage, Message newMessage) async {
44+
Future<void> updateMessage(Message oldMessage, Message newMessage) async {
4545
if (oldMessage == newMessage) return;
4646

4747
final index = _box
@@ -59,7 +59,7 @@ class HiveChatController implements ChatController {
5959
}
6060

6161
@override
62-
Future<void> set(List<Message> messages) async {
62+
Future<void> setMessages(List<Message> messages) async {
6363
_box.clear();
6464
if (messages.isEmpty) {
6565
_operationsController.add(ChatOperation.set());

examples/flyer_chat/lib/local.dart

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ class LocalState extends State<Local> {
105105
ComposerActionButton(
106106
icon: Icons.delete_sweep,
107107
title: 'Clear all',
108-
onPressed: () => _chatController.set([]),
108+
onPressed: () => _chatController.setMessages([]),
109109
destructive: true,
110110
),
111111
],
@@ -279,21 +279,21 @@ class LocalState extends State<Local> {
279279
final formattedDate = DateFormat(
280280
'd MMMM yyyy, HH:mm',
281281
).format(now.toLocal());
282-
await _chatController.insert(
282+
await _chatController.insertMessage(
283283
SystemMessage(
284284
id: _uuid.v4(),
285285
authorId: _systemUser.id,
286286
text: formattedDate,
287287
),
288288
);
289289
}
290-
await _chatController.insert(message);
290+
await _chatController.insertMessage(message);
291291
}
292292
}
293293

294294
Future<void> _toggleTyping() async {
295295
if (!_isTyping) {
296-
await _chatController.insert(
296+
await _chatController.insertMessage(
297297
CustomMessage(
298298
id: _uuid.v4(),
299299
authorId: _systemUser.id,
@@ -307,7 +307,7 @@ class LocalState extends State<Local> {
307307
(message) => message.metadata?['type'] == 'typing',
308308
);
309309

310-
await _chatController.remove(typingMessage);
310+
await _chatController.removeMessage(typingMessage);
311311
_isTyping = false;
312312
} catch (e) {
313313
_isTyping = false;
@@ -317,9 +317,9 @@ class LocalState extends State<Local> {
317317
}
318318

319319
void _removeItem(Message item) async {
320-
await _chatController.remove(item);
320+
await _chatController.removeMessage(item);
321321
if (_chatController.messages.length == 1) {
322-
await _chatController.remove(_chatController.messages[0]);
322+
await _chatController.removeMessage(_chatController.messages[0]);
323323
}
324324
}
325325

@@ -350,7 +350,7 @@ class LocalState extends State<Local> {
350350
source: image.path,
351351
);
352352

353-
await _chatController.insert(imageMessage);
353+
await _chatController.insertMessage(imageMessage);
354354
}
355355
},
356356
),
@@ -385,7 +385,7 @@ class LocalState extends State<Local> {
385385
: null,
386386
);
387387

388-
await _chatController.insert(fileMessage);
388+
await _chatController.insertMessage(fileMessage);
389389
}
390390
},
391391
),

examples/flyer_chat/lib/pagination.dart

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,10 @@ class PaginationState extends State<Pagination> {
111111
return;
112112
}
113113

114-
await _chatController.set([...messages, ..._chatController.messages]);
114+
await _chatController.setMessages([
115+
...messages,
116+
..._chatController.messages,
117+
]);
115118
_lastMessageId = messages.first.id;
116119
_isLoading = false;
117120
}

examples/flyer_chat/lib/sembast_chat_controller.dart

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ class SembastChatController implements ChatController {
1010
SembastChatController(this.database);
1111

1212
@override
13-
Future<void> insert(Message message, {int? index}) async {
13+
Future<void> insertMessage(Message message, {int? index}) async {
1414
final store = intMapStoreFactory.store();
1515

1616
final record = await store.findFirst(
@@ -33,7 +33,7 @@ class SembastChatController implements ChatController {
3333
}
3434

3535
@override
36-
Future<void> remove(Message message) async {
36+
Future<void> removeMessage(Message message) async {
3737
final store = intMapStoreFactory.store();
3838
final records = await store.find(database);
3939

@@ -55,7 +55,7 @@ class SembastChatController implements ChatController {
5555
}
5656

5757
@override
58-
Future<void> update(Message oldMessage, Message newMessage) async {
58+
Future<void> updateMessage(Message oldMessage, Message newMessage) async {
5959
if (oldMessage == newMessage) return;
6060

6161
final store = intMapStoreFactory.store();
@@ -74,7 +74,7 @@ class SembastChatController implements ChatController {
7474
}
7575

7676
@override
77-
Future<void> set(List<Message> messages) async {
77+
Future<void> setMessages(List<Message> messages) async {
7878
final store = intMapStoreFactory.store();
7979
await store.delete(database);
8080
_operationsController.add(ChatOperation.set());

packages/flutter_chat_core/example/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ class BasicState extends State<Basic> {
2828
chatController: _chatController,
2929
currentUserId: 'user1',
3030
onMessageSend: (text) {
31-
_chatController.insert(
31+
_chatController.insertMessage(
3232
TextMessage(
3333
// Better to use UUID or similar for the ID - IDs must be unique
3434
id: '${Random().nextInt(1000) + 1}',

0 commit comments

Comments
 (0)