반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- identifierForVender
- code editor
- Game js
- babel
- Three js
- swagger-typescript-api
- Prism.js
- webrtc
- jszip
- Redux
- RouteObserver
- typescript
- uint16array
- web track
- node
- methodChannel
- KakaoMap
- three.js
- Flutter
- uint8array
- react
- Excel
- Raycasting
- userevent_tracker
- Three-fiber
- Babel standalone
- Completer
- androidId
- Image Resize typescript
- REST API
Archives
- Today
- Total
Never give up
Flutter - Scrollable with sliver 본문
반응형
특정 위치에 도달했을 때 스크롤을 멈추고 싶을 때
다른 방법도 있지만 scrollable을 이용하면 조금 더 편하게 작업할 수 있습니다
기본적으로 위젯의 포지션을 파악할 때 renderObject를 이용해서 위치를 계산하는데
(관련 예제 : https://devmemory.tistory.com/44)
Global key를 이용해서 간단하게 원하는 포지션에서 스크롤을 멈춰줄 수 있습니다
class ScrollableExample extends StatelessWidget {
ScrollableExample({Key? key, required this.title}) : super(key: key);
final String title;
final GlobalKey _globalKey = GlobalKey();
@override
Widget build(BuildContext context) {
Size size = MediaQuery.of(context).size;
return Scaffold(
body: CustomScrollView(slivers: [
SliverAppBar(
leading: IconButton(
icon: Icon(Icons.close, color: Colors.white),
onPressed: () {
Navigator.of(context).pop();
},
alignment: Alignment.center),
backgroundColor: Colors.black,
expandedHeight: size.height * 0.4,
pinned: true,
flexibleSpace: FlexibleSpaceBar(
stretchModes: <StretchMode>[
StretchMode.fadeTitle,
],
background: Container(),
title: Text(title),
centerTitle: true,
),
),
SliverList(
delegate: SliverChildListDelegate([
IconButton(onPressed: (){
Scrollable.ensureVisible(_globalKey.currentContext!,
duration: Duration(milliseconds: 800));
}, icon: CircleAvatar(child: Icon(Icons.arrow_downward_sharp))),
SizedBox(
height: size.height * 0.5,
),
Center(child: Text('This!',key: _globalKey)),
SizedBox(
height: size.height * 0.5,
),
]),
)
]),
);
}
}
간단한 Sliver 앱바와 리스트인데
아이콘 버튼을 누르면 Scrollable의 ensureVisible static메소드를 사용할 수 있고
해당 설명을 읽어보면 역할을 파악할 수 있습니다
Scrolls the scrollables that enclose the given context so as to make the given context visible.
context가 적용된 위젯이 보일 때까지 스크롤 해줌 정도로 축약해볼 수 있을 거 같습니다
그런데 주의해야될점이 builder같은걸 사용할 경우 화면에 없을때 렌더링이 안돼서 그런건지
에러가 발생하고 작동하지 않는 경우가 있었는데 조금 더 테스트를 해봐야될거 같습니다
반응형
'Flutter' 카테고리의 다른 글
Flutter - LayoutBuilder with Text widget width (0) | 2021.09.03 |
---|---|
Flutter - Easy Overlay (feat. toast) (0) | 2021.08.13 |
Flutter - WidgetsBindingObserver (0) | 2021.05.22 |
Flutter 2.0 - typedef callback with ScaffoldMessenger Widget, global key (0) | 2021.05.08 |
Flutter - FCM device to device, device to all devices (3) | 2021.04.24 |
Comments