I recently created an app with Get cli structure and now when i'm trying to use oninit functions they are not working and the only way i could fix it was to use Get builder but my app has too many pages that i can't replace them all does anyone know what is causing these functions not to work?
Binding:
import 'package:get/get.dart';
import '../controllers/login_controller.dart';
class LoginBinding extends Bindings {
@override
void dependencies() {
Get.lazyPut<LoginController>(
() => LoginController(),
);
}
}
Controller:
import 'package:get/get.dart';
class LoginController extends GetxController {
//TODO: Implement LoginController
final count = 0.obs;
@override
void onInit() {
print('but i work fine');
super.onInit();
}
@override
void onReady() {
super.onReady();
}
@override
void onClose() {
super.onClose();
}
void increment() => count.value++;
}
View:
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import '../../../routes/app_pages.dart';
import '../controllers/login_controller.dart';
class LoginView extends GetView<LoginController> {
const LoginView({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return Scaffold(
resizeToAvoidBottomInset: false,
body: Padding(
padding: const EdgeInsets.all(16.0),
child: Center(
child: SingleChildScrollView(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(
'EVIDENCIA',
style: TextStyle(
fontSize: 32,
fontWeight: FontWeight.bold,
color: Colors.blue,
),
),
SizedBox(height: 8),
Text(
'Evidence based history taking',
style: TextStyle(
fontSize: 18,
color: Colors.black54,
),
),
SizedBox(height: 16),
Text(
'be with us',
style: TextStyle(
fontSize: 20,
fontWeight: FontWeight.bold,
color: Colors.black87,
),
),
SizedBox(height: 32),
TextField(
decoration: InputDecoration(
labelText: 'Username',
border: OutlineInputBorder(),
),
),
SizedBox(height: 16),
TextField(
decoration: InputDecoration(
labelText: 'Password',
border: OutlineInputBorder(),
),
obscureText: true,
),
SizedBox(height: 24),
ElevatedButton(
onPressed: () {
},
style: ElevatedButton.styleFrom(
backgroundColor: Colors.blue,
minimumSize: Size(double.infinity, 50),
),
child: Text('login'),
),
SizedBox(height: 24),
Text(
'evidencia.com',
style: TextStyle(
fontSize: 16,
color: Colors.black54,
),
),
SizedBox(height: 16),
GestureDetector(
onTap: () {
Get.offAndToNamed(Routes.REGISTER);
},
child: Text(
'register',
style: TextStyle(
fontSize: 16,
color: Colors.blue,
decoration: TextDecoration.underline,
),
),
),
],
),
),
),
),
);
}
}
The way it works :
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import '../../../routes/app_pages.dart';
import '../controllers/login_controller.dart';
class LoginView extends GetView<LoginController> {
const LoginView({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return GetBuilder<LoginController>(
init: LoginController(),
builder: (controller) {
return Scaffold(
resizeToAvoidBottomInset: false,
body: Padding(
padding: const EdgeInsets.all(16.0),
child: Center(
child: SingleChildScrollView(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(
'EVIDENCIA',
style: TextStyle(
fontSize: 32,
fontWeight: FontWeight.bold,
color: Colors.blue,
),
),
SizedBox(height: 8),
Text(
'Evidence based history taking',
style: TextStyle(
fontSize: 18,
color: Colors.black54,
),
),
SizedBox(height: 16),
Text(
'be with us',
style: TextStyle(
fontSize: 20,
fontWeight: FontWeight.bold,
color: Colors.black87,
),
),
SizedBox(height: 32),
TextField(
decoration: InputDecoration(
labelText: 'Username',
border: OutlineInputBorder(),
),
),
SizedBox(height: 16),
TextField(
decoration: InputDecoration(
labelText: 'Password',
border: OutlineInputBorder(),
),
obscureText: true,
),
SizedBox(height: 24),
ElevatedButton(
onPressed: () {
},
style: ElevatedButton.styleFrom(
backgroundColor: Colors.blue,
minimumSize: Size(double.infinity, 50),
),
child: Text('login'),
),
SizedBox(height: 24),
Text(
'evidencia.com',
style: TextStyle(
fontSize: 16,
color: Colors.black54,
),
),
SizedBox(height: 16),
GestureDetector(
onTap: () {
Get.offAndToNamed(Routes.REGISTER);
},
child: Text(
'register',
style: TextStyle(
fontSize: 16,
color: Colors.blue,
decoration: TextDecoration.underline,
),
),
),
],
),
),
),
),
);
});
}
}
any help would be appreciated.
this is the get builder
GetBuilder<LoginController>(
init: LoginController(),
builder: (controller) {})
I'm not entirely sure but I think the problem is that you don't have a single reference to the controller in your code. It is lazily initiated and will only be created once you reference it.
Like changing these lines
Widget build(BuildContext context) {
return Scaffold(
to for example
Widget build(BuildContext context) {
print(controller.count);
return Scaffold(
might work