Flutter Getx状态管理调用set方法时出现NoSuchMethodError报错求助
解决Getx中调用set方法时出现的NoSuchMethodError错误
兄弟,我一眼就揪出问题所在了——你把sayac这个属性当成函数来调用了!
先看你拿到的报错:
Exception has occurred.
NoSuchMethodError (NoSuchMethodError: Class 'int' has no instance method 'call'. Receiver: 5 Tried calling: call("25"))
这个报错说得很清楚:当前sayac返回的是int类型的5,你却试图调用它的call方法(也就是像函数一样传参数("25")),但int类型根本没有这个方法,所以直接报错了。
问题根源
你在控制器里给sayac定义了getter和setter:
get sayac => _sayac.value; // 返回的是int值 set sayac(yeniDeger) => _sayac.value = yeniDeger; // 这是赋值用的setter
但在主页面的onTap里,你错误地用了函数调用的语法:
_controller.sayac("25"); // ❌ 错误用法:把属性当函数调用
正确解决方案
修改主页面的赋值方式
把函数调用改成赋值操作,同时注意类型匹配(如果是字符串要转成int):onTap: () { _controller.sayac = int.parse("25"); // ✅ 正确:用setter赋值,先转成int // 或者直接传int值 // _controller.sayac = 25; },给setter加上类型约束(可选但推荐)
为了避免后续不小心传入非int类型的值,建议给控制器里的setter指定类型:// 修改控制器里的setter set sayac(int yeniDeger) => _sayac.value = yeniDeger;这样如果不小心传了字符串,IDE会直接提示类型错误,提前规避问题。
修改后的完整代码
控制器代码(优化后)
import 'package:flutter/material.dart'; import 'package:get/get.dart'; class SayacController extends GetxController { var _sayac = 5.obs; get sayac => _sayac.value; // 添加int类型约束 set sayac(int yeniDeger) => _sayac.value = yeniDeger; void arttir() { sayac = sayac + 1; } void azalt() { sayac = sayac - 1; } }
主页面代码(修正后)
import 'package:flutter/material.dart'; import 'package:flutter_ilk_proje/sayac_controllerEx.dart'; import 'package:get/get.dart'; void main() => runApp(MyApp()); class MyApp extends StatelessWidget { SayacController _controller = Get.put(SayacController()); @override Widget build(BuildContext context) { return MaterialApp( title: 'Material App', home: Scaffold( appBar: AppBar( title: Text('Material App Bar'), ), body: Center( child: InkWell( onTap: () { // 修正为赋值操作,并转换类型 _controller.sayac = int.parse("25"); }, child: Container( child: Obx( () => Text(_controller.sayac.toString()), ), ), ), ), ), ); } }
这样修改后,点击InkWell就能正常设置计数器的值啦!
内容的提问来源于stack exchange,提问作者mesh
相关产品推荐
相关产品推荐

