Flutter에서 BottomNavigationBar는 앱의 하단에 여러 탭을 표시하는 데 널리 사용되는 위젯입니다. 하지만, BottomNavigationBar를 사용하면서 다음과 같은 문제점을 경험한 적이 있나요?
- 탭 이동 시 위젯 전체 재구성: 탭을 이동할 때마다 모든 위젯이 다시 구축됩니다. 이는 불필요한 성능 낭비를 야기하고, 깜박임 현상을 발생시킬 수 있습니다.
- 리스트뷰 스크롤 초기화: 리스트뷰를 스크롤하다 다른 탭으로 이동 후 다시 돌아오면 스크롤 위치가 초기화됩니다. 이는 사용자 경험을 저하시키는 문제입니다.
IndexedStack 사용:
IndexedStack 위젯을 사용하여 탭별 위젯을 관리하면 탭 이동 시 위젯 재구성을 방지할 수 있습니다. IndexedStack은 현재 선택된 탭의 위젯만 표시하고 나머지는 숨겨 놓는 방식으로 작동합니다.
IndexedStack get pages => IndexedStack(
index: _currentIndex,
children: tabs
.mapIndexed((tab, index) => Offstage(
offstage: _currentTab != tab,
child: TabNavigator(
navigatorKey: navigatorKeys[index],
tabItem: tab,
),
))
.toList());
+ Flutter에서 Offstage 사용 시 얻을 수 있는 효과
Offstage는 Flutter에서 위젯을 화면에 표시하지 않고 메모리에 유지하는 데 사용되는 위젯입니다. IndexedStack과 함께 사용하면 다음과 같은 효과를 얻을 수 있습니다.
1. 성능 향상: Offstage는 표시되지 않는 위젯을 렌더링하지 않아 성능을 향상시킬 수 있습니다. 탭바와 같은 여러 페이지로 구성된 앱에서 특히 유용합니다.
2. 메모리 사용량 감소: Offstage는 표시되지 않는 위젯을 렌더링하지 않아 메모리 사용량을 줄일 수 있습니다.
3. 페이지 전환 애니메이션 효과: Offstage는 페이지 전환 시 애니메이션 효과를 쉽게 구현할 수 있도록 도와줍니다.
4. 깜박임 현상 방지: Offstage는 페이지 전환 시 깜박임 현상을 방지할 수 있습니다.
5. 사용자 경험 향상: Offstage는 위의 장점들을 통해 사용자 경험을 향상시킬 수 있습니다.
'new' 카테고리의 다른 글
CustomScrollView: 강력한 스크롤 효과 구현 (0) | 2024.03.11 |
---|---|
Flutter에서 SingleChildScrollView 사용하여 오버플로 문제 해결하기 (0) | 2024.03.11 |
Flutter AfterLayoutMixin? (0) | 2024.03.11 |
Flutter에서 SingleTickerProviderMixin 사용 이유 (0) | 2024.03.11 |
Dart의 읽기 전용 getter (0) | 2024.03.11 |