aboutsummaryrefslogtreecommitdiff
path: root/lib/widgets/avatar_picker.dart
diff options
context:
space:
mode:
Diffstat (limited to 'lib/widgets/avatar_picker.dart')
-rw-r--r--lib/widgets/avatar_picker.dart61
1 files changed, 61 insertions, 0 deletions
diff --git a/lib/widgets/avatar_picker.dart b/lib/widgets/avatar_picker.dart
new file mode 100644
index 0000000..bdfec6d
--- /dev/null
+++ b/lib/widgets/avatar_picker.dart
@@ -0,0 +1,61 @@
+import 'dart:io';
+
+import 'package:flutter/material.dart';
+import 'package:image_picker/image_picker.dart';
+
+class AvatarPicker extends StatelessWidget {
+ final ImagePicker picker = ImagePicker();
+ final XFile? avatar;
+ final Function(XFile? avatar) onAvatarPicked;
+
+ AvatarPicker({
+ super.key,
+ required this.avatar,
+ required this.onAvatarPicked,
+ });
+
+ File? _getAvatarFile() {
+ return avatar == null ? null : File(avatar!.path);
+ }
+
+ @override
+ Widget build(BuildContext context) {
+ return Row(
+ mainAxisAlignment: MainAxisAlignment.center,
+ children: [
+ CircleAvatar(
+ radius: 50.0,
+ backgroundImage:
+ _getAvatarFile() == null ? null : FileImage(_getAvatarFile()!),
+ child: _getAvatarFile() == null
+ ? const Icon(Icons.person, size: 50.0)
+ : null,
+ ),
+ const SizedBox(width: 18.0),
+ Column(
+ children: [
+ FilledButton.icon(
+ icon: const Icon(Icons.camera_alt),
+ label: const Text('Cámara'),
+ onPressed: () {
+ picker.pickImage(source: ImageSource.camera).then((image) {
+ onAvatarPicked(image);
+ });
+ },
+ ),
+ const SizedBox(height: 16.0),
+ FilledButton.icon(
+ icon: const Icon(Icons.collections),
+ label: const Text('Galería'),
+ onPressed: () {
+ picker.pickImage(source: ImageSource.gallery).then((image) {
+ onAvatarPicked(image);
+ });
+ },
+ )
+ ],
+ )
+ ],
+ );
+ }
+}