import 'package:flutter/material.dart';
import 'package:provider/provider.dart';

class Person with ChangeNotifier {
   late String name;
   late int age;
  Person( this.name,  this.age);
  // when `notifyListeners` is called, it will invoke
  // any callbacks that have been registered with an instance of this object
  // `addListener`.
  void increaseAge() {
    age++;
    print('increaseAge : $age');
    notifyListeners();
  }
}

void main() {
  runApp(MultiProvider(
    providers: [
      ChangeNotifierProvider(
        create: (_) => Person('iljin', 45),
      ),
    ],
    child: MyHomePage(),
  ));

  // var person = Person('iljin', 45);
  // `addListener` is a method on the `ChangeNotifier` class,
  // which is mixed-in to the Person class
  // person.addListener(() {
  //   print('value updated!: ${person.age}');
  // });
  // person.increaseAge();
}

class MyHomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home:Scaffold(
      appBar: AppBar(
        title: const Text('Provider Class'),
      ),
      body: Center(
        child: Text(
          '''
          Hi ${Provider.of<Person>(context).name}!
          You are ${Provider.of<Person>(context).age} years old''',
          /* 위젯 트리에서 가장 가까운 Provider<T>를 가져오고 해당 값을 반환합니다.
            listen이 true이면 나중에 값을 변경하면 위젯에 대한 새 State.build가 트리거되고
            StatefulWidget에 대한 State.didChangeDependencies가 트리거됩니다.
            listen: State.initState 내부에서 Provider.of를 호출하거나
            다음과 같이 제공자의 create 메소드를 호출하려면 false가 필요합니다.
             Provider(
                create: (context) {
                  return Model(Provider.of (context, listen: false)),
                },
              )
             */
        ),
      ),
      floatingActionButton: FloatingActionButton(
        child: const Text('+'),
        onPressed: () =>
            Provider.of<Person>(context, listen: false).increaseAge(),
        /*
        플로팅 버튼이 탭되었을때 Person.increaseApp() 함수가 호출되면
        person의 인스턴스는 provider에 의해 생성된다.
        */
      ),
      ),
    );
  }
}

+ Recent posts