ソースを参照

update pathList

Caijinglong 6 年 前
コミット
118958a28d
共有3 個のファイルを変更した52 個の追加9 個の削除を含む
  1. 18
    5
      lib/photo.dart
  2. 23
    1
      lib/src/ui/page/photo_main_page.dart
  3. 11
    3
      lib/src/ui/photo_app.dart

+ 18
- 5
lib/photo.dart ファイルの表示

3
 import 'dart:async';
3
 import 'dart:async';
4
 
4
 
5
 import 'package:flutter/material.dart';
5
 import 'package:flutter/material.dart';
6
+
7
+import 'package:photo_manager/photo_manager.dart';
8
+
6
 import 'package:photo/src/delegate/badge_delegate.dart';
9
 import 'package:photo/src/delegate/badge_delegate.dart';
7
 import 'package:photo/src/delegate/checkbox_builder_delegate.dart';
10
 import 'package:photo/src/delegate/checkbox_builder_delegate.dart';
8
 import 'package:photo/src/delegate/loading_delegate.dart';
11
 import 'package:photo/src/delegate/loading_delegate.dart';
11
 import 'package:photo/src/provider/i18n_provider.dart';
14
 import 'package:photo/src/provider/i18n_provider.dart';
12
 import 'package:photo/src/ui/dialog/not_permission_dialog.dart';
15
 import 'package:photo/src/ui/dialog/not_permission_dialog.dart';
13
 import 'package:photo/src/ui/photo_app.dart';
16
 import 'package:photo/src/ui/photo_app.dart';
14
-import 'package:photo_manager/photo_manager.dart';
15
-
16
 export 'package:photo/src/delegate/checkbox_builder_delegate.dart';
17
 export 'package:photo/src/delegate/checkbox_builder_delegate.dart';
17
 export 'package:photo/src/delegate/loading_delegate.dart';
18
 export 'package:photo/src/delegate/loading_delegate.dart';
18
 export 'package:photo/src/delegate/sort_delegate.dart';
19
 export 'package:photo/src/delegate/sort_delegate.dart';
42
   ///   当用户确定时,返回一个图片[AssetEntity]列表
43
   ///   当用户确定时,返回一个图片[AssetEntity]列表
43
   ///
44
   ///
44
   ///   当用户取消时返回一个空数组
45
   ///   当用户取消时返回一个空数组
45
-  ///
46
+  /// 
47
+  ///   [photoList] 一旦设置 则 [pickType]参数无效
48
+  /// 
46
   /// 关于参数可以查看readme文档介绍
49
   /// 关于参数可以查看readme文档介绍
47
   ///
50
   ///
48
   /// if user not grand permission, then return null and show a dialog to help user open setting.
51
   /// if user not grand permission, then return null and show a dialog to help user open setting.
53
   ///   when user sure , return a [AssetEntity] of [List]
56
   ///   when user sure , return a [AssetEntity] of [List]
54
   ///
57
   ///
55
   ///   when user cancel selected,result is empty list
58
   ///   when user cancel selected,result is empty list
59
+  /// 
60
+  ///   when [photoList] is not null , [pickType] invalid
56
   ///
61
   ///
57
   /// params see readme.md
62
   /// params see readme.md
58
   static Future<List<AssetEntity>> pickAsset({
63
   static Future<List<AssetEntity>> pickAsset({
72
     LoadingDelegate loadingDelegate,
77
     LoadingDelegate loadingDelegate,
73
     PickType pickType = PickType.all,
78
     PickType pickType = PickType.all,
74
     BadgeDelegate badgeDelegate = const DefaultBadgeDelegate(),
79
     BadgeDelegate badgeDelegate = const DefaultBadgeDelegate(),
80
+    List<AssetPathEntity> photoList,
75
   }) {
81
   }) {
76
     assert(provider != null, "provider must be not null");
82
     assert(provider != null, "provider must be not null");
77
     assert(context != null, "context must be not null");
83
     assert(context != null, "context must be not null");
108
       context,
114
       context,
109
       options,
115
       options,
110
       provider,
116
       provider,
117
+      photoList,
111
     );
118
     );
112
   }
119
   }
113
 
120
 
115
     BuildContext context,
122
     BuildContext context,
116
     Options options,
123
     Options options,
117
     I18nProvider provider,
124
     I18nProvider provider,
125
+    List<AssetPathEntity> photoList,
118
   ) async {
126
   ) async {
119
     var requestPermission = await PhotoManager.requestPermission();
127
     var requestPermission = await PhotoManager.requestPermission();
120
     if (requestPermission != true) {
128
     if (requestPermission != true) {
130
       return null;
138
       return null;
131
     }
139
     }
132
 
140
 
133
-    return _openGalleryContentPage(context, options, provider);
141
+    return _openGalleryContentPage(context, options, provider, photoList);
134
   }
142
   }
135
 
143
 
136
   Future<List<AssetEntity>> _openGalleryContentPage(
144
   Future<List<AssetEntity>> _openGalleryContentPage(
137
-      BuildContext context, Options options, I18nProvider provider) async {
145
+    BuildContext context,
146
+    Options options,
147
+    I18nProvider provider,
148
+    List<AssetPathEntity> photoList,
149
+  ) async {
138
     return Navigator.of(context).push(
150
     return Navigator.of(context).push(
139
       MaterialPageRoute(
151
       MaterialPageRoute(
140
         builder: (ctx) => PhotoApp(
152
         builder: (ctx) => PhotoApp(
141
               options: options,
153
               options: options,
142
               provider: provider,
154
               provider: provider,
155
+              photoList: photoList,
143
             ),
156
             ),
144
       ),
157
       ),
145
     );
158
     );

+ 23
- 1
lib/src/ui/page/photo_main_page.dart ファイルの表示

17
 class PhotoMainPage extends StatefulWidget {
17
 class PhotoMainPage extends StatefulWidget {
18
   final ValueChanged<List<AssetEntity>> onClose;
18
   final ValueChanged<List<AssetEntity>> onClose;
19
   final Options options;
19
   final Options options;
20
+  final List<AssetPathEntity> photoList;
20
 
21
 
21
   const PhotoMainPage({
22
   const PhotoMainPage({
22
     Key key,
23
     Key key,
23
     this.onClose,
24
     this.onClose,
24
     this.options,
25
     this.options,
26
+    this.photoList,
25
   }) : super(key: key);
27
   }) : super(key: key);
26
 
28
 
27
   @override
29
   @override
155
     );
157
     );
156
   }
158
   }
157
 
159
 
158
-  Future<void> _refreshList() async {
160
+  void _refreshList() {
161
+    if (widget.photoList != null && widget.photoList.isNotEmpty) {
162
+      _refreshListFromWidget();
163
+      return;
164
+    }
165
+
166
+    _refreshListFromGallery();
167
+  }
168
+
169
+  Future<void> _refreshListFromWidget() async {
170
+    galleryPathList.clear();
171
+    galleryPathList.addAll(widget.photoList);
172
+    this.list.clear();
173
+    var assetList = await galleryPathList[0].assetList;
174
+    this.list.addAll(assetList);
175
+    setState(() {
176
+      _isInit = true;
177
+    });
178
+  }
179
+
180
+  Future<void> _refreshListFromGallery() async {
159
     List<AssetPathEntity> pathList;
181
     List<AssetPathEntity> pathList;
160
     switch (options.pickType) {
182
     switch (options.pickType) {
161
       case PickType.onlyImage:
183
       case PickType.onlyImage:

+ 11
- 3
lib/src/ui/photo_app.dart ファイルの表示

1
 import 'package:flutter/material.dart';
1
 import 'package:flutter/material.dart';
2
+
3
+import 'package:photo_manager/photo_manager.dart';
4
+
2
 import 'package:photo/src/entity/options.dart';
5
 import 'package:photo/src/entity/options.dart';
3
 import 'package:photo/src/provider/config_provider.dart';
6
 import 'package:photo/src/provider/config_provider.dart';
4
 import 'package:photo/src/provider/i18n_provider.dart';
7
 import 'package:photo/src/provider/i18n_provider.dart';
5
 import 'package:photo/src/ui/page/photo_main_page.dart';
8
 import 'package:photo/src/ui/page/photo_main_page.dart';
6
-import 'package:photo_manager/photo_manager.dart';
7
 
9
 
8
 class PhotoApp extends StatelessWidget {
10
 class PhotoApp extends StatelessWidget {
9
   final Options options;
11
   final Options options;
10
   final I18nProvider provider;
12
   final I18nProvider provider;
11
-
12
-  const PhotoApp({Key key, this.options, this.provider}) : super(key: key);
13
+  final List<AssetPathEntity> photoList;
14
+  const PhotoApp({
15
+    Key key,
16
+    this.options,
17
+    this.provider,
18
+    this.photoList,
19
+  }) : super(key: key);
13
 
20
 
14
   @override
21
   @override
15
   Widget build(BuildContext context) {
22
   Widget build(BuildContext context) {
21
           Navigator.pop(context, value);
28
           Navigator.pop(context, value);
22
         },
29
         },
23
         options: options,
30
         options: options,
31
+        photoList: photoList,
24
       ),
32
       ),
25
     );
33
     );
26
   }
34
   }