작성
·
270
답변 1
1
안녕하세요!
스크롤 포지션이 리셋되는 이유는 TabBarView 이동이 있을때마다 위젯이 새로 그려지기 때문입니다.
이걸 제한하고 위젯의 상태를 기억해두고싶다면 AutomaticallyKeepAliveMixin을 사용하면 됩니다.
아래 예제 코드를 첨부해드리겠습니다.
감사합니다!
import 'package:flutter/material.dart';
void main() {
runApp(
Root(),
);
}
class Root extends StatefulWidget {
const Root({Key? key}) : super(key: key);
@override
State<Root> createState() => _RootState();
}
class _RootState extends State<Root>{
@override
Widget build(BuildContext context) {
return MaterialApp(
home: DefaultTabController(
length: 4,
child: Scaffold(
body: TabBarView(
children: List.generate(
4,
(index) => Column(
children: [
Expanded(
flex: 1,
child: Center(
child: Text(
'Page ${index + 1}',
style: TextStyle(
fontSize: 30,
fontWeight: FontWeight.bold,
),
),
),
),
Expanded(
flex: 2,
child: _List(),
),
],
),
),
),
),
),
);
}
}
class _List extends StatefulWidget {
const _List({Key? key}) : super(key: key);
@override
State<_List> createState() => _ListState();
}
class _ListState extends State<_List> with AutomaticKeepAliveClientMixin{
@override
Widget build(BuildContext context) {
return ListView.builder(
itemBuilder: (_, index) => Center(
child: SizedBox(
height: 50,
child: Text(
index.toString(),
),
),
),
);
}
@override
// TODO: implement wantKeepAlive
bool get wantKeepAlive => true;
}