{"id":15497995,"url":"https://github.com/rodydavis/media_picker","last_synced_at":"2025-04-22T22:17:00.929Z","repository":{"id":101928790,"uuid":"132610665","full_name":"rodydavis/media_picker","owner":"rodydavis","description":"A Flutter Plugin for Selecting and Taking New Photos and Videos.","archived":false,"fork":false,"pushed_at":"2019-08-16T02:19:39.000Z","size":266,"stargazers_count":28,"open_issues_count":3,"forks_count":9,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-04-22T22:16:48.871Z","etag":null,"topics":["android","camera","flutter","flutter-plugin","ios","iphone","photos","videos"],"latest_commit_sha":null,"homepage":"https://github.com/AppleEducate/plugins","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/rodydavis.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2018-05-08T13:09:33.000Z","updated_at":"2023-04-15T21:27:43.000Z","dependencies_parsed_at":null,"dependency_job_id":"991ef8e5-2ca2-4958-84e6-d8c124c36c53","html_url":"https://github.com/rodydavis/media_picker","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rodydavis%2Fmedia_picker","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rodydavis%2Fmedia_picker/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rodydavis%2Fmedia_picker/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rodydavis%2Fmedia_picker/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rodydavis","download_url":"https://codeload.github.com/rodydavis/media_picker/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":250331819,"owners_count":21413103,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["android","camera","flutter","flutter-plugin","ios","iphone","photos","videos"],"created_at":"2024-10-02T08:41:38.648Z","updated_at":"2025-04-22T22:17:00.865Z","avatar_url":"https://github.com/rodydavis.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# media_picker\n![alt text](https://github.com/AppleEducate/media_picker/blob/master/screenshots/Screenshot_20180510-093643.png)\n\n## Description\nFlutter Plugin for Capturing and Selecting Photos and Videos.\n\n## Installing\n\n```\nmedia_picker:\n    git:\n      url: git://github.com/AppleEducate/media_picker\n```\n## Import\n```\nimport 'package:media_picker/media_picker.dart';\n```\n\n## Example\n\n```\n\nimport 'dart:async';\nimport 'dart:io';\nimport 'package:flutter/material.dart';\nimport 'package:media_picker/media_picker.dart';\nimport 'package:video_player/video_player.dart';\n\nvoid main() {\n  runApp(new MyApp());\n}\n\nclass MyApp extends StatelessWidget {\n  @override\n  Widget build(BuildContext context) {\n    return new MaterialApp(\n      title: 'Media Picker Demo',\n      home: new MyHomePage(title: 'Media Picker Example'),\n    );\n  }\n}\n\nclass MyHomePage extends StatefulWidget {\n  MyHomePage({Key key, this.title}) : super(key: key);\n\n  final String title;\n\n  @override\n  _MyHomePageState createState() =\u003e new _MyHomePageState();\n}\n\nclass _MyHomePageState extends State\u003cMyHomePage\u003e {\n  Future\u003cFile\u003e _mediaFile;\n  bool isVideo = false;\n  VideoPlayerController _controller;\n  VoidCallback listener;\n\n  void _onImageButtonPressed(ImageSource source) {\n    setState(() {\n      if (_controller != null) {\n        _controller.setVolume(0.0);\n        _controller.removeListener(listener);\n      }\n      if (isVideo) {\n        _mediaFile = MediaPicker.pickVideo(source: source).then((onValue) {\n          _controller = VideoPlayerController.file(onValue)\n            ..addListener(listener)\n            ..setVolume(1.0)\n            ..initialize()\n            ..setLooping(true)\n            ..play();\n          setState(() {});\n        });\n      } else {\n        _mediaFile = MediaPicker.pickImage(source: source);\n      }\n    });\n  }\n\n  @override\n  void deactivate() {\n    _controller.setVolume(0.0);\n    _controller.removeListener(listener);\n    super.deactivate();\n  }\n\n  @override\n  void dispose() {\n    _controller.dispose();\n    super.dispose();\n  }\n\n  @override\n  void initState() {\n    super.initState();\n    listener = () {\n      setState(() {});\n    };\n  }\n\n  @override\n  Widget build(BuildContext context) {\n    Widget _previewImage = new FutureBuilder\u003cFile\u003e(\n      future: _mediaFile,\n      builder: (BuildContext context, AsyncSnapshot\u003cFile\u003e snapshot) {\n        if (snapshot.connectionState == ConnectionState.done \u0026\u0026\n            snapshot.data != null) {\n          return new Image.file(snapshot.data);\n        } else if (snapshot.error != null) {\n          return const Text('Error picking image.');\n        } else {\n          return const Text('You have not yet picked an image.');\n        }\n      },\n    );\n\n    return new Scaffold(\n      appBar: new AppBar(\n        title: const Text('Media Picker Example'),\n      ),\n      body: new Center(\n        child: isVideo\n            ? new Padding(\n                padding: const EdgeInsets.all(10.0),\n                child: new AspectRatio(\n                  aspectRatio: 1280 / 720,\n                  child: (_controller != null\n                      ? VideoPlayer(\n                          _controller,\n                        )\n                      : Container()),\n                ),\n              )\n            : _previewImage,\n      ),\n      floatingActionButton: new Column(\n        mainAxisAlignment: MainAxisAlignment.end,\n        children: \u003cWidget\u003e[\n          new FloatingActionButton(\n            onPressed: () {\n              isVideo = false;\n              _onImageButtonPressed(ImageSource.gallery);\n            },\n            tooltip: 'Pick Image from gallery',\n            child: const Icon(Icons.photo_library),\n          ),\n          new Padding(\n            padding: const EdgeInsets.only(top: 16.0),\n            child: new FloatingActionButton(\n              onPressed: () {\n                isVideo = false;\n                _onImageButtonPressed(ImageSource.camera);\n              },\n              tooltip: 'Take a Photo',\n              child: const Icon(Icons.camera_alt),\n            ),\n          ),\n          new Padding(\n            padding: const EdgeInsets.only(top: 16.0),\n            child: new FloatingActionButton(\n              backgroundColor: Colors.red,\n              onPressed: () {\n                isVideo = true;\n                _onImageButtonPressed(ImageSource.gallery);\n              },\n              tooltip: 'Pick Video from gallery',\n              child: const Icon(Icons.video_library),\n            ),\n          ),\n          new Padding(\n            padding: const EdgeInsets.only(top: 16.0),\n            child: new FloatingActionButton(\n              backgroundColor: Colors.red,\n              onPressed: () {\n                isVideo = true;\n                _onImageButtonPressed(ImageSource.camera);\n              },\n              tooltip: 'Take a Video',\n              child: const Icon(Icons.videocam),\n            ),\n          ),\n        ],\n      ),\n    );\n  }\n}\n\n\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frodydavis%2Fmedia_picker","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frodydavis%2Fmedia_picker","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frodydavis%2Fmedia_picker/lists"}