viewer: stabilized widget tree for top overlay when switching from single to multi entry
This commit is contained in:
parent
2c5451776a
commit
7e11a397c6
2 changed files with 63 additions and 86 deletions
|
@ -3,7 +3,6 @@ import 'package:aves/model/settings/settings.dart';
|
|||
import 'package:aves/theme/themes.dart';
|
||||
import 'package:aves/widgets/common/fx/blurred.dart';
|
||||
import 'package:aves/widgets/viewer/multipage/conductor.dart';
|
||||
import 'package:aves/widgets/viewer/multipage/controller.dart';
|
||||
import 'package:aves/widgets/viewer/overlay/details.dart';
|
||||
import 'package:aves/widgets/viewer/overlay/minimap.dart';
|
||||
import 'package:aves/widgets/viewer/page_entry_builder.dart';
|
||||
|
@ -32,32 +31,10 @@ class ViewerTopOverlay extends StatelessWidget {
|
|||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
late Widget child;
|
||||
|
||||
if (mainEntry.isMultiPage) {
|
||||
final multiPageController = context.read<MultiPageConductor>().getController(mainEntry);
|
||||
child = PageEntryBuilder(
|
||||
final multiPageController = mainEntry.isMultiPage ? context.read<MultiPageConductor>().getController(mainEntry) : null;
|
||||
return PageEntryBuilder(
|
||||
multiPageController: multiPageController,
|
||||
builder: (pageEntry) => _buildOverlay(
|
||||
context,
|
||||
mainEntry,
|
||||
pageEntry: pageEntry,
|
||||
multiPageController: multiPageController,
|
||||
),
|
||||
);
|
||||
} else {
|
||||
child = _buildOverlay(context, mainEntry);
|
||||
}
|
||||
|
||||
return child;
|
||||
}
|
||||
|
||||
Widget _buildOverlay(
|
||||
BuildContext context,
|
||||
AvesEntry mainEntry, {
|
||||
AvesEntry? pageEntry,
|
||||
MultiPageController? multiPageController,
|
||||
}) {
|
||||
builder: (pageEntry) {
|
||||
pageEntry ??= mainEntry;
|
||||
|
||||
final showInfo = settings.showOverlayInfo;
|
||||
|
@ -111,5 +88,7 @@ class ViewerTopOverlay extends StatelessWidget {
|
|||
)
|
||||
],
|
||||
);
|
||||
},
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -16,20 +16,18 @@ class PageEntryBuilder extends StatelessWidget {
|
|||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final controller = multiPageController;
|
||||
return controller != null
|
||||
? StreamBuilder<MultiPageInfo?>(
|
||||
stream: controller.infoStream,
|
||||
return StreamBuilder<MultiPageInfo?>(
|
||||
stream: controller != null ? controller.infoStream : Stream.value(null),
|
||||
builder: (context, snapshot) {
|
||||
final multiPageInfo = controller.info;
|
||||
final multiPageInfo = controller?.info;
|
||||
return ValueListenableBuilder<int?>(
|
||||
valueListenable: controller.pageNotifier,
|
||||
valueListenable: controller?.pageNotifier ?? ValueNotifier(null),
|
||||
builder: (context, page, child) {
|
||||
final pageEntry = multiPageInfo?.getPageEntryByIndex(page);
|
||||
return builder(pageEntry);
|
||||
},
|
||||
);
|
||||
},
|
||||
)
|
||||
: builder(null);
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue