30일차 과제 - rlatkddbs99/Flutter GitHub Wiki
main.dart
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:rx/model/coincontroller.dart';
import 'package:rx/page/mainPage.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
Get.put(CoinController(coin: 0.obs)); //메모리에 저장시키기
return GetMaterialApp(
home: mainPage(),
);
}
}
model/coinController.dart
import 'dart:async';
import 'package:get/get.dart';
class CoinController extends GetxController {
RxInt coin; //반응형으로 변수 만들기
CoinController({required this.coin});
@override
void onInit() { //데이터 변경될 때 재정의
super.onInit();
Timer.periodic(Duration(seconds: 1), (timer) { //1초마다 증가
coin.value++; //coin자체 ++안돼 coin.value로 접근해서 증가 가능
});
ever(coin, (data) {
if (data != 0 && data % 10 == 0) { //10개마다 snackBar찍기
Get.snackbar("코인 ${coin.value} 개 돌파", "축하합니다",
snackPosition: SnackPosition.TOP);
}
});
}
}
page/mainPage.dart
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:flutter/src/widgets/container.dart';
import 'package:flutter/src/widgets/framework.dart';
import 'package:font_awesome_flutter/font_awesome_flutter.dart';
import 'package:get/get.dart';
import 'package:rx/model/coincontroller.dart';
import 'package:rx/page/store.dart';
class mainPage extends StatefulWidget {
const mainPage({super.key});
@override
State<mainPage> createState() => _mainPageState();
}
class _mainPageState extends State<mainPage> {
@override
Widget build(BuildContext context) {
var controller = Get.find<CoinController>(); //controller에 선언한 컨트롤러 가져오기
return Scaffold(
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Obx(() => Text("Current coin : ${controller.coin.value.toString()}")), //반응형으로 바로바로 보일 수 있도록, .value로 접근
Image.network( // coin아이콘 안보여서
"https://img.freepik.com/premium-vector/the-bitcoin-icon-payment-symbol-the-cryptocurrency-logo-a-simple-vector-on-a-white-background_422344-1425.jpg?w=2000",
width: 150,
height: 150,
),
TextButton(
onPressed: () {
Get.to(Store()); //페이지 라우팅
},
child: Text("상점으로 이동하기"))
],
)),
);
}
}
page/store.dart
import 'package:flutter/material.dart';
import 'package:flutter/src/widgets/container.dart';
import 'package:flutter/src/widgets/framework.dart';
import 'package:get/get.dart';
import 'package:rx/model/coincontroller.dart';
class Store extends StatefulWidget {
const Store({super.key});
@override
State<Store> createState() => _StoreState();
}
class _StoreState extends State<Store> {
@override
Widget build(BuildContext context) {
var controller = Get.find<CoinController>(); //controller가져오기
return Scaffold(
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text("상점"),
SizedBox(
height: 4,
),
Obx(() => Text("현재 보유한 코인: ${controller.coin.value.toString()}")), //코인개수 가져오기 .value
TextButton(
onPressed: () {
controller.coin.value = 0; //coin개수 초기화 0으로
},
child: Text("코인 리셋"))
],
),
),
);
}
}