@@ -42,12 +42,12 @@ class RTCVideoRenderer {
42
42
int get textureId => _textureId;
43
43
44
44
double get aspectRatio => (_width == 0 || _height == 0 )
45
- ? 1
45
+ ? 1.0
46
46
: (_rotation == 90 || _rotation == 270 )
47
47
? _height / _width
48
48
: _width / _height;
49
49
50
- bool get flipHorizintal => _mirror;
50
+ bool get mirror => _mirror;
51
51
52
52
set mirror (bool mirror) {
53
53
_mirror = mirror;
@@ -56,8 +56,13 @@ class RTCVideoRenderer {
56
56
}
57
57
}
58
58
59
+ RTCVideoViewObjectFit get objectFit => _objectFit;
60
+
59
61
set objectFit (RTCVideoViewObjectFit objectFit) {
60
62
_objectFit = objectFit;
63
+ if (this .onStateChanged != null ) {
64
+ this .onStateChanged ();
65
+ }
61
66
}
62
67
63
68
set srcObject (MediaStream stream) {
@@ -114,6 +119,7 @@ class RTCVideoView extends StatefulWidget {
114
119
class _RTCVideoViewState extends State <RTCVideoView > {
115
120
final RTCVideoRenderer _renderer;
116
121
double _aspectRatio;
122
+ RTCVideoViewObjectFit _objectFit;
117
123
bool _mirror;
118
124
_RTCVideoViewState (this ._renderer);
119
125
@@ -122,7 +128,8 @@ class _RTCVideoViewState extends State<RTCVideoView> {
122
128
super .initState ();
123
129
_setCallbacks ();
124
130
_aspectRatio = _renderer.aspectRatio;
125
- _mirror = _renderer.flipHorizintal;
131
+ _mirror = _renderer.mirror;
132
+ _objectFit = _renderer.objectFit;
126
133
}
127
134
128
135
@override
@@ -135,24 +142,42 @@ class _RTCVideoViewState extends State<RTCVideoView> {
135
142
_renderer.onStateChanged = () {
136
143
setState (() {
137
144
_aspectRatio = _renderer.aspectRatio;
138
- _mirror = _renderer.flipHorizintal;
145
+ _mirror = _renderer.mirror;
146
+ _objectFit = _renderer.objectFit;
139
147
});
140
148
};
141
149
}
142
150
151
+ Widget _buildVideoView (BoxConstraints constraints) {
152
+ return Container (
153
+ width: constraints.maxWidth,
154
+ height: constraints.maxHeight,
155
+ child: FittedBox (
156
+ fit:
157
+ _objectFit == RTCVideoViewObjectFit .RTCVideoViewObjectFitContain
158
+ ? BoxFit .contain
159
+ : BoxFit .cover,
160
+ child: new Center (
161
+ child: new SizedBox (
162
+ width: constraints.maxHeight * _aspectRatio,
163
+ height: constraints.maxHeight,
164
+ child: new Transform (
165
+ transform: Matrix4 .identity ()
166
+ ..rotateY (_mirror ? - pi : 0.0 ),
167
+ alignment: FractionalOffset .center,
168
+ child:
169
+ new Texture (textureId: _renderer._textureId))))));
170
+ }
171
+
143
172
@override
144
173
Widget build (BuildContext context) {
145
<
AEFC
code> - return new Center (
146
- child: (_renderer._textureId == null || _renderer._srcObject == null )
147
- ? new Container ()
148
- : new Transform (
149
- transform: Matrix4 .identity ()
150
- ..setEntry (3 , 2 , 0.001 )
151
- ..rotateX (0.0 )
152
- ..rotateY (_mirror ? - pi : 0.0 ),
153
- alignment: FractionalOffset .center,
154
- child: new AspectRatio (
155
- aspectRatio: _aspectRatio,
156
- child: new Texture (textureId: _renderer._textureId))));
174
+ bool renderVideo =
175
+ (_renderer._textureId != null && _renderer._srcObject != null );
176
+
177
+ return new LayoutBuilder (
178
+ builder: (BuildContext context, BoxConstraints constraints) {
179
+ return new Center (
180
+ child: renderVideo ? _buildVideoView (constraints) : new Container ());
181
+ });
157
182
}
158
183
}
0 commit comments