advance_image_picker 0.1.3 advance_image_picker: ^0.1.3 copied to clipboard
Flutter plugin in pure Dart code for selecting/editing multiple images from the Android/iOS image library and taking new pictures with the camera in the same view.
import 'dart:io';
import 'package:advance_image_picker/advance_image_picker.dart';
import 'package:flutter/material.dart';
import 'package:intl/intl.dart';
// We don't care about missing API docs in the example app.
// ignore_for_file: public_member_api_docs
void main() {
WidgetsFlutterBinding.ensureInitialized();
ErrorWidget.builder = (FlutterErrorDetails details) {
return ErrorWidget(details.exception);
};
runApp(const MyApp());
}
/// Example app.
class MyApp extends StatelessWidget {
/// Example app constructor.
const MyApp({final Key? key}) : super(key: key);
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
// Setup image picker configs
final configs = ImagePickerConfigs();
// AppBar text color
configs.appBarTextColor = Colors.white;
configs.appBarBackgroundColor = Colors.orange;
// Disable select images from album
// configs.albumPickerModeEnabled = false;
// Only use front camera for capturing
// configs.cameraLensDirection = 0;
// Translate function
configs.translateFunc = (name, value) => Intl.message(value, name: name);
// Disable edit function, then add other edit control instead
configs.adjustFeatureEnabled = false;
configs.externalImageEditors['external_image_editor_1'] = EditorParams(
title: 'external_image_editor_1',
icon: Icons.edit_rounded,
onEditorEvent: (
{required BuildContext context,
required File file,
required String title,
int maxWidth = 1080,
int maxHeight = 1920,
int compressQuality = 90,
ImagePickerConfigs? configs}) async =>
await Navigator.of(context).push(MaterialPageRoute<File>(
fullscreenDialog: true,
builder: (context) => ImageEdit(
file: file,
title: title,
maxWidth: maxWidth,
maxHeight: maxHeight,
configs: configs))));
configs.externalImageEditors['external_image_editor_2'] = EditorParams(
title: 'external_image_editor_2',
icon: Icons.edit_attributes,
onEditorEvent: (
{required BuildContext context,
required File file,
required String title,
int maxWidth = 1080,
int maxHeight = 1920,
int compressQuality = 90,
ImagePickerConfigs? configs}) async =>
await Navigator.of(context).push(MaterialPageRoute<File>(
fullscreenDialog: true,
builder: (context) => ImageSticker(
file: file,
title: title,
maxWidth: maxWidth,
maxHeight: maxHeight,
configs: configs))));
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
// This is the theme of your application.
//
// Try running your application with "flutter run". You'll see the
// application has a blue toolbar. Then, without quitting the app, try
// changing the primarySwatch below to Colors.green and then invoke
// "hot reload" (press "r" in the console where you ran "flutter run",
// or simply save your changes to "hot reload" in a Flutter IDE).
// Notice that the counter didn't reset back to zero; the application
// is not restarted.
primarySwatch: Colors.blue,
),
home: const MyHomePage(title: 'advance_image_picker Demo'),
);
}
}
class MyHomePage extends StatefulWidget {
const MyHomePage({Key? key, required this.title}) : super(key: key);
final String title;
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
List<ImageObject> _imgObjs = [];
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
// Here we take the value from the MyHomePage object that was created by
// the App.build method, and use it to set our appbar title.
title: Text(widget.title),
),
body: Center(
// Center is a layout widget. It takes a single child and positions it
// in the middle of the parent.
child: Column(
children: <Widget>[
GridView.builder(
shrinkWrap: true,
itemCount: _imgObjs.length,
gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 4, mainAxisSpacing: 2, crossAxisSpacing: 2),
itemBuilder: (BuildContext context, int index) {
final image = _imgObjs[index];
return Padding(
padding: const EdgeInsets.all(2),
child: Image.file(File(image.modifiedPath),
height: 80, fit: BoxFit.cover),
);
})
],
),
),
floatingActionButton: FloatingActionButton(
onPressed: () async {
// Get max 5 images
final List<ImageObject>? objects = await Navigator.of(context)
.push(PageRouteBuilder(pageBuilder: (context, animation, __) {
return const ImagePicker(maxCount: 5);
}));
if ((objects?.length ?? 0) > 0) {
setState(() {
_imgObjs = objects!;
});
}
},
child: const Icon(Icons.add),
), // This trailing comma makes auto-formatting nicer for build methods.
);
}
}