123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- import 'package:flutter/rendering.dart';
- import 'package:flutter/widgets.dart';
- class PopoverCompositedTransformFollower extends CompositedTransformFollower {
- const PopoverCompositedTransformFollower({
- super.key,
- required super.link,
- super.showWhenUnlinked = true,
- super.offset = Offset.zero,
- super.targetAnchor = Alignment.topLeft,
- super.followerAnchor = Alignment.topLeft,
- super.child,
- });
- @override
- PopoverRenderFollowerLayer createRenderObject(BuildContext context) {
- final screenSize = MediaQuery.of(context).size;
- return PopoverRenderFollowerLayer(
- screenSize: screenSize,
- link: link,
- showWhenUnlinked: showWhenUnlinked,
- offset: offset,
- leaderAnchor: targetAnchor,
- followerAnchor: followerAnchor,
- );
- }
- @override
- void updateRenderObject(
- BuildContext context, PopoverRenderFollowerLayer renderObject) {
- final screenSize = MediaQuery.of(context).size;
- renderObject
- ..screenSize = screenSize
- ..link = link
- ..showWhenUnlinked = showWhenUnlinked
- ..offset = offset
- ..leaderAnchor = targetAnchor
- ..followerAnchor = followerAnchor;
- }
- }
- class PopoverRenderFollowerLayer extends RenderFollowerLayer {
- Size screenSize;
- PopoverRenderFollowerLayer({
- required super.link,
- super.showWhenUnlinked = true,
- super.offset = Offset.zero,
- super.leaderAnchor = Alignment.topLeft,
- super.followerAnchor = Alignment.topLeft,
- super.child,
- required this.screenSize,
- });
- @override
- void paint(PaintingContext context, Offset offset) {
- super.paint(context, offset);
- final global = localToGlobal(offset);
- if (link.leader == null) {
- return;
- }
- if (link.leader!.offset.dx + link.leaderSize!.width + size.width >
- screenSize.width) {
- debugPrint("over flow");
- }
- debugPrint(
- "right: ${link.leader!.offset.dx + link.leaderSize!.width + size.width}, screen with: ${screenSize.width}");
- // debugPrint(
- // "offset: $offset, global: $global, link: ${link.leader?.offset}, link size: ${link.leaderSize}");
- // debugPrint("follower size: ${this.size}, screen size: ${this.screenSize}");
- }
- }
- class EdgeFollowerLayer extends FollowerLayer {
- EdgeFollowerLayer({
- required super.link,
- super.showWhenUnlinked = true,
- super.unlinkedOffset = Offset.zero,
- super.linkedOffset = Offset.zero,
- });
- }
|