30일차 과제 링크 👉 30일차 과제
var myLevel = 1.obs;
var myLevel = RxInt(1);
RxInt myLevel = 1.obs;
→ 추천RxInt myAge = 99.obs;
myAge = 3.obs;
myAge(e);
final count = 0.obs;
// .obs를 사용하여 Observable 객체로 변경
Text('Count: ${count.value}'),
// .value를 사용하여 Observable의 현재 값을 가져오기
RxList<String> myFriends = ['a', 'b', 'c'].obs;
...
var controller = Get.find();
Text(controller.myFriends.length.toString()); // O
Text(controller.myFriends.value.length.toString()); // X
final name = 'John'.obs.rx;
// .rx를 사용하여 Wrapper Observable 객체 만들기
Text('${name.value}'),
// .value를 사용하여 현재 값을 가져오기
final list = [1, 2, 3].obs;
// .obs를 사용하여 List를 Observable 객체로 변경
Obx(() => Text(list.value.toString())),
// Obx를 사용하여 변경 사항을 감지하고 화면을 업데이트
final name = ''.obs;
// .obs를 사용하여 Observable 객체 만들기
Text('${name.value.isNull ? "Unknown" : name.value}'),
// .isNull을 사용하여 name.value가 null인 경우 "Unknown"을, 그렇지 않은 경우 name.value를 표시
final name = ''.obs;
// .obs를 사용하여 Observable 객체 만들기
Text('${name.value.default("Unknown")}'),
// .default를 사용하여 name.value가 null인 경우 "Unknown"을, 그렇지 않은 경우 name.value를 표시
final list = [1, 2, 3].obs;
// .obs를 사용하여 List를 Observable 객체로 변경
final filteredList = list.where((item) => item > 1).obs;
// .where를 사용하여 List에서 값이 1보다 큰 항목만을 필터링
Obx(() => Text(filteredList.value.toString())),
// Obx를 사용하여 변경 사항을 감지하고 화면을 업데이트
import 'controller/global_data_controller.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'page/main_page.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
Widget build(BuildContext context) {
Get.put(GlobalDataController());
return MaterialApp(
home: MainPage(),
);
}
}
import 'package:get/get.dart';
class GlobalDataController extends GetxController {
RxInt myLevel = 1.obs;
}
import '../controller/global_data_controller.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
class MainPage extends StatelessWidget {
const MainPage({Key? key}) : super(key: key);
Widget build(BuildContext context) {
var controller = Get.find<GlobalDataController>();
return Scaffold(
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Obx(() => Text(controller.myLevel.value.toString())),
ElevatedButton(
onPressed: () {
controller.myLevel(controller.myLevel.value += 1);
},
child: Text('+1'),
)
],
),
),
);
}
}
final count = 0.obs;
// .obs를 사용하여 Observable 객체 만들기
count.ever((value) => print('Count is now: $value'));
// .ever를 사용하여 count의 값이 변경될 때마다 실행되는 함수를 정의
final name = ''.obs;
// .obs를 사용하여 Observable 객체 만들기
name.once((value) => print('Hello, $value!'));
// .once를 사용하여 name의 값이 최초로 변경될 때 실행되는 함수를 정의
final searchText = ''.obs;
// .obs를 사용하여 Observable 객체 만들기
searchText.debounce(Duration(milliseconds: 500)).listen((value) => print('Search for: $value'));
// .debounce를 사용하여 searchText가 변경되고 500밀리초가 지난 후에 실행되는 함수를 정의
// 사용자가 검색어를 입력하다가 잠시 멈추면 검색을 시작
final counter = 0.obs;
// .obs를 사용하여 Observable 객체 만들기
counter.interval(Duration(seconds: 1)).listen((value) => print('Count is now: $value'));
// .interval을 사용하여 1초마다 counter의 값을 출력하는 함수를 정의
// 일정한 간격으로 반복되는 작업을 수행할 수 있음
import 'package:get/get.dart';
class HomeController extends GetxController {
var count = 0;
void onInit() {
super.onInit();
// 데이터 초기화 등의 작업 수행
count = 10;
}
}
user 데이터가 null인 경우 login 페이지로 이동하고, 그렇지 않은 경우 main 페이지로 이동
main.dart
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'controller/global_data_controller.dart';
import 'model/user.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
Widget build(BuildContext context) {
var controller = Get.put(GlobalDataController());
return GetMaterialApp(
home: Scaffold(
body: Center(
child: TextButton(
onPressed: (){
print(controller.user);
controller.user(User(id: 'asdf', nickname: 'asd'));
},
child: Text('로그인'),
),
),
)
);
}
}
import 'package:first_app/Flutter/GetX/ever/page/main_page.dart';
import 'package:get/get.dart';
import '../model/user.dart';
import '../page/login_page.dart';
class GlobalDataController extends GetxController {
Rxn<User> user = Rxn();
void onInit() {
super.onInit();
print('컨트롤러 생성');
ever(user, (value) {
if (value == null) {
Get.to(() => LoginPage());
return;
}
Get.to(() => MainPage());
return;
});
}
}
class User {
String id;
String nickname;
User({required this.id, required this.nickname});
}
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import '../controller/global_data_controller.dart';
class MainPage extends StatelessWidget {
const MainPage({super.key});
Widget build(BuildContext context) {
var controller = Get.find<GlobalDataController>();
return Scaffold(
body: Center(
child: Text('main_page'),
),
floatingActionButton: FloatingActionButton(
onPressed: () {
controller.user.value = null;
},
child: Icon(Icons.logout),
),
);
}
}
import 'package:flutter/material.dart';
class LoginPage extends StatelessWidget {
const LoginPage({super.key});
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: Text('login_page'),
),
);
}
}
GetX 재밋다.............이게되네..............
ㅋ