Merge branch 'develop' into v4
This commit is contained in:
@@ -1,3 +1,5 @@
|
||||
// ignore_for_file: deprecated_member_use_from_same_package
|
||||
|
||||
import 'dart:async';
|
||||
import 'dart:math';
|
||||
|
||||
@@ -15,7 +17,7 @@ import 'package:stream_chat_flutter/src/emoji/emoji.dart';
|
||||
import 'package:stream_chat_flutter/src/emoji_overlay.dart';
|
||||
import 'package:stream_chat_flutter/src/extension.dart';
|
||||
import 'package:stream_chat_flutter/src/media_list_view.dart';
|
||||
import 'package:stream_chat_flutter/src/multi_overlay.dart';
|
||||
import 'package:stream_chat_flutter/src/media_list_view_controller.dart';
|
||||
import 'package:stream_chat_flutter/src/quoted_message_widget.dart';
|
||||
import 'package:stream_chat_flutter/src/user_mentions_overlay.dart';
|
||||
import 'package:stream_chat_flutter/src/video_thumbnail_image.dart';
|
||||
@@ -333,6 +335,7 @@ class MessageInputState extends State<MessageInput> {
|
||||
final List<User> _mentionedUsers = [];
|
||||
|
||||
final _imagePicker = ImagePicker();
|
||||
final _mediaListViewController = MediaListViewController();
|
||||
late final _focusNode = widget.focusNode ?? FocusNode();
|
||||
late final _isInternalFocusNode = widget.focusNode == null;
|
||||
bool _inputEnabled = true;
|
||||
@@ -1046,6 +1049,26 @@ class MessageInputState extends State<MessageInput> {
|
||||
);
|
||||
},
|
||||
),
|
||||
const Spacer(),
|
||||
FutureBuilder(
|
||||
future: PhotoManager.requestPermissionExtend(),
|
||||
builder: (context, snapshot) {
|
||||
if (snapshot.hasData &&
|
||||
snapshot.data == PermissionState.limited) {
|
||||
return TextButton(
|
||||
child: Text(context.translations.viewLibrary),
|
||||
onPressed: () async {
|
||||
await PhotoManager.presentLimited();
|
||||
_mediaListViewController.updateMedia(
|
||||
newValue: true,
|
||||
);
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
return const SizedBox.shrink();
|
||||
},
|
||||
),
|
||||
],
|
||||
),
|
||||
DecoratedBox(
|
||||
@@ -1078,6 +1101,7 @@ class MessageInputState extends State<MessageInput> {
|
||||
borderRadius: BorderRadius.circular(8),
|
||||
),
|
||||
child: _PickerWidget(
|
||||
mediaListViewController: _mediaListViewController,
|
||||
filePickerIndex: _filePickerIndex,
|
||||
streamChatTheme: _streamChatTheme,
|
||||
containsFile: _attachmentContainsFile,
|
||||
@@ -1241,7 +1265,7 @@ class MessageInputState extends State<MessageInput> {
|
||||
Widget _buildReplyToMessage() {
|
||||
if (!_hasQuotedMessage) return const Offstage();
|
||||
final containsUrl = widget.quotedMessage!.attachments
|
||||
.any((element) => element.titleLink != null);
|
||||
.any((element) => element.ogScrapeUrl != null);
|
||||
return StreamQuotedMessageWidget(
|
||||
reverse: true,
|
||||
showBorder: !containsUrl,
|
||||
@@ -1909,6 +1933,7 @@ class _PickerWidget extends StatefulWidget {
|
||||
required this.onAddMoreFilesClick,
|
||||
required this.onMediaSelected,
|
||||
required this.streamChatTheme,
|
||||
required this.mediaListViewController,
|
||||
}) : super(key: key);
|
||||
|
||||
final int filePickerIndex;
|
||||
@@ -1917,6 +1942,7 @@ class _PickerWidget extends StatefulWidget {
|
||||
final void Function(DefaultAttachmentTypes) onAddMoreFilesClick;
|
||||
final void Function(AssetEntity) onMediaSelected;
|
||||
final StreamChatThemeData streamChatTheme;
|
||||
final MediaListViewController mediaListViewController;
|
||||
|
||||
@override
|
||||
_PickerWidgetState createState() => _PickerWidgetState();
|
||||
@@ -1964,7 +1990,9 @@ class _PickerWidgetState extends State<_PickerWidget> {
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
return StreamMediaListView(
|
||||
controller: widget.mediaListViewController,
|
||||
selectedIds: widget.selectedMedias,
|
||||
onSelect: widget.onMediaSelected,
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user