使用Getx
时,当我有一个GetxController
并且我想在视图UI中使用它时,需要删除小部件构造函数上的const
:
控制器:
class TestController extends GetxController {
// ...
}
查看方式:
class TextWidget extends StatelessWidget {
const TextWidget({super.key}); // throws error
final controller = Get.put(TestController());
@override
Widget build(BuildContext context) {
return Container();
}
}
它会在const行上抛出一个错误:
> Can't define the 'const' constructor because the field 'controller' is initialized with a non-constant value.
因此它要求我删除const
,但由于建议添加const
以获得更好的性能,所以我希望让它存在并使用我的控制器。
我可以通过在build()
方法中声明控制器来关闭这个错误,但我想这不是一个好主意。
1条答案
按热度按时间ovfsdjhp1#
在
build()
方法中声明控制器将导致额外的不必要的Get.put()
,每次小部件重建时都会调用这些Get.put()
。不要像下面这样将控制器作为变量调用:
您可以使用
getter
来获得GetxController
,以防止出现此错误,并让您的小部件为const
,如下所示:您现在可以使用控制器,就像您将其声明为
final
一样,而您的小部件仍然是const
。也可以考虑使用
GetView<T>
,因为它可以实现同样的效果:您只需使用
GetView<T>
指定控制器的泛型类型,然后就可以使用controller
getter引用该控制器,而无需手动定义它。