class MainPage extends StatelessWidget {
const MainPage({super.key});
static const String route = '/main'; //path 정의
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: Column(
children: [
const Text('Hola'),
TextButton(
child: const Text('login'),
onPressed: () {
},
),
],
),
),
);
}
}
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
Widget build(BuildContext context) {
return GetMaterialApp([
GetPage(name: LoginPage.route, page: () => const LoginPage()),
GetPage(name: MainPage.route, page: () => const MainPage()),
],
home: const MainPage(),
);
}
}
class AppPages {
static final pages = [
GetPage(name: AppRoutes.login, page: () => const LoginPage()),
GetPage(name: AppRoutes.main, page: () => const MainPage()),
];
}
class AppRoutes {
static const login = LoginPage.route;
static const main = MainPage.route;
}
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
Widget build(BuildContext context) {
return GetMaterialApp(
getPages: AppPages.pages,
home: const MainPage(),
);
}
}
Model(class), View, Controller를 분리시킨다.
import 'package:get/get.dart';
class LoginController extends GetxController {
var idController = TextEditingController();
var pwController = TextEditingController();
login() {
print('로그인 시도');
}
}
class LoginPage extends StatelessWidget {
const LoginPage({super.key});
static const String route = '/login'; //path 정의
Widget build(BuildContext context) {
var controller = Get.put(LoginController());
return Scaffold(
body: Center(
child: Padding(
padding: const EdgeInsets.all(16),
child: Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
mainAxisAlignment: MainAxisAlignment.center,
children: [
TextField(
controller: controller.idController, //컨트롤러 연결
decoration: const InputDecoration(
hintText: 'ID',
),
),
TextField(
controller: controller.pwController,
decoration: const InputDecoration(
hintText: 'PW',
),
),
ElevatedButton(
onPressed: controller.login, //로그인 함수 실행
child: const Text('로그인하기'),
),
],
),
),
),
);
}
}
앱이 시작할때, 페이지가 만들어질때 Get.put을 하는 방법.
initialBinding: BindingBuilder(() {
Get.put(LoginController());
.. 컨트롤러 나열
})
GetPage(
name: LoginPage.route,
page: () => const LoginPage(),
binding: BindingsBuilder(() {
Get.put(LoginController());
}),
)
class MyApp extends StatelessWidget {
const MyApp({super.key});
Widget build(BuildContext context) {
return GetMaterialApp(
initialBinding: BindingsBuilder(() {
//controller 나열
Get.put(LoginController());
}),
getPages: AppPages.pages,
// home: const LoginPage(),
initialRoute: LoginPage.route,
// binding을 AppPages에서 했을때, put된 후에 페이지가 실행될 수 있도록 한다. home 대신 씀.
);
}
}
class LoginPage extends GetView<LoginController> {
//GetView<제네릭>을 extends한다. 컨트롤러를 이미 갖고있음.
const LoginPage({super.key});
static const String route = '/login'; //path 정의
Widget build(BuildContext context) {
// var controller = Get.find<LoginController>();
return Scaffold(
대기상태에 두었다 사용될 때만 사용할 수 있다.
initialBinding: BindingBuilder(() {
Get.lazyPut(LoginController());
})
디자인 패턴들에 대한 설명
https://refactoring.guru/ko/design-patterns