name27 / flutter

0 stars 0 forks source link

코인 상점 GetX - Rx, Obx, ever #102

Open name27 opened 1 year ago

name27 commented 1 year ago

image image

coin_controller.dart

import 'package:get/get.dart';

class CoinController extends GetxController {
  RxInt coin = 0.obs;

  @override
  void onInit() {
    // TODO: implement onInit
    super.onInit();
    ever(coin, (value) {
      if (value % 10 == 0 && value > 0) {
        Get.snackbar('코인 $value개 돌파', '축하합니다');
      }
      return;
    });
  }
}

main.dart

import 'dart:async';

import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:getx_rx_obx_app/model/coin_controller.dart';

import 'page/main_page.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    var coinController = Get.put(CoinController());
    Timer _timer;
    _timer = Timer.periodic(Duration(seconds: 1), (timer) {
      coinController.coin.value++;
    });
    return GetMaterialApp(
      home: MainPage(),
    );
  }
}

main_page.dart

import 'package:flutter/material.dart';
import 'package:font_awesome_flutter/font_awesome_flutter.dart';
import 'package:get/get.dart';
import 'package:getx_rx_obx_app/model/coin_controller.dart';
import 'package:getx_rx_obx_app/page/shop_page.dart';

class MainPage extends StatelessWidget {
  const MainPage({super.key});

  @override
  Widget build(BuildContext context) {
    var coinController = Get.find<CoinController>();
    return Scaffold(
      body: Center(
        child: Column(
          crossAxisAlignment: CrossAxisAlignment.center,
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            Obx(() => Padding(
                  padding: const EdgeInsets.symmetric(vertical: 8.0),
                  child: Text(
                    'Cuttent Coin : ${coinController.coin.value}',
                    style: TextStyle(
                        fontWeight: FontWeight.w500,
                        fontSize: 20,
                        wordSpacing: 1.2,
                        letterSpacing: 0.8),
                  ),
                )),
            Icon(
              FontAwesomeIcons.bitcoin,
              size: 96.0,
              color: Colors.yellow.shade700,
            ),
            TextButton(
                onPressed: () {
                  Get.to(ShopPage());
                },
                child: Text('상점으로 이동하기'))
          ],
        ),
      ),
    );
  }
}

shop_page.dart

import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:getx_rx_obx_app/model/coin_controller.dart';

class ShopPage extends StatelessWidget {
  const ShopPage({super.key});

  @override
  Widget build(BuildContext context) {
    var coinController = Get.find<CoinController>();
    return Scaffold(
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          crossAxisAlignment: CrossAxisAlignment.center,
          children: [
            Text('상점',
                style: TextStyle(fontWeight: FontWeight.w500, fontSize: 18)),
            SizedBox(
              height: 8,
            ),
            Obx(() =>
                Text('현재 보유한 코인 : ${coinController.coin.value.toString()}')),
            TextButton(
                onPressed: () {
                  coinController.coin(0);
                },
                child: Text('코인리셋'))
          ],
        ),
      ),
    );
  }
}