카테고리 없음
Flutter - statelessWidget vs statefulWidget
춘행이
2021. 5. 9. 13:02
728x90
statelessWideget
- 화면이 로드될 때 상태(state)가 없는 위젯
- 변경이 필요한 데이터가 없는것으로 이벤트에도 동작하지 않음
- 정적인 위젯
- 예시 : statelessWidget에서 버튼클릭시 카운트올리기
statefulWidget
- 화면이 로드될 때 상태(state)가 있는 위젯
- data 변경이 필요한 경우 화면을 다시 그려서 변경된 부분을 위젯에 반영
- 동적인 위젯
statelessWideget , statefulWidget 위젯 카운트 예시
-statelessWideget
import 'package:flutter/material.dart';
class StatelessPage extends StatelessWidget {
const StatelessPage({Key key}) : super(key: key);
@override
Widget build(BuildContext context) {
int count = 0;
void plusCount() {
count++;
print(count.toString());
}
return Scaffold(
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [Text('$count'), RaisedButton(onPressed: plusCount)],
),
),
);
}
}
클릭시 print
화면에서는 아무리 클릭을 해도 숫자가 변하지 않는 statlessWidget
-statefulWidget
import 'package:flutter/material.dart';
class StateFulPage extends StatefulWidget {
const StateFulPage({Key key}) : super(key: key);
@override
_StateFulPageState createState() => _StateFulPageState();
}
class _StateFulPageState extends State<StateFulPage> {
int count = 0;
void plusCount() {
setState(() {
count++;
});
print(count.toString());
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [Text('$count'), RaisedButton(onPressed: plusCount)],
),
),
);
}
}
stateless 코드와 마찬가지로 print에서는 똑같이 count가 증가되는걸 볼수있다.
하지만 statefulWidget에서 setstate를 통해 count의 상태가 눌릴때마다 그려져서 바뀌는걸 볼수있다
728x90