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

say*_*bir 2 flutter flutter-dependencies flutter-getx

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

\n
class AddBinding implements Bindings {\n  @override\n  void dependencies() {\n    Get.lazyPut<AddController>(\n      () => AddController(\n        AddRepository(),\n        Get.find<DialogService>(),\n      ),\n    );\n  }\n}\n
Run Code Online (Sandbox Code Playgroud)\n

我添加GetPage了这样的绑定:

\n
GetPage(\n  name: Routes.ADD,\n  page: () => AddPage(),\n  binding: AddBinding(),\n),\n
Run Code Online (Sandbox Code Playgroud)\n

现在在我的主页

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

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

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

但是当我点击 fab 时controller.showAddDialog();出现错误:\nE/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/\xe2\x80\xa6/src/get_instance.dart:332 E/flutter (26699): #1 Inst.find package:get/\xe2\x80\xa6/src/extension_instance.dart:70

\n

这是添加控制器:

\n
class AddController extends GetxController {\n  final AddRepository repository;\n  final DialogService dialogService;\n  AddController(this.repository, this.dialogService);\n\n  void showAddDialog() {\n\n  }\n}\n
Run Code Online (Sandbox Code Playgroud)\n

什么是问题?

\n

这是材质应用程序:

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

S. *_*GIR 5

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

一种解决方法可以是将您的AddBinding依赖项放入选项卡父项(主页)绑定中,您可以在其中放置您的HomeController