소스 검색

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
+## 0.1.3
2
+
3
+* Breaking change: `ZefyrImageDelegate.createImageProvider` replaced with
4
+  `ZefyrImageDelegate.buildImage`.
5
+
1
 ## 0.1.2
6
 ## 0.1.2
2
 
7
 
3
 * Fixed analysis warnings.
8
 * Fixed analysis warnings.

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

113
 /// Default image delegate only supports [FileImage]s.
113
 /// Default image delegate only supports [FileImage]s.
114
 class CustomImageDelegate extends ZefyrDefaultImageDelegate {
114
 class CustomImageDelegate extends ZefyrDefaultImageDelegate {
115
   @override
115
   @override
116
-  ImageProvider createImageProvider(String imageSource) {
116
+  Widget buildImage(BuildContext context, String imageSource) {
117
     // We use custom "asset" scheme to distinguish asset images from other files.
117
     // We use custom "asset" scheme to distinguish asset images from other files.
118
     if (imageSource.startsWith('asset://')) {
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
     } else {
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
 import 'editable_box.dart';
14
 import 'editable_box.dart';
15
 
15
 
16
 abstract class ZefyrImageDelegate<S> {
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
   /// Picks an image from specified [source].
20
   /// Picks an image from specified [source].
21
   ///
21
   ///
26
 
26
 
27
 class ZefyrDefaultImageDelegate implements ZefyrImageDelegate<ImageSource> {
27
 class ZefyrDefaultImageDelegate implements ZefyrImageDelegate<ImageSource> {
28
   @override
28
   @override
29
-  ImageProvider createImageProvider(String imageSource) {
29
+  Widget buildImage(BuildContext context, String imageSource) {
30
     final file = new File.fromUri(Uri.parse(imageSource));
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
   @override
35
   @override
51
 }
52
 }
52
 
53
 
53
 class _ZefyrImageState extends State<ZefyrImage> {
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
     EmbedAttribute attribute = widget.node.style.get(NotusAttribute.embed);
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
   @override
60
   @override
92
   Widget build(BuildContext context) {
61
   Widget build(BuildContext context) {
62
+    final image = widget.delegate.buildImage(context, imageSource);
93
     return _EditableImage(
63
     return _EditableImage(
94
-      child: new RawImage(image: _imageInfo?.image),
64
+      child: image,
95
       node: widget.node,
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
 class _EditableImage extends SingleChildRenderObjectWidget {
70
 class _EditableImage extends SingleChildRenderObjectWidget {

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

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