【问题标题】:How to use getx controller, binding,getview?如何使用getx控制器、绑定、getview?
【发布时间】:2023-01-15 20:08:43
【问题描述】:

我试图用 getx 创建小项目,我有 3 个文件的获取视图、getxcontroller、绑定,然后当我运行时我遇到这样的问题:

未处理的异常:找不到“IncrementController”。您需要调用“Get.put(IncrementController())”或“Get.lazyPut(()=>IncrementController())”

那么我对 getx 流程步骤有误吗? 让我们在下面检查我的代码:

主.dart

import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_application_1/controller.dart';
import 'package:get/get.dart';

void main() {
  runApp(GetMaterialApp(
    home: HomePage(),
  ));
}

class HomePage extends GetView<IncrementController> {
  final IncrementController _controller = Get.find<IncrementController>();
  @override
  Widget build(BuildContext context) {
    //display increment with getx
    return Scaffold(
      appBar: AppBar(
        title: Text('GetX'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            Text(
              'You have pushed the button this many times:',
            ),
            Text(
              '${_controller.increment}',
              style: Theme.of(context).textTheme.headline4,
            ),
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: _controller.incrementFun,
        tooltip: 'Increment',
        child: Icon(Icons.add),
      ),
    );
  }
}

控制器

import 'package:get/get_rx/get_rx.dart';
import 'package:get/get_state_manager/src/rx_flutter/rx_getx_widget.dart';
import 'package:get/get_state_manager/src/simple/get_controllers.dart';

class IncrementController extends GetxController {
  //create increment with getx
  RxInt _increment = 0.obs;
  //get increment
  int get increment => _increment.value;

  //create increment functiion with getx
  void incrementFun() => _increment.value++;
}

捆绑

import 'package:flutter_application_1/controller.dart';
import 'package:get/get.dart';

class IncrementBinding implements Bindings {
  @override
  void dependencies() {
    // TODO: implement dependencies
    //create controller with getx
    Get.lazyPut<IncrementController>(() => IncrementController());
  }
}

【问题讨论】:

    标签: flutter dart


    【解决方案1】:

    您需要像这样在 MaterialApp 或 GetMaterialApp 中设置初始绑定:

        GetMaterialApp(
          initialBinding: IncrementBinding(),
          home: HomeOage(),
        );
    

    【讨论】:

      【解决方案2】:

      在转到主页之前,您需要在路由中调用 IncrementBinding() 方法。像这样: Get.to(HomePage(),binding:IncrementBinding() ); 或这个 : GetMaterialApp( initialBinding: IncrementBinding(), home: HomePage(), ); 或者如果你使用这种方式,你可以这样调用:GetPage( name: Routes.homePageenter code, 页面:()=>主页(), 绑定:增量绑定(), ), `

      【讨论】:

        猜你喜欢
        • 2022-08-06
        • 2022-01-23
        • 2021-08-09
        • 2023-01-04
        • 1970-01-01
        • 2021-09-22
        • 2023-01-17
        • 1970-01-01
        • 2021-12-11
        相关资源
        最近更新 更多