对setState()使用flutter GetX控制器



我想在我的控制器中调用字符串的值,这是我的控制器:

class SplashScreenController extends GetxController {
late String one = _setImage();
@override
void onInit() {
_initPackageInfo();
_setImage();
Timer(Duration(seconds: 5), () => Get.offNamed(Routes.DASHBOARD));
super.onInit();
}
@override
void onClose() {}
PackageInfo _packageInfo = PackageInfo(
appName: 'Unknown',
packageName: 'Unknown',
version: 'Unknown',
buildNumber: 'Unknown',
buildSignature: 'Unknown',
);
Future<void> _initPackageInfo() async {
_packageInfo = await PackageInfo.fromPlatform();
}
String _setImage() {
print(_packageInfo.packageName);
///main package
if (_packageInfo.appName == 'x1') {
return Images.x1;
} else if (_packageInfo.packageName == 'com.package.package1') {
return Images.package1;
} else {
return Images.x1;
}
}
}

我想调用函数setImage()在我的小部件,但有一个问题后,我调用它,你可以看到它在这里:

[Get]检测到GetX使用不当。您应该只对将要更新的特定小部件使用GetX或Obx。如果您看到此错误,则可能没有向GetX/Obx中插入任何可观察变量或者将它们插入到GetX认为适合更新的作用域之外(示例:GetX =>HeavyWidget =比;variableObservable)。如果您需要更新父小部件和子小部件,请将它们分别包装在Obx/GetX中。

这里是视图,我在这里调用控制器函数

Widget build(BuildContext context) {
return Obx(() => Scaffold(
body: Container(
color: const Color.fromARGB(255, 255, 255, 255),
alignment: AlignmentDirectional.center,
child: Image.asset(controller.one)),
));
}

是否有任何方法来修复它,以便我可以访问_setImage()在我的视图?

你有这个错误是因为你用Obx包装你的代码,但你没有使用一个可观察的变量。

像这样修改你的代码:

class SplashScreenController extends GetxController {
late String one = ''.obs; // This is the observable variable that you need
@override
void onInit() {
_initPackageInfo();
_setImage();
Timer(Duration(seconds: 5), () => Get.offNamed(Routes.DASHBOARD));
super.onInit();
}
@override
void onClose() {}
PackageInfo _packageInfo = PackageInfo(
appName: 'Unknown',
packageName: 'Unknown',
version: 'Unknown',
buildNumber: 'Unknown',
buildSignature: 'Unknown',
);
Future<void> _initPackageInfo() async {
_packageInfo = await PackageInfo.fromPlatform();
}
void _setImage() {
print(_packageInfo.packageName);
///main package
if (_packageInfo.appName == 'x1') {
one = Images.x1;
} else if (_packageInfo.packageName == 'com.package.package1') {
one = Images.package1;
} else {
one = Images.x1;
}
}
}

对于Widget:

Widget build(BuildContext context) {
return Obx(() => Scaffold(
body: Container(
color: const Color.fromARGB(255, 255, 255, 255),
alignment: AlignmentDirectional.center,
child: controller.one.isNotEmpty 
? Image.asset(controller.one)) 
: const SizedBox.shrink(),
));
}

最新更新