Flutter에서 CompositedTransformFollower 클래스를 사용하는 방법은 무엇입니까?
13163 단어 beginnersflutterwidgetprogramming
OverlayEntry를 사용하여 위젯이 오버레이에 추가되고 오버레이 내의 항목 위치는 Positioned 및 AnimatedPositioned을 사용하여 선택됩니다.
회사는 포털에서 쉽게hire Flutter developers 고객을 위한 원활한 비즈니스 애플리케이션을 구축하기 위해 애플리케이션에 대해 다음 위젯을 구현할 수 있습니다. 추가 지원은 개발자에게 문의하십시오.
스택 위젯과 마찬가지로 다른 위젯 위에 표시할 항목이 필요할 때 유용합니다. 그러나 전체 코드베이스를 변경하지 않고 어디에서나 이 위젯을 사용할 수 있습니다.
CompositedTransformTarget, CompositedTransformWidget, LayerLink, Overlay 및 OverlayEntry 위젯을 사용하여 이 작업을 수행할 수 있습니다.
다음은 CompositedTransformFollower 클래스의 생성자입니다.
CompositedTransformFollower({
Key? Key,
required LayerLink link,
bool showWhenUnlinked = true,
Offset offset = Offset.zero,
Alignment targetAnchor = Alignment.topLeft,
Alignment followerAnchor = Alignment.topLeft,
Widget? child}
)
LayerLink 링크: 이 CompositedTransformFollower는 링크 개체에 의해 CompositedTransformTarget에 연결됩니다.
Bool showWhenUnlinked: showWhenUnlinked가 true이면 자식이 표시되고 위젯이 연결되지 않은 경우 재배치되지 않습니다. 거짓이면 자식이 숨겨집니다.
오프셋: 이 위젯의 후속 앵커 위치를 결정하려면 연결된 CompositedTransformTarget의 대상 앵커에 추가 오프셋을 추가해야 합니다.
Alignment targetAnchor: followerAnchor가 연결된 CompositedTransformTarget에서 자체적으로 앵커로 정렬되는 위치입니다.
Alignment followerAnchor: 위젯의 앵커 포인트는 연결된 CompositedTransformTarget의 followerAnchor와 정렬됩니다.
위젯? child: 이 위젯에는 자식이 하나만 있을 수 있습니다. Row, Column, Stack과 같은 자식 속성을 가진 위젯을 이 위젯의 자식으로 허용하여 수많은 자식을 배치합니다. 그런 다음 아이들에게 위젯을 제공합니다.
오버레이 항목이 오버레이 스택에 없는 "대상"을 따라야 할 때 위젯을 함께 "접착"하려면 CompositedTransformTarget, CompositedTransformFollower 및 LayerLink를 사용하십시오. 이를 달성하려면 다음을 수행해야 합니다.
오버레이에서 위젯을 래핑하려면 CompositedTransformFollower를 사용해야 합니다.
CompositedTransformTarget의 자손은 팔로워여야 합니다.
대상 위젯을 포함하려면 CompositedTransformTarget을 사용해야 합니다.
추종자와 대상은 LayerLink 인스턴스로 함께 결합됩니다.
예시:
import 'package:flutter/material.dart';
void main() {
runApp(const MaterialApp(home: Slide()));
}
class Slide extends StatefulWidget {
const Slide({Key? key}) : super(key: key);
@override
_SlideState createState() => _SlideState();
}
class _SlideState extends State {
final double indicatorWidth = 24.0;
final double indicatorHeight = 300.0;
final double slideHeight = 200.0;
final double slideWidth = 400.0;
final LayerLink layerLink = LayerLink();
OverlayEntry? overlayEntry;
Offset indicatorOffset = const Offset(0, 0);
Offset getIndicatorOffset(Offset dragOffset) {
final double x = (dragOffset.dx - (indicatorWidth / 2.0))
.clamp(0.0, slideWidth - indicatorWidth);
final double y = (slideHeight - indicatorHeight) / 2.0;
return Offset(x, y);
}
void showIndicator(DragStartDetails details) {
indicatorOffset = getIndicatorOffset(details.localPosition);
overlayEntry = OverlayEntry(
builder: (BuildContext context) {
return Positioned(
top: 0.0,
left: 0.0,
child: SizedBox(
width: indicatorWidth,
height: indicatorHeight,
child: CompositedTransformFollower(
offset: indicatorOffset,
link: layerLink,
child: Container(
color: Colors.blue,
),
)),
);
},
);
Overlay.of(context)?.insert(overlayEntry!);
}
void updateIndicator(DragUpdateDetails details) {
indicatorOffset = getIndicatorOffset(details.localPosition);
overlayEntry?.markNeedsBuild();
}
void hideIndicator(DragEndDetails details) {
overlayEntry?.remove();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: const Text('Overlay Indicator')),
body: Center(
child: CompositedTransformTarget(
link: layerLink,
child: Container(
width: slideWidth,
height: slideHeight,
color: Colors.blue.withOpacity(0.2),
child: GestureDetector(
onPanStart: showIndicator,
onPanUpdate: updateIndicator,
onPanEnd: hideIndicator,
),
),
),
),
);
}
}
산출
결론
오버레이를 사용하고 위젯을 연결하는 것은 다른 위젯 위에 위젯을 띄우는 사용자 인터페이스(UI)를 개발하기 위한 쉽고 효과적인 전략입니다. 이 기사에서 이러한 위젯을 LayerLink와 결합하는 방법을 발견했습니다.
Reference
이 문제에 관하여(Flutter에서 CompositedTransformFollower 클래스를 사용하는 방법은 무엇입니까?), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/pankajdas0909/how-to-use-compositedtransformfollower-class-in-flutter-50ik텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)