feat: New video file picker button

pull/1654/head
Krille 5 months ago
parent 63af3afde4
commit 00d219bae1
No known key found for this signature in database
GPG Key ID: E067ECD60F1A0652

@ -3201,5 +3201,7 @@
"allDevices": "All devices", "allDevices": "All devices",
"crossVerifiedDevicesIfEnabled": "Cross verified devices if enabled", "crossVerifiedDevicesIfEnabled": "Cross verified devices if enabled",
"crossVerifiedDevices": "Cross verified devices", "crossVerifiedDevices": "Cross verified devices",
"verifiedDevicesOnly": "Verified devices only" "verifiedDevicesOnly": "Verified devices only",
"takeAPhoto": "Take a photo",
"recordAVideo": "Record a video"
} }

@ -548,10 +548,9 @@ class ChatController extends State<ChatPageWithRoom>
} }
void sendImageAction() async { void sendImageAction() async {
final files = await selectFiles( final files = await ImagePicker().pickMultipleMedia(
context, imageQuality: null,
allowMultiple: true, requestFullMetadata: false,
type: FileSelectorType.images,
); );
if (files.isEmpty) return; if (files.isEmpty) return;

@ -109,79 +109,99 @@ class ChatInputRow extends StatelessWidget {
] ]
: <Widget>[ : <Widget>[
const SizedBox(width: 4), const SizedBox(width: 4),
AnimatedContainer( AnimatedSize(
duration: FluffyThemes.animationDuration, duration: FluffyThemes.animationDuration,
curve: FluffyThemes.animationCurve, curve: FluffyThemes.animationCurve,
height: height, child: controller.sendController.text.isNotEmpty
width: controller.sendController.text.isEmpty ? height : 0, ? null
alignment: Alignment.center, : PopupMenuButton<String>(
clipBehavior: Clip.hardEdge, icon: const Icon(Icons.add_circle_outline),
decoration: const BoxDecoration(), iconColor: theme.colorScheme.onPrimaryContainer,
child: PopupMenuButton<String>(
icon: const Icon(Icons.add_outlined),
onSelected: controller.onAddPopupMenuButtonSelected, onSelected: controller.onAddPopupMenuButtonSelected,
itemBuilder: (BuildContext context) => itemBuilder: (BuildContext context) =>
<PopupMenuEntry<String>>[ <PopupMenuEntry<String>>[
if (PlatformInfos.isMobile)
PopupMenuItem<String>( PopupMenuItem<String>(
value: 'file', value: 'location',
child: ListTile( child: ListTile(
leading: const CircleAvatar( leading: CircleAvatar(
backgroundColor: Colors.green, backgroundColor:
foregroundColor: Colors.white, theme.colorScheme.onPrimaryContainer,
child: Icon(Icons.attachment_outlined), foregroundColor:
theme.colorScheme.primaryContainer,
child: const Icon(Icons.gps_fixed_outlined),
), ),
title: Text(L10n.of(context).sendFile), title: Text(L10n.of(context).shareLocation),
contentPadding: const EdgeInsets.all(0), contentPadding: const EdgeInsets.all(0),
), ),
), ),
PopupMenuItem<String>( PopupMenuItem<String>(
value: 'image', value: 'image',
child: ListTile( child: ListTile(
leading: const CircleAvatar( leading: CircleAvatar(
backgroundColor: Colors.blue, backgroundColor:
foregroundColor: Colors.white, theme.colorScheme.onPrimaryContainer,
child: Icon(Icons.image_outlined), foregroundColor:
), theme.colorScheme.primaryContainer,
title: Text(L10n.of(context).sendImage), child: const Icon(Icons.photo_album_outlined),
),
title: Text(L10n.of(context).openGallery),
contentPadding: const EdgeInsets.all(0), contentPadding: const EdgeInsets.all(0),
), ),
), ),
if (PlatformInfos.isMobile)
PopupMenuItem<String>( PopupMenuItem<String>(
value: 'camera', value: 'file',
child: ListTile( child: ListTile(
leading: const CircleAvatar( leading: CircleAvatar(
backgroundColor: Colors.purple, backgroundColor:
foregroundColor: Colors.white, theme.colorScheme.onPrimaryContainer,
child: Icon(Icons.camera_alt_outlined), foregroundColor:
theme.colorScheme.primaryContainer,
child: const Icon(Icons.attachment_outlined),
), ),
title: Text(L10n.of(context).openCamera), title: Text(L10n.of(context).sendFile),
contentPadding: const EdgeInsets.all(0), contentPadding: const EdgeInsets.all(0),
), ),
), ),
],
),
),
if (PlatformInfos.isMobile) if (PlatformInfos.isMobile)
AnimatedSize(
duration: FluffyThemes.animationDuration,
curve: FluffyThemes.animationCurve,
child: controller.sendController.text.isNotEmpty
? null
: PopupMenuButton(
icon: const Icon(Icons.camera_alt_outlined),
onSelected: controller.onAddPopupMenuButtonSelected,
iconColor: theme.colorScheme.onPrimaryContainer,
itemBuilder: (context) => [
PopupMenuItem<String>( PopupMenuItem<String>(
value: 'camera-video', value: 'camera-video',
child: ListTile( child: ListTile(
leading: const CircleAvatar( leading: CircleAvatar(
backgroundColor: Colors.red, backgroundColor:
foregroundColor: Colors.white, theme.colorScheme.onPrimaryContainer,
child: Icon(Icons.videocam_outlined), foregroundColor:
), theme.colorScheme.primaryContainer,
title: Text(L10n.of(context).openVideoCamera), child: const Icon(Icons.videocam_outlined),
),
title: Text(L10n.of(context).recordAVideo),
contentPadding: const EdgeInsets.all(0), contentPadding: const EdgeInsets.all(0),
), ),
), ),
if (PlatformInfos.isMobile)
PopupMenuItem<String>( PopupMenuItem<String>(
value: 'location', value: 'camera',
child: ListTile( child: ListTile(
leading: const CircleAvatar( leading: CircleAvatar(
backgroundColor: Colors.brown, backgroundColor:
foregroundColor: Colors.white, theme.colorScheme.onPrimaryContainer,
child: Icon(Icons.gps_fixed_outlined), foregroundColor:
), theme.colorScheme.primaryContainer,
title: Text(L10n.of(context).shareLocation), child: const Icon(Icons.camera_alt_outlined),
),
title: Text(L10n.of(context).takeAPhoto),
contentPadding: const EdgeInsets.all(0), contentPadding: const EdgeInsets.all(0),
), ),
), ),
@ -194,6 +214,7 @@ class ChatInputRow extends StatelessWidget {
alignment: Alignment.center, alignment: Alignment.center,
child: IconButton( child: IconButton(
tooltip: L10n.of(context).emojis, tooltip: L10n.of(context).emojis,
color: theme.colorScheme.onPrimaryContainer,
icon: PageTransitionSwitcher( icon: PageTransitionSwitcher(
transitionBuilder: ( transitionBuilder: (
Widget child, Widget child,

Loading…
Cancel
Save