Skip to content

Commit 4526f65

Browse files
[web] Correctly read the repetitionCount for images (#162414)
There was a bug in `ResizingCodec` where it returned `frameCount` instead of `repetitionCount` in the `repetitionCount` getter, causing animated images to stop animating even if they were set to loop infinitely. Fixes flutter/flutter#161800 ## Pre-launch Checklist - [x] I read the [Contributor Guide] and followed the process outlined there for submitting PRs. - [x] I read the [Tree Hygiene] wiki page, which explains my responsibilities. - [x] I read and followed the [Flutter Style Guide], including [Features we expect every widget to implement]. - [x] I signed the [CLA]. - [x] I listed at least one issue that this PR fixes in the description above. - [x] I updated/added relevant documentation (doc comments with `///`). - [x] I added new tests to check the change I am making, or this PR is [test-exempt]. - [x] I followed the [breaking change policy] and added [Data Driven Fixes] where supported. - [x] All existing and new tests are passing. If you need help, consider asking for advice on the #hackers-new channel on [Discord]. <!-- Links --> [Contributor Guide]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#overview [Tree Hygiene]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md [test-exempt]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#tests [Flutter Style Guide]: https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md [Features we expect every widget to implement]: https://github.com/flutter/flutter/blob/main/docs/contributing/Style-guide-for-Flutter-repo.md#features-we-expect-every-widget-to-implement [CLA]: https://cla.developers.google.com/ [flutter/tests]: https://github.com/flutter/tests [breaking change policy]: https://github.com/flutter/flutter/blob/main/docs/contributing/Tree-hygiene.md#handling-breaking-changes [Discord]: https://github.com/flutter/flutter/blob/main/docs/contributing/Chat.md [Data Driven Fixes]: https://github.com/flutter/flutter/blob/main/docs/contributing/Data-driven-Fixes.md
1 parent d048c77 commit 4526f65

File tree

2 files changed

+27
-1
lines changed

2 files changed

+27
-1
lines changed

engine/src/flutter/lib/web_ui/lib/src/engine/image_decoder.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -244,7 +244,7 @@ class ResizingCodec implements ui.Codec {
244244
);
245245

246246
@override
247-
int get repetitionCount => delegate.frameCount;
247+
int get repetitionCount => delegate.repetitionCount;
248248
}
249249

250250
BitmapSize? scaledImageSize(int width, int height, int? targetWidth, int? targetHeight) {
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
// Copyright 2013 The Flutter Authors. All rights reserved.
2+
// Use of this source code is governed by a BSD-style license that can be
3+
// found in the LICENSE file.
4+
5+
import 'package:test/bootstrap/browser.dart';
6+
import 'package:test/test.dart';
7+
import 'package:ui/src/engine.dart';
8+
import 'package:ui/ui.dart' as ui;
9+
10+
import '../common/test_initialization.dart';
11+
12+
void main() {
13+
internalBootstrapBrowserTest(() => testMain);
14+
}
15+
16+
Future<void> testMain() async {
17+
setUpUnitTests(emulateTesterEnvironment: false, setUpTestViewDimensions: false);
18+
19+
test('$ResizingCodec gives correct repetition count for GIFs', () async {
20+
final ui.Codec codec = await renderer.instantiateImageCodecFromUrl(
21+
Uri(path: '/test_images/required.gif'),
22+
);
23+
final ui.Codec resizingCodec = ResizingCodec(codec);
24+
expect(resizingCodec.repetitionCount, 0);
25+
});
26+
}

0 commit comments

Comments
 (0)