首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >错误:未找到"Controller“。需要调用"Get.put(Controller())“或Get.lazyPut(()=>Controller())”

错误:未找到"Controller“。需要调用"Get.put(Controller())“或Get.lazyPut(()=>Controller())”
EN

Stack Overflow用户
提问于 2021-11-16 14:59:51
回答 1查看 568关注 0票数 0

我有下一个代码。

代码语言:javascript
复制
main() {
  Get.put(NavigationBarController());
  Get.put(JobListController());
  //...
  runApp(MyApp());
}

我不使用bindings,因为我不使用GetX路由/页面,而使用自定义的制表符切换。

接下来是我的小部件:

代码语言:javascript
复制
class Dashboard extends StatelessWidget {
  var jobCtrl = Get.find<JobListController>();
  
  @override
  Widget build(context) {
    return Container(
      margin: EdgeInsets.only(top: 20.0),
      child: Column(children: [
        Row(
          mainAxisAlignment: MainAxisAlignment.spaceAround,
          children: [
            ElevatedButton(
              onPressed: () => jobCtrl.startNewConfigToJob(), child: Text("Run")),

但是我得到了一个错误:

代码语言:javascript
复制
Error: "JobListController" not found. You need to call "Get.put(JobListController())" or "Get.lazyPut(()=>JobListController())"
    at Object.throw_ [as throw] (http://localhost:56854/dart_sdk.js:5374:11)

为什么我会得到这个错误?导航栏控制器也使用Get.find,工作正常:

代码语言:javascript
复制
class NavigationBarController extends GetxController {

  get to => Get.find<NavigationBarController>();

  var tabIndex = 0.obs;

  List<Widget> pages = [
      Dashboard(),
      TableStatisticSpeedView()
  ];

 Widget get currentPage => pages[tabIndex.value];

  void changeTabIndex(int index) {
    tabIndex.value = index;
  }

  @override
  void onInit() {
    super.onInit();
  }

  @override
  void dispose() {
    super.dispose();
  }
}

以下是完整的源代码:https://github.com/bubnenkoff/monitor_client/blob/main/lib/main.dart#L28

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-11-17 05:02:05

您可以创建一个单独的文件,将依赖项注入到该文件中,以放置您的依赖项。

代码语言:javascript
复制
Future<void> init() async {
Get.put(NavigationBarController());
  Get.put(JobListController());
}

从main调用初始化函数,并将WidgetsFlutterBinding.ensureInitialized()放在main函数的顶部。

代码语言:javascript
复制
main() async{
 WidgetsFlutterBinding.ensureInitialized();
 await di.init();
  runApp(MyApp());
}

现在,在小部件类中调用控制器。

代码语言:javascript
复制
class Dashboard extends StatelessWidget {
  var jobCtrl = Get.find<JobListController>();
  
  @override
  Widget build(context) {
    return Container(
      margin: EdgeInsets.only(top: 20.0),
      child: Column(children: [
        Row(
          mainAxisAlignment: MainAxisAlignment.spaceAround,
          children: [
            ElevatedButton(
              onPressed: () => jobCtrl.startNewConfigToJob(), child: Text("Run")),
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69991446

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档