한번 더 정리하고 싶은 내용만 따로 정리
// lib/main.dart
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return ChangeNotifierProvider(
create: (context) => MyAppState(),
child: MaterialApp(
title: 'Namer App',
theme: ThemeData(
useMaterial3: true,
colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepOrange),
),
home: MyHomePage(),
),
);
}
}
class MyAppState extends ChangeNotifier {
var current = WordPair.random();
}
- MyAppState 클래스는 앱이 작동하는 데 필요한 데이터를 정의.
- 상태 클래스는 ChangeNotifier를 확장한다.
- 즉, 자체 변경사항에 관해 다른 항목에 알릴 수 있다고 한다.
- ex) current의 값이 변경되었을 때 앱의 일부 위젯이 알아야 한다는 뜻인듯하다.
- 상태가 만들어지고 ChangeNotifierProvider를 사용하여 전체 앱에 제공된다.
class MyHomePage extends StatelessWidget {
@override
Widget build(BuildContext context) { // ← 1
var appState = context.watch<MyAppState>(); // ← 2
return Scaffold(
body: Column(
children: [
Text('A random AWESOME idea:'),
Text(appState.current.asLowerCase),
ElevatedButton(
onPressed: () {
print('button pressed!');
},
child: Text('Next'),
),
],
),
);
}
}
- 모든 위젯은 위젯이 항상 최신 상태로 유지되도록 위젯의 상황이 변경될 때마다 자동으로 호출되는 build() 메서드를 정의한다.
- MyHomePage는 watch 메서드를 사용해서 앱의 현재 상태에 관련한 변경사항을 계속 추적한다.
- 여기서 아래의 코드를 작성한다면 MyAppState에 작성한 getNext()메서드를 사용할 수 있다.
- 아래와 같이 작성하면 random() 메서드로 인해 버튼 클릭 시 계속 변경된 데이터를 확인할 수 있다,
class MyAppState extends ChangeNotifier { var current = WordPair.random(); void getNext() { current = WordPair.random(); print('이데이터는'); print(current); notifyListeners(); // 해당 위젯을 보고 있는 유저에게 알림을 보내기 } } class MyHomePage extends StatelessWidget { @override Widget build(BuildContext context) { var appState = context.watch<MyAppState>(); return Scaffold( body: Column( children: [ Text('A random AWESOME idea:'), Text(appState.current.asLowerCase), ElevatedButton( onPressed: (){appState.getNext();}, child: Text('Next') ) ], ), ); } }
'Flutter' 카테고리의 다른 글
[Flutter, 토이 프로젝트] 위젯 안의 요소의 TextStyle 한번에 지정 - DefaultTextStyle (0) | 2023.08.30 |
---|---|
[Flutter, 토이 프로젝트] 위젯 사이의 간격 간편하게 주고 싶을 때 - SizedBox (0) | 2023.08.22 |
[Flutter, 토이 프로젝트] CustomScrollView 안의 패딩 위젯 - SliverPadding (0) | 2023.08.21 |
[Flutter, 토이 프로젝트] ElevatedButton Radius 변경 - styleFrom (0) | 2023.08.19 |
[Flutter, 토이 프로젝트] 가로,세로 요소 스크롤 & 스와이프 - ListView (0) | 2023.08.19 |