소스 검색

Replaced createImageProvider with buildImage in ZefyrImageDelegate

Anatoly Pulyaevskiy 6 년 전
부모
커밋
3c49d8f56e
4개의 변경된 파일19개의 추가작업 그리고 58개의 파일을 삭제
  1. 5
    0
      packages/zefyr/CHANGELOG.md
  2. 4
    3
      packages/zefyr/example/lib/main.dart
  3. 9
    54
      packages/zefyr/lib/src/widgets/image.dart
  4. 1
    1
      packages/zefyr/pubspec.yaml

+ 5
- 0
packages/zefyr/CHANGELOG.md 파일 보기

@@ -1,3 +1,8 @@
1
+## 0.1.3
2
+
3
+* Breaking change: `ZefyrImageDelegate.createImageProvider` replaced with
4
+  `ZefyrImageDelegate.buildImage`.
5
+
1 6
 ## 0.1.2
2 7
 
3 8
 * Fixed analysis warnings.

+ 4
- 3
packages/zefyr/example/lib/main.dart 파일 보기

@@ -113,12 +113,13 @@ class _MyHomePageState extends State<MyHomePage> {
113 113
 /// Default image delegate only supports [FileImage]s.
114 114
 class CustomImageDelegate extends ZefyrDefaultImageDelegate {
115 115
   @override
116
-  ImageProvider createImageProvider(String imageSource) {
116
+  Widget buildImage(BuildContext context, String imageSource) {
117 117
     // We use custom "asset" scheme to distinguish asset images from other files.
118 118
     if (imageSource.startsWith('asset://')) {
119
-      return new AssetImage(imageSource.replaceFirst('asset://', ''));
119
+      final asset = new AssetImage(imageSource.replaceFirst('asset://', ''));
120
+      return new Image(image: asset);
120 121
     } else {
121
-      return super.createImageProvider(imageSource);
122
+      return super.buildImage(context, imageSource);
122 123
     }
123 124
   }
124 125
 }

+ 9
- 54
packages/zefyr/lib/src/widgets/image.dart 파일 보기

@@ -14,8 +14,8 @@ import 'package:image_picker/image_picker.dart';
14 14
 import 'editable_box.dart';
15 15
 
16 16
 abstract class ZefyrImageDelegate<S> {
17
-  /// Creates [ImageProvider] for specified [imageSource].
18
-  ImageProvider createImageProvider(String imageSource);
17
+  /// Builds image widget for specified [imageSource] and [context].
18
+  Widget buildImage(BuildContext context, String imageSource);
19 19
 
20 20
   /// Picks an image from specified [source].
21 21
   ///
@@ -26,9 +26,10 @@ abstract class ZefyrImageDelegate<S> {
26 26
 
27 27
 class ZefyrDefaultImageDelegate implements ZefyrImageDelegate<ImageSource> {
28 28
   @override
29
-  ImageProvider createImageProvider(String imageSource) {
29
+  Widget buildImage(BuildContext context, String imageSource) {
30 30
     final file = new File.fromUri(Uri.parse(imageSource));
31
-    return new FileImage(file);
31
+    final image = new FileImage(file);
32
+    return new Image(image: image);
32 33
   }
33 34
 
34 35
   @override
@@ -51,65 +52,19 @@ class ZefyrImage extends StatefulWidget {
51 52
 }
52 53
 
53 54
 class _ZefyrImageState extends State<ZefyrImage> {
54
-  ImageProvider _provider;
55
-  ImageStream _imageStream;
56
-  ImageInfo _imageInfo;
57
-
58
-  @override
59
-  void initState() {
60
-    super.initState();
55
+  String get imageSource {
61 56
     EmbedAttribute attribute = widget.node.style.get(NotusAttribute.embed);
62
-    final source = attribute.value['source'];
63
-    _provider = widget.delegate.createImageProvider(source);
64
-  }
65
-
66
-  @override
67
-  void didChangeDependencies() {
68
-    super.didChangeDependencies();
69
-    _getImage();
70
-  }
71
-
72
-  @override
73
-  void didUpdateWidget(ZefyrImage oldWidget) {
74
-    super.didUpdateWidget(oldWidget);
75
-    EmbedAttribute oldStyle = oldWidget.node.style.get(NotusAttribute.embed);
76
-    final oldSource = oldStyle.value['source'];
77
-    EmbedAttribute style = widget.node.style.get(NotusAttribute.embed);
78
-    final source = style.value['source'];
79
-    if (oldSource != source || oldWidget.delegate != widget.delegate) {
80
-      _provider = widget.delegate.createImageProvider(source);
81
-      _getImage();
82
-    }
83
-  }
84
-
85
-  @override
86
-  void dispose() {
87
-    _imageStream.removeListener(_updateImage);
88
-    super.dispose();
57
+    return attribute.value['source'];
89 58
   }
90 59
 
91 60
   @override
92 61
   Widget build(BuildContext context) {
62
+    final image = widget.delegate.buildImage(context, imageSource);
93 63
     return _EditableImage(
94
-      child: new RawImage(image: _imageInfo?.image),
64
+      child: image,
95 65
       node: widget.node,
96 66
     );
97 67
   }
98
-
99
-  void _getImage() {
100
-    final oldImageStream = _imageStream;
101
-    _imageStream = _provider.resolve(createLocalImageConfiguration(context));
102
-    if (_imageStream.key != oldImageStream?.key) {
103
-      oldImageStream?.removeListener(_updateImage);
104
-      _imageStream.addListener(_updateImage);
105
-    }
106
-  }
107
-
108
-  void _updateImage(ImageInfo imageInfo, bool synchronousCall) {
109
-    setState(() {
110
-      _imageInfo = imageInfo;
111
-    });
112
-  }
113 68
 }
114 69
 
115 70
 class _EditableImage extends SingleChildRenderObjectWidget {

+ 1
- 1
packages/zefyr/pubspec.yaml 파일 보기

@@ -1,6 +1,6 @@
1 1
 name: zefyr
2 2
 description: Clean, minimalistic and collaboration-ready rich text editor for Flutter.
3
-version: 0.1.2
3
+version: 0.1.3
4 4
 author: Anatoly Pulyaevskiy <anatoly.pulyaevskiy@gmail.com>
5 5
 homepage: https://github.com/memspace/zefyr
6 6