flutter_iiif 0.1.1+1 copy "flutter_iiif: ^0.1.1+1" to clipboard
flutter_iiif: ^0.1.1+1 copied to clipboard

A flutter implementation for zoomable high-resolustion images using the IIIF standard

example/lib/main.dart

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,
              ))
            ])
          ],
        ),
      ]),
    );
  }
}
0
likes
30
pub points
0%
popularity

Publisher

unverified uploader

A flutter implementation for zoomable high-resolustion images using the IIIF standard

Homepage

License

MIT (LICENSE)

Dependencies

flutter, http, vector_math

More

Packages that depend on flutter_iiif