Aucune description

photo.dart 3.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. library photo;
  2. import 'dart:async';
  3. import 'package:flutter/material.dart';
  4. import 'package:photo/src/entity/options.dart';
  5. import 'package:photo/src/provider/i18n_provider.dart';
  6. import 'package:photo/src/ui/dialog/not_permission_dialog.dart';
  7. import 'package:photo/src/ui/photo_app.dart';
  8. import 'package:photo_manager/photo_manager.dart';
  9. export 'package:photo/src/provider/i18n_provider.dart' show I18NCustomProvider,I18nProvider,CNProvider,ENProvider;
  10. class PhotoPicker {
  11. static PhotoPicker _instance;
  12. PhotoPicker._();
  13. factory PhotoPicker() {
  14. _instance ??= PhotoPicker._();
  15. return _instance;
  16. }
  17. static const String rootRouteName = "photo_picker_image";
  18. /// 没有授予权限的时候,会开启一个dialog去帮助用户去应用设置页面开启权限
  19. /// 确定开启设置页面,取消关闭弹窗
  20. ///
  21. ///
  22. /// 当用户给予权限后
  23. ///
  24. /// 当用户确定时,返回一个图片[ImageEntity]列表
  25. ///
  26. /// 当用户取消时
  27. ///
  28. /// if user not grand permission, then return null and show a dialog to help user open setting.
  29. /// sure is open setting cancel ,cancel to dismiss dialog
  30. ///
  31. /// when user give permission.
  32. ///
  33. /// when user sure , return a [ImageEntity] of [List]
  34. ///
  35. /// when user cancel selected,result is empty list
  36. static Future<List<ImageEntity>> pickImage({
  37. @required BuildContext context,
  38. int rowCount = 4,
  39. int maxSelected = 9,
  40. double padding = 0.5,
  41. double itemRadio = 1.0,
  42. Color themeColor,
  43. Color dividerColor,
  44. Color textColor,
  45. Color disableColor,
  46. I18nProvider provider = I18nProvider.chinese,
  47. }) {
  48. assert(provider != null, "provider must be not null");
  49. assert(context != null, "context must be not null");
  50. themeColor ??= Theme.of(context)?.primaryColor ?? Colors.black;
  51. dividerColor ??= Theme.of(context)?.dividerColor ?? Colors.grey;
  52. disableColor ??= Theme.of(context)?.disabledColor ?? Colors.grey;
  53. textColor ??= Colors.white;
  54. var options = Options(
  55. rowCount: rowCount,
  56. dividerColor: dividerColor,
  57. maxSelected: maxSelected,
  58. itemRadio: itemRadio,
  59. padding: padding,
  60. disableColor: disableColor,
  61. textColor: textColor,
  62. themeColor: themeColor,
  63. );
  64. return PhotoPicker()._pickImage(context, options, provider);
  65. }
  66. Future<List<ImageEntity>> _pickImage(
  67. BuildContext context,
  68. Options options,
  69. I18nProvider provider,
  70. ) async {
  71. var requestPermission = await PhotoManager.requestPermission();
  72. if (requestPermission != true) {
  73. var result = await showDialog(
  74. context: context,
  75. builder: (ctx) => NotPermissionDialog(
  76. provider.getNotPermissionText(options),
  77. ),
  78. );
  79. if (result == true) {
  80. PhotoManager.openSetting();
  81. }
  82. return null;
  83. }
  84. return _openGalleryContentPage(context, options, provider);
  85. }
  86. Future<List<ImageEntity>> _openGalleryContentPage(
  87. BuildContext context, Options options, I18nProvider provider)async{
  88. return Navigator.of(context).push(
  89. MaterialPageRoute(
  90. builder: (ctx) => PhotoApp(
  91. options: options,
  92. provider: provider,
  93. ),
  94. ),
  95. );
  96. }
  97. }