i have three controllers in my application and they are going to increase as the application grows, but i want a central controller file that i can include in every file so that instead of using Get.Put() to add all the controllers or Get.Find() to find the controller, i could just use one file.. and reference the other controllers….
but i keep getting errors.
The AppController.dart – the centeral controller that houses all the controllers.
import 'package:get/get.dart';
import 'CounterController.dart';
import 'AuthController.dart';
import 'UserController.dart';
class AppController extends GetxController {
final CounterController counterController = Get.put(CounterController());
final AuthController authController = Get.put(AuthController());
final UserController userController = Get.put(UserController());
@override
void onClose() {
counterController.dispose();
authController.dispose();
themeController.dispose();
userController.dispose();
super.onClose();
}
}
then in my widget. i have this…
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'AppController.dart';
class MainComponent extends StatelessWidget {
@override
Widget build(BuildContext context) {
// instead of using Get.put(...) for all the controllers.
// i just use only AppController and have access to others.
final AppController appController = Get.put(AppController());
return Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Obx(() => Text(
// error occurs here --------------------------------------
'Counter: ${appController.counterController.count}', style: TextStyle(fontSize: 24))),
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
IconButton(
icon: Icon(Icons.remove),
// error occurs here --------------------------------------
onPressed: appController.counterController.runAction,
),
],
),
SizedBox(height: 20),
Obx(() => Text(
// error occurs here too ------------------------------------
'User: ${appController.authController.isLoggedIn.value ? 'Logged In' : 'Logged Out'}')),
SizedBox(height: 20),
TextField(
// error occurs here --------------------------------------
onChanged: appController.userController.setUserName,
decoration: InputDecoration(labelText: 'Enter your name'),
),
],
),
);
}
}
so basically i want to be able to access the variables and methods through this property
e.g. appController.counterController.*
appController.authController.*
appController.userController.*
but i keep getting errors and it doesnt even see the methods or variables.
please i need help, chatGPT hasnt been helpful either.
2
You can try to use GetxService instead of use controller and do dependencies injection like example below all method and value in value will not change or lost it until you assign new value to it.It gonna be like global controller that you can use it from anywhere in your project
class StorageServcie extends GetxService {
static void setup() => Get.lazyPut(() => StorageServcie(), fenix: true);
static StorageServcie get to => Get.find();
final _secureStorage = const FlutterSecureStorage(
iOptions: IOSOptions(accessibility: KeychainAccessibility.first_unlock),
);
Future<void> write({
required String key,
required String value,
}) {
return _secureStorage.write(key: key, value: value);
}
Future<void> delete({
required String key,
}) {
return _secureStorage.delete(key: key);
}
Future<String?> read({
required String key,
}) async {
try {
return _secureStorage.read(key: key);
} on PlatformException {
await _secureStorage.deleteAll();
return null;
}
}
}
main.dart
Future<void> main() async {
WidgetsFlutterBinding.ensureInitialized();
await StorageServcie.setup();
runApp(const MyApp());
}
Using
await StorageService.to.write(key: 'value', value: value);