getx:AddController未找到.您需要调用Get.put(AddController())



我在项目中使用getx,我正在尝试使用getx依赖项注入。我创建AddBinding类:

class AddBinding implements Bindings {
@override
void dependencies() {
Get.lazyPut<AddController>(
() => AddController(
AddRepository(),
Get.find<DialogService>(),
),
);
}
}

GetPage中,我添加了这样的绑定:

GetPage(
name: Routes.ADD,
page: () => AddPage(),
binding: AddBinding(),
),

现在在我的主页

class HomePage extends GetView<HomeController> {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
// title: const Text('HomePage'),
title: TabBar(
controller: controller.controller,
tabs: controller.myTabs,
),
),
body: Padding(
padding: const EdgeInsets.all(8.0),
child: TabBarView(
controller: controller.controller,
physics: const NeverScrollableScrollPhysics(),
children: [
Container(),
Container(),
Container(),
AddPage(),
],
),
),
);

我添加我的AddPage。这是添加页面:

class AddPage extends GetView<AddController> {
@override
Widget build(BuildContext context) {
return Scaffold(
body: SafeArea(child: Container()),
floatingActionButton: FloatingActionButton(
elevation: 0.0,
backgroundColor: const Color(0xFFE57373),
onPressed: () async {
controller.showAddDialog();
},
child: const Icon(Icons.add),
),
);
}
}

但当我点击fabcontroller.showAddDialog();时,我出现了错误:E/flutter (26699): [ERROR:flutter/lib/ui/ui_dart_state.cc(199)] Unhandled Exception: "AddController" not found. You need to call "Get.put(AddController())" or "Get.lazyPut(()=>AddController())" E/flutter (26699): #0 GetInstance.find package:get/…/src/get_instance.dart:332 E/flutter (26699): #1 Inst.find package:get/…/src/extension_instance.dart:70

这是AddController:

class AddController extends GetxController {
final AddRepository repository;
final DialogService dialogService;
AddController(this.repository, this.dialogService);
void showAddDialog() {
}
}

什么是问题?

这是MaterialApp:

GetMaterialApp(
debugShowCheckedModeBanner: false,
initialRoute: Routes.INITIAL,
theme: appThemeData,
defaultTransition: Transition.fade,
initialBinding: MainBinding(),
locale: const Locale('fa', 'IR'),
translationsKeys: AppTranslation.translations,
getPages: AppPages.pages,
),
),
);

您没有使用GetX导航系统导航到AddPage。您正在做的是从同一页面(主页(切换选项卡。因此,AddBinding类对它没有任何影响。只有当您使用Get.toNamed(Routes.ADD)Get.to(()=>AddPage(), binding: AddBinding())导航时,它才会生效。

一种解决方法是将AddBinding依赖项放在选项卡父级(主页(绑定中,将HomeController放在那里

最新更新