commit | cd7b93532e5cb605a42735e20f1de70fc00adae7 | [log] [tgz] |
---|---|---|
author | stuartmorgan <stuartmorgan@google.com> | Fri Jun 09 20:27:10 2023 -0400 |
committer | GitHub <noreply@github.com> | Sat Jun 10 00:27:10 2023 +0000 |
tree | e1e66ffeda22470b0d00cd003efd7ca027f2ccb4 | |
parent | 6565f17bcd1b116b1141e76893b5f95959178e61 [diff] |
[image_picker] Add desktop support (#3882) (This is the combination PR for overall review.) This adds initial desktop support across all three desktop platforms: - Adds the concept of a camera delegation as discussed in https://github.com/flutter/flutter/issues/102115, and adds a helper base class at the platform interface level for implementations that want to use that approach. (Sharing it simplifies both the platform implementations and the client usage.) - Adds a new app-facing and platform-interface API to check at runtime for support for a given source, to make writing code using `image_picker` in a world of dynamic camera support viable. (In particular this is critical for published packages that use `image_picker`, as they won't know in advance if a client app will have a delegate set up). - Updates the Windows implementation to: - use the new delegation base class - implement the newer `getImageFromSource` API as an opportunistic fix while changing the code (if not implemented, it would fall back to `getImage`) - use new APIs in its example. - Made macOS and Linux implementations that are clones of the Windows approach. They are both slightly simpler however, as MIME type (for Linux) and UTI (for macOS) allow creating generic "image" and "video" filters instead of having to hard-code a file extension list. Since in my opinion this level of support is sufficient to allow basic real-world use of the desktop implementations, due to having a structure in place for handling camera support, this includes endorsing the desktop implementations. It is still the case that desktop does not support image resizing, which isn't ideal, but I don't think we should block on that. It is clearly documented in the README. The desktop implementations are separate packages even though they are mostly the same right now because: - the amount of (non-example) code being duplicated is small, and - it makes it much easier for us to change platform implementations over time; e.g., recent versions of macOS support `PHPicker`, meaning we can later add native code for that to the macOS implementation, with just a fallback to the current `file_selector` wrapper. It's plausible that better native options for Windows and/or Linux may become available in the future as well. Fixes https://github.com/flutter/flutter/issues/102115 Fixes https://github.com/flutter/flutter/issues/102320 Fixes https://github.com/flutter/flutter/issues/85100
This repo is a companion repo to the main flutter repo. It contains the source code for Flutter's first-party packages (i.e., packages developed by the core Flutter team). Check the packages
directory to see all packages.
These packages are also available on pub.
Please file any issues, bugs, or feature requests in the main flutter repo. Issues pertaining to this repository are labeled “package”.
If you wish to contribute a new package to the Flutter ecosystem, please see the documentation for developing packages. You can store your package source code in any GitHub repository (the present repo is only intended for packages developed by the core Flutter team). Once your package is ready you can publish to the pub repository.
If you wish to contribute a change to any of the existing packages in this repo, please review our contribution guide, and send a pull request.
These are the packages hosted in this repository: