Skip to content

Commit

Permalink
⚡️ Be able to update items builder page (fluttercandies#417)
Browse files Browse the repository at this point in the history
  • Loading branch information
AlexV525 authored and JXWeiJun committed Jul 23, 2023
1 parent cc3da29 commit bc17019
Show file tree
Hide file tree
Showing 5 changed files with 77 additions and 12 deletions.
7 changes: 6 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,12 @@ that can be found in the LICENSE file. -->
### New features

- Sync all UI details from WeChat 8.3.x. (#458)
- Fix semantics interactions for videos preview. (#458)
- Add Turkish language text delegate. (#331).

### Fixes

- Fix semantics interactions for video preview. (#458)
- Be able to update the items builder page. (#417)

## 8.5.0

Expand Down
39 changes: 28 additions & 11 deletions lib/src/widget/builder/audio_page_builder.dart
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,8 @@ class _AudioPageBuilderState extends State<AudioPageBuilder> {

/// Create a [VideoPlayerController] instance for the page builder state.
/// 创建一个 [VideoPlayerController] 的实例
late final VideoPlayerController _controller;
VideoPlayerController get controller => _controller!;
VideoPlayerController? _controller;

/// Whether the audio loaded.
/// 音频是否已经加载完成
Expand All @@ -44,26 +45,42 @@ class _AudioPageBuilderState extends State<AudioPageBuilder> {

/// Whether the controller is playing.
/// 播放控制器是否在播放
bool get isControllerPlaying => _controller.value.isPlaying;
bool get isControllerPlaying => _controller?.value.isPlaying == true;

/// Duration of the audio.
/// 音频的时长
late final Duration assetDuration;
Duration assetDuration = Duration.zero;

@override
void initState() {
super.initState();
openAudioFile();
}

@override
void didUpdateWidget(AudioPageBuilder oldWidget) {
super.didUpdateWidget(oldWidget);
if (widget.asset != oldWidget.asset) {
_controller
?..removeListener(audioPlayerListener)
..pause()
..dispose();
isLoaded = false;
isPlaying = false;
assetDuration = Duration.zero;
openAudioFile();
}
}

@override
void dispose() {
/// Stop and dispose player instance to stop playing
/// when dispose (e.g. page switched).
/// 状态销毁时停止并销毁实例(例如页面切换时)
_controller.pause();
_controller.removeListener(audioPlayerListener);
_controller.dispose();
_controller
?..removeListener(audioPlayerListener)
..pause()
..dispose();
super.dispose();
}

Expand All @@ -74,8 +91,8 @@ class _AudioPageBuilderState extends State<AudioPageBuilder> {
final String? url = await widget.asset.getMediaUrl();
assetDuration = Duration(seconds: widget.asset.duration);
_controller = VideoPlayerController.networkUrl(Uri.parse(url!));
await _controller.initialize();
_controller.addListener(audioPlayerListener);
await controller.initialize();
controller.addListener(audioPlayerListener);
} catch (e) {
realDebugPrint('Error when opening audio file: $e');
} finally {
Expand All @@ -97,14 +114,14 @@ class _AudioPageBuilderState extends State<AudioPageBuilder> {
}

/// Add the current position into the stream.
durationStreamController.add(_controller.value.position);
durationStreamController.add(controller.value.position);
}

void playButtonCallback() {
if (isPlaying) {
_controller.pause();
controller.pause();
} else {
_controller.play();
controller.play();
}
}

Expand Down
14 changes: 14 additions & 0 deletions lib/src/widget/builder/image_page_builder.dart
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,19 @@ class _ImagePageBuilderState extends State<ImagePageBuilder> {

bool get _isLivePhoto => widget.asset.isLivePhoto;

@override
void didUpdateWidget(ImagePageBuilder oldWidget) {
super.didUpdateWidget(oldWidget);
if (widget.asset != oldWidget.asset ||
widget.previewThumbnailSize != oldWidget.previewThumbnailSize) {
_isLocallyAvailable = false;
_controller
?..pause()
..dispose();
_controller = null;
}
}

@override
void dispose() {
_controller?.dispose();
Expand Down Expand Up @@ -153,6 +166,7 @@ class _ImagePageBuilderState extends State<ImagePageBuilder> {
@override
Widget build(BuildContext context) {
return LocallyAvailableBuilder(
key: ValueKey<String>(widget.asset.id),
asset: widget.asset,
isOriginal: _isOriginal,
builder: (BuildContext context, AssetEntity asset) {
Expand Down
11 changes: 11 additions & 0 deletions lib/src/widget/builder/locally_available_builder.dart
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,17 @@ class _LocallyAvailableBuilderState extends State<LocallyAvailableBuilder> {
_checkLocallyAvailable();
}

@override
void didUpdateWidget(LocallyAvailableBuilder oldWidget) {
super.didUpdateWidget(oldWidget);
if (widget.asset != oldWidget.asset ||
widget.isOriginal != oldWidget.isOriginal) {
_isLocallyAvailable = false;
_progressHandler = null;
_checkLocallyAvailable();
}
}

Future<void> _checkLocallyAvailable() async {
_isLocallyAvailable = await widget.asset.isLocallyAvailable(
isOrigin: widget.isOriginal,
Expand Down
18 changes: 18 additions & 0 deletions lib/src/widget/builder/video_page_builder.dart
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,23 @@ class _VideoPageBuilderState extends State<VideoPageBuilder> {
bool _isInitializing = false;
bool _isLocallyAvailable = false;

@override
void didUpdateWidget(VideoPageBuilder oldWidget) {
super.didUpdateWidget(oldWidget);
if (widget.asset != oldWidget.asset) {
_controller
?..removeListener(videoPlayerListener)
..pause()
..dispose();
_controller = null;
hasLoaded = false;
hasErrorWhenInitializing = false;
isPlaying.value = false;
_isInitializing = false;
_isLocallyAvailable = false;
}
}

@override
void dispose() {
/// Remove listener from the controller and dispose it when widget dispose.
Expand Down Expand Up @@ -194,6 +211,7 @@ class _VideoPageBuilderState extends State<VideoPageBuilder> {
@override
Widget build(BuildContext context) {
return LocallyAvailableBuilder(
key: ValueKey<String>(widget.asset.id),
asset: widget.asset,
builder: (BuildContext context, AssetEntity asset) {
if (hasErrorWhenInitializing) {
Expand Down

0 comments on commit bc17019

Please sign in to comment.