mirror of
https://github.com/inventree/inventree-app.git
synced 2025-04-28 05:26:47 +00:00
Add image selection field which allows picking from gallery or taking a new photo with camera
This commit is contained in:
parent
77d92f5307
commit
6f12929057
@ -1,5 +1,89 @@
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:font_awesome_flutter/font_awesome_flutter.dart';
|
||||
import 'package:image_picker/image_picker.dart';
|
||||
|
||||
import 'dart:async';
|
||||
import 'dart:io';
|
||||
|
||||
// TODO - Perhaps refactor all this using flutter_form_builder - https://pub.dev/packages/flutter_form_builder
|
||||
|
||||
|
||||
/*
|
||||
* Form field for selecting an image file,
|
||||
* either from the gallery, or from the camera.
|
||||
*/
|
||||
class ImagePickerField extends FormField<File> {
|
||||
|
||||
static void _selectFromGallery(FormFieldState<File> field) {
|
||||
_getImageFromGallery(field);
|
||||
}
|
||||
|
||||
static void _selectFromCamera(FormFieldState<File> field) {
|
||||
_getImageFromCamera(field);
|
||||
}
|
||||
|
||||
static Future<void> _getImageFromGallery(FormFieldState<File> field) async {
|
||||
|
||||
File image;
|
||||
|
||||
await ImagePicker.pickImage(source: ImageSource.gallery).then((File img) {
|
||||
image = img;
|
||||
});
|
||||
|
||||
field.didChange(image);
|
||||
}
|
||||
|
||||
static Future<void> _getImageFromCamera(FormFieldState<File> field) async {
|
||||
File image;
|
||||
|
||||
await ImagePicker.pickImage(source: ImageSource.camera).then((File img) {
|
||||
image = img;
|
||||
});
|
||||
|
||||
field.didChange(image);
|
||||
}
|
||||
|
||||
ImagePickerField({String label = "Attach Image", Function onSaved, bool required = false}) :
|
||||
super(
|
||||
onSaved: onSaved,
|
||||
validator: (File img) {
|
||||
if (required && (img == null)) {
|
||||
return "Required";
|
||||
}
|
||||
|
||||
return null;
|
||||
},
|
||||
builder: (FormFieldState<File> state) {
|
||||
return InputDecorator(
|
||||
decoration: InputDecoration(
|
||||
errorText: state.errorText,
|
||||
labelText: required ? label + "*" : label,
|
||||
),
|
||||
child: Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
|
||||
children: <Widget>[
|
||||
FlatButton(
|
||||
child: Text("Select Image"),
|
||||
onPressed: () {
|
||||
_selectFromGallery(state);
|
||||
},
|
||||
),
|
||||
FlatButton(
|
||||
child: Text("Take Picture"),
|
||||
onPressed: () {
|
||||
_selectFromCamera(state);
|
||||
},
|
||||
)
|
||||
],
|
||||
),
|
||||
);
|
||||
return ListTile(
|
||||
title: Text("Select Image"),
|
||||
);
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
class CheckBoxField extends FormField<bool> {
|
||||
@ -25,7 +109,7 @@ class StringField extends TextFormField {
|
||||
StringField({String label, String hint, String initial, Function onSaved, Function validator, bool allowEmpty = false, bool isEnabled = true}) :
|
||||
super(
|
||||
decoration: InputDecoration(
|
||||
labelText: label,
|
||||
labelText: allowEmpty ? label : label + "*",
|
||||
hintText: hint
|
||||
),
|
||||
initialValue: initial,
|
||||
|
Loading…
x
Reference in New Issue
Block a user