|
|
|
# Photo Search app
|
|
|
|
|
|
|
|
This macOS application enables you to search [Unsplash](https://unsplash.com/)
|
|
|
|
for photographs that interest you. To use it, you need to add an
|
|
|
|
**Access Key** from [Unsplash API](https://unsplash.com/developers) to
|
|
|
|
[unsplash_access_key.dart](lib/unsplash_access_key.dart).
|
|
|
|
|
|
|
|
## A quick tour of the code
|
|
|
|
|
|
|
|
This Flutter project builds a desktop application. It utilises the following
|
|
|
|
desktop specific plugins:
|
|
|
|
|
|
|
|
- [file_chooser] to enable the application user to select where to save a photo
|
|
|
|
from the Unsplash API.
|
|
|
|
- [menubar] for exposing Image Search functionality through the menu bar.
|
|
|
|
- [url_launcher] to open external links.
|
|
|
|
|
|
|
|
The Unsplash API client entry point is in the [Unsplash] class, and is built
|
|
|
|
atop [http], [built_value] and [built_collection] for JSON Rest API access.
|
|
|
|
|
|
|
|
The [DataTreeNode] and widget family, along with the [Split] widget capture
|
|
|
|
desktop file explorer master/detail view idioms.
|
|
|
|
|
|
|
|
## macOS Network and File entitlements
|
|
|
|
|
|
|
|
To access the network, macOS requires applications enable the
|
|
|
|
[com.apple.security.network.client entitlement][macOS-client]. For this
|
|
|
|
sample, this entitlement is required to access the Unsplash API.
|
|
|
|
|
|
|
|
Likewise, to save a Photo to the local file system using the `file_chooser` plugin requires the
|
|
|
|
[com.apple.security.files.user-selected.read-write entitlement][macOS-read-write].
|
|
|
|
|
|
|
|
Please see [macOS Signing and Security][macOS-security] for more detail.
|
|
|
|
|
|
|
|
## Flutter Desktop is not in Flutter Stable Release Channel
|
|
|
|
|
|
|
|
This sample is an initial preview, intended to enable developers to preview what is
|
|
|
|
under development. As such, it is currently only available for use on the `master` channel
|
|
|
|
of Flutter. Please see [Flutter build release channels][flutter_channels] for more detail,
|
|
|
|
and how to switch between Flutter release channels.
|
|
|
|
|
|
|
|
[DataTreeNode]: lib/src/widgets/data_tree.dart
|
|
|
|
[Split]: lib/src/widgets/split.dart
|
|
|
|
[Unsplash]: lib/src/unsplash/unsplash.dart
|
|
|
|
|
|
|
|
[built_collection]: https://pub.dev/packages/built_collection
|
|
|
|
[built_value]: https://pub.dev/packages/built_value
|
|
|
|
[file_chooser]: https://github.com/google/flutter-desktop-embedding/tree/master/plugins/file_chooser
|
|
|
|
[flutter_channels]: https://github.com/flutter/flutter/wiki/Flutter-build-release-channels
|
|
|
|
[http]: https://pub.dev/packages/http
|
|
|
|
[macOS-client]: https://developer.apple.com/documentation/bundleresources/entitlements/com_apple_security_network_client
|
|
|
|
[macOS-read-write]: https://developer.apple.com/documentation/bundleresources/entitlements/com_apple_security_files_user-selected_read-write
|
|
|
|
[macOS-security]: https://github.com/google/flutter-desktop-embedding/blob/master/macOS-Security.md
|
|
|
|
[menubar]: https://github.com/google/flutter-desktop-embedding/tree/master/plugins/menubar
|
|
|
|
[url_launcher]: https://pub.dev/packages/url_launcher
|