flutter_iiif 0.1.1+1 flutter_iiif: ^0.1.1+1 copied to clipboard
A flutter implementation for zoomable high-resolustion images using the IIIF standard
import 'package:flutter/material.dart';
import 'package:flutter_iiif/flutter_iiif.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
title: 'Flutter IIIFImage Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: IIIFDemo(),
);
}
}
class IIIFDemo extends StatefulWidget {
@override
State<StatefulWidget> createState() {
return _IIIFDemoState();
}
}
class _IIIFDemoState extends State {
/// Some info for testing
/*final String server = 'http://mfn0006.naturkundemuseum-berlin.de:3200/api/v1/iiif/';
final List<String> assets = ['3745679'];*/
/*final String server = 'https://iiif.bodleian.ox.ac.uk/iiif/image/';
final List<String> assets = ['c0c15feb-0406-4cb5-9e0e-b4118eda2c90'];*/
final String server = 'https://download.mediasphere.museumfuernaturkunde.berlin/iiif/';
final List<String> assets = ['MFNB_Col_Buprestidae_Julodinae_D015_pyr.tif', 'ZMB_Mol_40_10_2_2_pyr.tif', 'MB_ED_2151_pyr.tif'];
final List<String> qualities = ['default.jpg', 'gray.jpg'];
final List<double> tileSizes = [128.0, 256.0, 512.0];
/// POPUP Menus
List<PopupMenuItem<String>> imagePopupItems = [];
List<PopupMenuItem<String>> qualityPopupItems = [];
List<PopupMenuItem<double>> tileSizePopupItems = [];
IIIFImage iiif;
IIIFImageSettings settings;
/// Demo State Constructor
_IIIFDemoState() {
settings = IIIFImageSettings(server: server, assetID: assets[0], quality: qualities[0]);
iiif = IIIFImage(settings: settings);
/// create image picker
assets.forEach((String str) {
imagePopupItems.add(PopupMenuItem<String>(
value: str,
child: Text(
'image: ${imagePopupItems.length + 1}',
overflow: TextOverflow.ellipsis,
),
));
});
/// create qualities picker
qualities.forEach((String str) {
qualityPopupItems.add(PopupMenuItem<String>(
value: str,
child: Text(
str,
overflow: TextOverflow.ellipsis,
),
));
});
/// create tileSize picker
tileSizes.forEach((double i) {
tileSizePopupItems.add(PopupMenuItem<double>(
value: i,
child: Text(
'$i x $i',
overflow: TextOverflow.ellipsis,
),
));
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: Stack(children: [
/// The Image
iiif,
/// Interaction menu
Column(
mainAxisAlignment: MainAxisAlignment.end,
children: <Widget>[
/// choose image
Row(children: [
PopupMenuButton(
icon: Icon(Icons.image),
onSelected: (String str) {
setState(() {
settings.assetID = str;
settings.notifier.notifyListeners();
});
},
itemBuilder: (BuildContext context) => imagePopupItems),
Expanded(
child: Text(
settings.assetID,
overflow: TextOverflow.ellipsis,
))
]),
/// choose quality
Row(children: [
PopupMenuButton(
icon: Icon(Icons.filter),
onSelected: (String str) {
setState(() {
settings.quality = str;
settings.notifier.notifyListeners();
});
},
itemBuilder: (BuildContext context) => qualityPopupItems),
Expanded(
child: Text(
settings.quality,
overflow: TextOverflow.ellipsis,
))
]),
// choose quality
Row(children: [
PopupMenuButton(
icon: Icon(Icons.grid_on),
onSelected: (double n) {
setState(() {
settings.tileSize = n;
settings.notifier.notifyListeners();
});
},
itemBuilder: (BuildContext context) => tileSizePopupItems),
Expanded(
child: Text(
'${settings.tileSize} x ${settings.tileSize}',
overflow: TextOverflow.ellipsis,
))
])
],
),
]),
);
}
}