say*_*bir 2 flutter flutter-dependencies flutter-getx
我正在我的项目中使用 getx,我正在尝试使用 getx 依赖注入。我创建 AddBinding 类:
\nclass AddBinding implements Bindings {\n @override\n void dependencies() {\n Get.lazyPut<AddController>(\n () => AddController(\n AddRepository(),\n Get.find<DialogService>(),\n ),\n );\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n我添加GetPage了这样的绑定:
GetPage(\n name: Routes.ADD,\n page: () => AddPage(),\n binding: AddBinding(),\n),\nRun Code Online (Sandbox Code Playgroud)\n现在在我的主页
\nclass 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 );\nRun Code Online (Sandbox Code Playgroud)\n我添加我的添加页面。这是添加页面:
\nclass 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}\nRun 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
这是添加控制器:
\nclass AddController extends GetxController {\n final AddRepository repository;\n final DialogService dialogService;\n AddController(this.repository, this.dialogService);\n\n void showAddDialog() {\n\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n什么是问题?
\n这是材质应用程序:
\nGetMaterialApp(\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 );\nRun Code Online (Sandbox Code Playgroud)\n
您没有导航到AddPage使用 GetX 导航系统。您正在做的是从同一页面(主页)切换选项卡。因此该类AddBinding对其没有影响。仅当您使用Get.toNamed(Routes.ADD)或导航时它才会有效Get.to(()=>AddPage(), binding: AddBinding())。
一种解决方法可以是将您的AddBinding依赖项放入选项卡父项(主页)绑定中,您可以在其中放置您的HomeController
| 归档时间: |
|
| 查看次数: |
1999 次 |
| 最近记录: |