Merge branch 'develop' into dependabot/pub/packages/stream_chat_flutter/share_plus-8.0.0
This commit is contained in:
@@ -1,3 +1,10 @@
|
||||
# 6.12.0
|
||||
|
||||
🐞 Fixed
|
||||
|
||||
- [[#1759]](https://github.com/GetStream/stream-chat-flutter/issues/1759) Fixed
|
||||
The Reaction Picker is not being removed when I set showReactionPicker to false.
|
||||
|
||||
# 6.11.0
|
||||
|
||||
🐞 Fixed
|
||||
|
||||
@@ -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),
|
||||
],
|
||||
),
|
||||
),
|
||||
|
||||
@@ -60,7 +60,9 @@ class StreamMessageWidget extends StatefulWidget {
|
||||
bool? showReactionPicker,
|
||||
@Deprecated('Use `showReactionPicker` instead')
|
||||
bool showReactionPickerIndicator = true,
|
||||
@internal this.showReactionPickerTail = false,
|
||||
@internal
|
||||
@Deprecated('Use `showReactionPicker` instead')
|
||||
this.showReactionPickerTail,
|
||||
this.showUserAvatar = DisplayWidget.show,
|
||||
this.showSendingIndicator = true,
|
||||
this.showThreadReplyIndicator = false,
|
||||
@@ -483,7 +485,8 @@ class StreamMessageWidget extends StatefulWidget {
|
||||
/// Whether or not to show the reaction picker tail
|
||||
/// {@endtemplate}
|
||||
@internal
|
||||
final bool showReactionPickerTail;
|
||||
@Deprecated('Use `showReactionPicker` instead')
|
||||
final bool? showReactionPickerTail;
|
||||
|
||||
/// {@template onShowMessage}
|
||||
/// Callback when show message is tapped
|
||||
@@ -743,8 +746,6 @@ class StreamMessageWidget extends StatefulWidget {
|
||||
showReactionPicker: showReactionPicker ??
|
||||
showReactionPickerIndicator ??
|
||||
this.showReactionPicker,
|
||||
showReactionPickerTail:
|
||||
showReactionPickerTail ?? this.showReactionPickerTail,
|
||||
onShowMessage: onShowMessage ?? this.onShowMessage,
|
||||
showUsername: showUsername ?? this.showUsername,
|
||||
showTimestamp: showTimestamp ?? this.showTimestamp,
|
||||
@@ -1002,7 +1003,7 @@ class _StreamMessageWidgetState extends State<StreamMessageWidget>
|
||||
messageWidget: widget,
|
||||
showBottomRow: showBottomRow,
|
||||
showPinHighlight: widget.showPinHighlight,
|
||||
showReactionPickerTail: widget.showReactionPickerTail,
|
||||
showReactionPickerTail: widget.showReactionPicker,
|
||||
showReactions: showReactions,
|
||||
onReactionsTap: () {
|
||||
widget.onReactionsTap != null
|
||||
@@ -1217,7 +1218,8 @@ class _StreamMessageWidgetState extends State<StreamMessageWidget>
|
||||
translateUserAvatar: false,
|
||||
showSendingIndicator: false,
|
||||
padding: EdgeInsets.zero,
|
||||
// Show the tail if the reaction picker is visible.
|
||||
// Show both the tail if the picker is shown.
|
||||
showReactionPicker: widget.showReactionPicker,
|
||||
showReactionPickerTail: widget.showReactionPicker,
|
||||
showPinHighlight: false,
|
||||
showUserAvatar:
|
||||
@@ -1258,6 +1260,7 @@ class _StreamMessageWidgetState extends State<StreamMessageWidget>
|
||||
return StreamChannel(
|
||||
channel: channel,
|
||||
child: MessageActionsModal(
|
||||
showReactionPicker: widget.showReactionPicker,
|
||||
messageWidget: widget.copyWith(
|
||||
key: const Key('MessageWidget'),
|
||||
message: widget.message.copyWith(
|
||||
@@ -1271,9 +1274,6 @@ class _StreamMessageWidgetState extends State<StreamMessageWidget>
|
||||
translateUserAvatar: false,
|
||||
showSendingIndicator: false,
|
||||
padding: EdgeInsets.zero,
|
||||
// Show both the tail if the picker is shown.
|
||||
showReactionPicker: widget.showReactionPicker,
|
||||
showReactionPickerTail: widget.showReactionPicker,
|
||||
showPinHighlight: false,
|
||||
showUserAvatar: widget.message.user!.id ==
|
||||
channel.client.state.currentUser!.id
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
name: stream_chat_flutter
|
||||
homepage: https://github.com/GetStream/stream-chat-flutter
|
||||
description: Stream Chat official Flutter SDK. Build your own chat experience using Dart and Flutter.
|
||||
version: 6.11.0
|
||||
version: 6.12.0
|
||||
repository: https://github.com/GetStream/stream-chat-flutter
|
||||
issue_tracker: https://github.com/GetStream/stream-chat-flutter/issues
|
||||
|
||||
@@ -19,7 +19,7 @@ dependencies:
|
||||
diacritic: ^0.1.4
|
||||
dio: ^5.3.2
|
||||
ezanimation: ^0.6.0
|
||||
file_picker: ^5.3.3
|
||||
file_picker: ">=5.3.3 <7.0.0"
|
||||
file_selector: ^1.0.0
|
||||
flutter:
|
||||
sdk: flutter
|
||||
@@ -38,7 +38,7 @@ dependencies:
|
||||
rxdart: ^0.27.7
|
||||
share_plus: ">=7.1.0 <9.0.0"
|
||||
shimmer: ^3.0.0
|
||||
stream_chat_flutter_core: ^6.10.0
|
||||
stream_chat_flutter_core: ^6.11.0
|
||||
synchronized: ^3.1.0
|
||||
thumblr: ^0.0.4
|
||||
url_launcher: ^6.1.12
|
||||
|
||||
+95
@@ -64,6 +64,101 @@ void main() {
|
||||
},
|
||||
);
|
||||
|
||||
testWidgets(
|
||||
'it should show the reaction picker',
|
||||
(WidgetTester tester) async {
|
||||
final client = MockClient();
|
||||
final clientState = MockClientState();
|
||||
final channel = MockChannel(
|
||||
ownCapabilities: ['send-message', 'send-reaction'],
|
||||
);
|
||||
|
||||
when(() => client.state).thenReturn(clientState);
|
||||
when(() => clientState.currentUser).thenReturn(OwnUser(id: 'user-id'));
|
||||
|
||||
final themeData = ThemeData();
|
||||
final streamTheme = StreamChatThemeData.fromTheme(themeData);
|
||||
await tester.pumpWidget(
|
||||
MaterialApp(
|
||||
theme: themeData,
|
||||
home: StreamChat(
|
||||
streamChatThemeData: streamTheme,
|
||||
client: client,
|
||||
child: SizedBox(
|
||||
child: StreamChannel(
|
||||
channel: channel,
|
||||
child: MessageActionsModal(
|
||||
message: Message(
|
||||
text: 'test',
|
||||
user: User(
|
||||
id: 'user-id',
|
||||
),
|
||||
state: MessageState.sent,
|
||||
),
|
||||
messageWidget: const Text(
|
||||
'test',
|
||||
key: Key('MessageWidget'),
|
||||
),
|
||||
messageTheme: streamTheme.ownMessageTheme,
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
await tester.pumpAndSettle();
|
||||
|
||||
expect(find.byType(StreamReactionPicker), findsOneWidget);
|
||||
},
|
||||
);
|
||||
|
||||
testWidgets(
|
||||
'it should not show the reaction picker',
|
||||
(WidgetTester tester) async {
|
||||
final client = MockClient();
|
||||
final clientState = MockClientState();
|
||||
final channel = MockChannel();
|
||||
|
||||
when(() => client.state).thenReturn(clientState);
|
||||
when(() => clientState.currentUser).thenReturn(OwnUser(id: 'user-id'));
|
||||
|
||||
final themeData = ThemeData();
|
||||
final streamTheme = StreamChatThemeData.fromTheme(themeData);
|
||||
await tester.pumpWidget(
|
||||
MaterialApp(
|
||||
theme: themeData,
|
||||
home: StreamChat(
|
||||
streamChatThemeData: streamTheme,
|
||||
client: client,
|
||||
child: SizedBox(
|
||||
child: StreamChannel(
|
||||
channel: channel,
|
||||
child: MessageActionsModal(
|
||||
showReactionPicker: false,
|
||||
message: Message(
|
||||
text: 'test',
|
||||
user: User(
|
||||
id: 'user-id',
|
||||
),
|
||||
state: MessageState.sent,
|
||||
),
|
||||
messageWidget: const Text(
|
||||
'test',
|
||||
key: Key('MessageWidget'),
|
||||
),
|
||||
messageTheme: streamTheme.ownMessageTheme,
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
);
|
||||
await tester.pumpAndSettle();
|
||||
|
||||
expect(find.byType(StreamReactionPicker), findsNothing);
|
||||
},
|
||||
);
|
||||
|
||||
testWidgets(
|
||||
'it should show some actions',
|
||||
(WidgetTester tester) async {
|
||||
|
||||
@@ -14,6 +14,13 @@ class MockClient extends Mock implements StreamChatClient {
|
||||
class MockClientState extends Mock implements ClientState {}
|
||||
|
||||
class MockChannel extends Mock implements Channel {
|
||||
MockChannel({
|
||||
this.ownCapabilities = const ['send-message'],
|
||||
});
|
||||
|
||||
@override
|
||||
final List<String> ownCapabilities;
|
||||
|
||||
@override
|
||||
Future<bool> get initialized async => true;
|
||||
|
||||
@@ -22,9 +29,6 @@ class MockChannel extends Mock implements Channel {
|
||||
Future<void> keyStroke([String? parentId]) async {
|
||||
return;
|
||||
}
|
||||
|
||||
@override
|
||||
List<String> get ownCapabilities => ['send-message'];
|
||||
}
|
||||
|
||||
class MockChannelState extends Mock implements ChannelClientState {
|
||||
|
||||
Reference in New Issue
Block a user