반응형

들어가며

Provider란?

  • 위젯간의 상태를 공유하고 전달하고 사용하기 쉽게 해주는 것을 말한다.
  • 글로벌하게 상태를 사용하고싶을 때 사용한다.

예제

pubspec.yaml

dependencies:
  provider: ^5.0.0

main.dart

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

class Counter with ChangeNotifier {
  int _count = 0;

  int get count => _count;

  void increment() {
    _count++;
    notifyListeners(); // 상태 변경을 Provider에 알림
  }
}

void main() {
  runApp(
    ChangeNotifierProvider(
      create: (_) => Counter(),
      child: MyApp(),
    ),
  );
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Provider Example'),
        ),
        body: Column(
          children: [
            CounterView(),
            CounterController(),
          ],
        ),
      ),
    );
  }
}

class CounterView extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Container(
      // Provider로부터 상태를 가져와서 사용
      child: Consumer<Counter>(
        builder: (context, counter, _) {
          return Text('${counter.count}');
        },
      ),
    );
  }
}

class CounterController extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Container(
      child: TextButton(
        child: Text("increase"),
        onPressed: () {
          // Provider로 상태 변경 요청
          Provider.of<Counter>(context, listen: false).increment();
        },
      ),
    );
  }
}
반응형

'Development > Flutter' 카테고리의 다른 글

[Flutter] 안드로이드 릴리즈 빌드하기(.aab)  (0) 2024.03.24
[Flutter] 애드몹(Admob) 광고 넣기  (0) 2024.03.18
[Flutter] Http  (0) 2024.03.03
[Flutter] TextField  (0) 2024.02.23
[Flutter] StatefulWidget  (0) 2024.02.23

+ Recent posts