@@ -318,6 +318,44 @@ class _AttachFileButton extends StatelessWidget {
318
318
}
319
319
}
320
320
321
+ class _AttachMediaButton extends StatelessWidget {
322
+ const _AttachMediaButton ({required this .contentController, required this .contentFocusNode});
323
+
324
+ final ContentTextEditingController contentController;
325
+ final FocusNode contentFocusNode;
326
+
327
+ _handlePress (BuildContext context) async {
328
+ FilePickerResult ? result;
329
+ try {
330
+ result = await FilePicker .platform.pickFiles (type: FileType .media, allowMultiple: true , withReadStream: true );
331
+ } catch (e) {
332
+ // TODO(i18n)
333
+ showErrorDialog (context: context, title: 'Error' , message: e.toString ());
334
+ return ;
335
+ }
336
+ if (result == null ) {
337
+ return ; // User cancelled; do nothing
338
+ }
339
+
340
+ if (context.mounted) {} // https://github.com/dart-lang/linter/issues/4007
341
+ else {
342
+ return ;
343
+ }
344
+
345
+ final Iterable <_File > files = result.files.map ((f) {
346
+ assert (f.readStream != null ); // We passed `withReadStream: true` to pickFiles.
347
+ return _File (content: f.readStream! , length: f.size, filename: f.name);
348
+ });
349
+ _uploadFiles (context: context, contentController: contentController, contentFocusNode: contentFocusNode,
350
+ files: files);
351
+ }
352
+
353
+ @override
354
+ Widget build (BuildContext context) {
355
+ return IconButton (icon: const Icon (Icons .image), onPressed: () => _handlePress (context));
356
+ }
357
+ }
358
+
321
359
/// The send button for StreamComposeBox.
322
360
class _StreamSendButton extends StatefulWidget {
323
361
const _StreamSendButton ({required this .topicController, required this .contentController});
@@ -516,6 +554,7 @@ class _StreamComposeBoxState extends State<StreamComposeBox> {
516
554
child: Row (
517
555
children: [
518
556
_AttachFileButton (contentController: _contentController, contentFocusNode: _contentFocusNode),
557
+ _AttachMediaButton (contentController: _contentController, contentFocusNode: _contentFocusNode),
519
558
])),
520
559
]))));
521
560
}
0 commit comments