Merge branch 'develop' into develop
This commit is contained in:
@@ -4,6 +4,13 @@
|
||||
|
||||
- `centerTitle` and `elevation` properties to `ChannelHeader`, `ThreadHeader` and `ChannelListHeader`.
|
||||
|
||||
## 3.5.1
|
||||
|
||||
🐞 Fixed
|
||||
|
||||
- Mentions overlay now doesn't overflow when there is not enough height available
|
||||
- Updated `stream_chat_flutter_core` dependency to [`3.5.1`](https://pub.dev/packages/stream_chat_flutter_core/changelog).
|
||||
|
||||
## 3.5.0
|
||||
|
||||
🐞 Fixed
|
||||
|
||||
@@ -158,7 +158,10 @@ class _MediaListViewState extends State<MediaListView> {
|
||||
))
|
||||
.firstOrNull;
|
||||
|
||||
final media = await assetList?.getAssetListPaged(_currentPage, 50);
|
||||
final media = await assetList?.getAssetListPaged(
|
||||
page: _currentPage,
|
||||
size: 50,
|
||||
);
|
||||
|
||||
if (media?.isNotEmpty == true) {
|
||||
setState(() {
|
||||
@@ -197,7 +200,7 @@ class MediaThumbnailProvider extends ImageProvider<MediaThumbnailProvider> {
|
||||
DecoderCallback decode,
|
||||
) async {
|
||||
assert(key == this, 'Checks MediaThumbnailProvider');
|
||||
final bytes = await media.thumbData;
|
||||
final bytes = await media.thumbnailData;
|
||||
|
||||
return decode(bytes!);
|
||||
}
|
||||
|
||||
@@ -344,6 +344,7 @@ class MessageInputState extends State<MessageInput> {
|
||||
|
||||
final _imagePicker = ImagePicker();
|
||||
late final _focusNode = widget.focusNode ?? FocusNode();
|
||||
late final _isInternalFocusNode = widget.focusNode == null;
|
||||
bool _inputEnabled = true;
|
||||
bool _commandEnabled = false;
|
||||
bool _showCommandsOverlay = false;
|
||||
@@ -1191,30 +1192,36 @@ class MessageInputState extends State<MessageInput> {
|
||||
};
|
||||
}
|
||||
|
||||
return UserMentionsOverlay(
|
||||
query: query,
|
||||
mentionAllAppUsers: widget.mentionAllAppUsers,
|
||||
client: StreamChat.of(context).client,
|
||||
channel: channel,
|
||||
size: Size(renderObject.size.width - 16, 400),
|
||||
mentionsTileBuilder: tileBuilder,
|
||||
onMentionUserTap: (user) {
|
||||
_mentionedUsers.add(user);
|
||||
splits[splits.length - 1] = user.name;
|
||||
final rejoin = splits.join('@');
|
||||
return LayoutBuilder(
|
||||
builder: (context, snapshot) => UserMentionsOverlay(
|
||||
query: query,
|
||||
mentionAllAppUsers: widget.mentionAllAppUsers,
|
||||
client: StreamChat.of(context).client,
|
||||
channel: channel,
|
||||
size: Size(
|
||||
renderObject.size.width - 16,
|
||||
min(400, (snapshot.maxHeight - renderObject.size.height - 16).abs()),
|
||||
),
|
||||
mentionsTileBuilder: tileBuilder,
|
||||
onMentionUserTap: (user) {
|
||||
_mentionedUsers.add(user);
|
||||
splits[splits.length - 1] = user.name;
|
||||
final rejoin = splits.join('@');
|
||||
|
||||
textEditingController.value = TextEditingValue(
|
||||
text: rejoin +
|
||||
textEditingController.text.substring(
|
||||
textEditingController.selection.start,
|
||||
),
|
||||
selection: TextSelection.collapsed(
|
||||
offset: rejoin.length,
|
||||
),
|
||||
);
|
||||
_onChangedDebounced.cancel();
|
||||
setState(() => _showMentionsOverlay = false);
|
||||
},
|
||||
textEditingController.value = TextEditingValue(
|
||||
text: rejoin +
|
||||
textEditingController.text.substring(
|
||||
textEditingController.selection.start,
|
||||
),
|
||||
selection: TextSelection.collapsed(
|
||||
offset: rejoin.length,
|
||||
),
|
||||
);
|
||||
_onChangedDebounced.cancel();
|
||||
|
||||
setState(() => _showMentionsOverlay = false);
|
||||
},
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
@@ -1925,6 +1932,7 @@ class MessageInputState extends State<MessageInput> {
|
||||
void dispose() {
|
||||
textEditingController.dispose();
|
||||
_focusNode.removeListener(_focusNodeListener);
|
||||
if (_isInternalFocusNode) _focusNode.dispose();
|
||||
_stopSlowMode();
|
||||
_onChangedDebounced.cancel();
|
||||
super.dispose();
|
||||
@@ -1970,12 +1978,12 @@ class _PickerWidget extends StatefulWidget {
|
||||
}
|
||||
|
||||
class _PickerWidgetState extends State<_PickerWidget> {
|
||||
Future<bool>? requestPermission;
|
||||
Future<PermissionState>? requestPermission;
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
requestPermission = PhotoManager.requestPermission();
|
||||
requestPermission = PhotoManager.requestPermissionExtend();
|
||||
}
|
||||
|
||||
@override
|
||||
@@ -1983,14 +1991,15 @@ class _PickerWidgetState extends State<_PickerWidget> {
|
||||
if (widget.filePickerIndex != 0) {
|
||||
return const Offstage();
|
||||
}
|
||||
return FutureBuilder<bool>(
|
||||
return FutureBuilder<PermissionState>(
|
||||
future: requestPermission,
|
||||
builder: (context, snapshot) {
|
||||
if (!snapshot.hasData) {
|
||||
return const Offstage();
|
||||
}
|
||||
|
||||
if (snapshot.data!) {
|
||||
if ([PermissionState.authorized, PermissionState.limited]
|
||||
.contains(snapshot.data)) {
|
||||
if (widget.containsFile) {
|
||||
return GestureDetector(
|
||||
onTap: () {
|
||||
|
||||
@@ -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: 3.5.0
|
||||
version: 3.5.1
|
||||
repository: https://github.com/GetStream/stream-chat-flutter
|
||||
issue_tracker: https://github.com/GetStream/stream-chat-flutter/issues
|
||||
|
||||
@@ -31,12 +31,12 @@ dependencies:
|
||||
lottie: ^1.0.1
|
||||
meta: ^1.3.0
|
||||
path_provider: ^2.0.1
|
||||
photo_manager: ^1.2.6+1
|
||||
photo_manager: ^2.0.1
|
||||
photo_view: ^0.13.0
|
||||
rxdart: ^0.27.0
|
||||
share_plus: ^3.0.4
|
||||
share_plus: ^4.0.1
|
||||
shimmer: ^2.0.0
|
||||
stream_chat_flutter_core: ^3.5.0
|
||||
stream_chat_flutter_core: ^3.5.1
|
||||
substring_highlight: ^1.0.26
|
||||
synchronized: ^3.0.0
|
||||
url_launcher: ^6.0.3
|
||||
@@ -58,5 +58,5 @@ dev_dependencies:
|
||||
flutter_test:
|
||||
sdk: flutter
|
||||
golden_toolkit: ^0.13.0
|
||||
mocktail: ^0.2.0
|
||||
mocktail: ^0.3.0
|
||||
path: ^1.8.0
|
||||
|
||||
Reference in New Issue
Block a user