media_library 0.0.1 media_library: ^0.0.1 copied to clipboard
Easy, flexible API for querying the media library on a device.
import 'dart:async';
import 'dart:io' show Platform;
import 'dart:typed_data';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:permission_handler/permission_handler.dart';
import 'package:media_library/media_library.dart';
void main() => runApp(App());
class App extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: const Text('Media Library example app'),
),
body: Center(
child: const FirstImageResult(),
),
),
);
}
}
class FirstImageResult extends StatefulWidget {
const FirstImageResult();
@override
_FirstImageResultState createState() => _FirstImageResultState();
}
class _FirstImageResultState extends State<FirstImageResult> {
String _queryResult = 'Loading...';
ImageMedia _image;
@override
void initState() {
super.initState();
initPlatformState();
}
Future<void> initPlatformState() async {
var handler = PermissionHandler();
var group = Platform.isIOS ? PermissionGroup.photos : PermissionGroup.storage;
var status = await handler.checkPermissionStatus(group);
if (status != PermissionStatus.granted) {
status = (await handler.requestPermissions([group]))[group];
}
if (status == PermissionStatus.granted) {
await _getFirstImage();
}
else {
_update('Could not get permission to list images');
}
}
Future<void> _getFirstImage() async {
try {
final first = (await MediaLibrary.images().get()).first;
final result = first == null ? 'No images found' : "First image: ${first.id}";
_update(result, first);
} on PlatformException {
_update('Unable to load images');
}
}
void _update(String text, [ImageMedia image]) {
if (!mounted) return;
setState(() {
_queryResult = text;
_image = image;
});
}
@override
Widget build(BuildContext context) {
final children = <Widget>[
Text(_queryResult),
];
if (_image != null) children.add(FutureBuilder<Uint8List>(
future: _image.load(),
builder: (context, snapshot) {
if (snapshot.hasData) return Image.memory(snapshot.data, fit: BoxFit.cover);
return Text('Unable to load image');
},
));
return ListView(
children: children,
);
}
}