fix(llc): when removing current user from channel check for null in the callback

Closes #1753
This commit is contained in:
Efthymis Sarmpanis
2023-11-24 13:46:22 +02:00
parent 3b1be70b10
commit 0d7559e3d8
5 changed files with 103 additions and 1 deletions
+2
View File
@@ -6,6 +6,8 @@
update message with `type: reply`.
- [[#1724]](https://github.com/GetStream/stream-chat-flutter/issues/1724) Fixed sendFile error
on `AttachmentFile` with `bytes` and no `name`.
- [[#1753]](https://github.com/GetStream/stream-chat-flutter/issues/1753) Fixed Unhandled null
check operator exception when user is removed from a channel.
## 6.8.0
@@ -1658,7 +1658,7 @@ class ClientState {
)
.listen((event) async {
final isCurrentUser = event.user!.id == currentUser!.id;
if (isCurrentUser) {
if (isCurrentUser && event.channel != null) {
final eventChannel = event.channel!;
await _client.chatPersistenceClient
?.deleteChannels([eventChannel.cid]);
@@ -0,0 +1,47 @@
// ignore_for_file: public_member_api_docs
import 'package:flutter/material.dart';
import 'package:stream_chat_flutter/stream_chat_flutter.dart';
import 'package:stream_chat_flutter_example/debug/error_dialog.dart';
class DebugAddUser extends StatelessWidget {
const DebugAddUser({
super.key,
required this.client,
required this.channel,
});
final StreamChatClient client;
final Channel channel;
@override
Widget build(BuildContext context) {
return Padding(
padding: const EdgeInsets.all(8),
child: TextField(
decoration: const InputDecoration(
labelText: 'Add User',
hintText: 'User Id',
isDense: true,
border: OutlineInputBorder(),
),
onSubmitted: (value) async {
final userId = value.trim();
try {
debugPrint('[addUser] userId: $userId');
final result = await client.addChannelMembers(
channel.id!,
channel.type,
[userId],
);
debugPrint('[addUser] result: $result');
} catch (e) {
debugPrint('[addUser] failed: $e');
showErrorDialog(context, e, 'Add User');
}
},
),
);
}
}
@@ -0,0 +1,47 @@
// ignore_for_file: public_member_api_docs
import 'package:flutter/material.dart';
import 'package:stream_chat_flutter/stream_chat_flutter.dart';
import 'package:stream_chat_flutter_example/debug/error_dialog.dart';
class DebugRemoveUser extends StatelessWidget {
const DebugRemoveUser({
super.key,
required this.client,
required this.channel,
});
final StreamChatClient client;
final Channel channel;
@override
Widget build(BuildContext context) {
return Padding(
padding: const EdgeInsets.all(8),
child: TextField(
decoration: const InputDecoration(
labelText: 'Remove User',
hintText: 'User Id',
isDense: true,
border: OutlineInputBorder(),
),
onSubmitted: (value) async {
final userId = value.trim();
try {
debugPrint('[removeUser] userId: $userId');
final result = await client.removeChannelMembers(
channel.id!,
channel.type,
[userId],
);
debugPrint('[removeUser] result: $result');
} catch (e) {
debugPrint('[removeUser] failed: $e');
showErrorDialog(context, e, 'Remove User');
}
},
),
);
}
}
@@ -4,9 +4,11 @@ import 'dart:async';
import 'package:flutter/material.dart';
import 'package:stream_chat_flutter/stream_chat_flutter.dart';
import 'package:stream_chat_flutter_example/debug/actions/add_user.dart';
import 'package:stream_chat_flutter_example/debug/actions/ban_user.dart';
import 'package:stream_chat_flutter_example/debug/actions/mute_user.dart';
import 'package:stream_chat_flutter_example/debug/actions/remove_shadow_ban.dart';
import 'package:stream_chat_flutter_example/debug/actions/remove_user.dart';
import 'package:stream_chat_flutter_example/debug/actions/shadow_ban.dart';
import 'package:stream_chat_flutter_example/debug/actions/unban_user.dart';
import 'package:stream_chat_flutter_example/debug/actions/unmute_user.dart';
@@ -82,6 +84,10 @@ class _DebugChannelPageState extends State<DebugChannelPage> {
DebugShadowBan(client: _channel.client),
const SizedBox(height: 8),
DebugRemoveShadowBan(client: _channel.client),
const SizedBox(height: 8),
DebugAddUser(client: _channel.client, channel: _channel),
const SizedBox(height: 8),
DebugRemoveUser(client: _channel.client, channel: _channel),
],
),
),