fixed error on pdf viewer transition

This commit is contained in:
2026-07-23 14:16:33 +02:00
parent 75080a2c49
commit 3493cf8617
4 changed files with 76 additions and 46 deletions
@@ -3,51 +3,16 @@ import 'dart:io';
import 'package:flutter/material.dart';
import 'package:syncfusion_flutter_pdfviewer/pdfviewer.dart';
import '../app_progress_indicator.dart';
import '../route_transition_gate.dart';
/// SfPdfViewer asserts on `localToGlobal` if mounted during the page-push
/// animation. Defer until the route enter animation completes.
class DeferredPdfViewer extends StatefulWidget {
class DeferredPdfViewer extends StatelessWidget {
const DeferredPdfViewer({super.key, required this.path});
final String path;
@override
State<DeferredPdfViewer> createState() => _DeferredPdfViewerState();
}
class _DeferredPdfViewerState extends State<DeferredPdfViewer> {
bool _ready = false;
Animation<double>? _routeAnimation;
@override
void didChangeDependencies() {
super.didChangeDependencies();
if (_ready || _routeAnimation != null) return;
final animation = ModalRoute.of(context)?.animation;
if (animation == null || animation.isCompleted) {
_ready = true;
return;
}
_routeAnimation = animation..addStatusListener(_onAnimationStatus);
}
void _onAnimationStatus(AnimationStatus status) {
if (status == AnimationStatus.completed && mounted) {
setState(() => _ready = true);
}
}
@override
void dispose() {
_routeAnimation?.removeStatusListener(_onAnimationStatus);
super.dispose();
}
@override
Widget build(BuildContext context) {
if (!_ready) {
return const Center(child: AppProgressIndicator.large());
}
return SfPdfViewer.file(File(widget.path));
}
Widget build(BuildContext context) => RouteTransitionGate(
builder: (context) => SfPdfViewer.file(File(path)),
);
}