[英]Using flutter GetX controller for setState()
我想调用我的controller中字符串的值,这里是我的controller:
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;
}
}
}
我想在我的小部件中调用 function setImage()
,但调用后出现问题,您可以在此处查看:
[Get] 检测到 GetX 的不当使用。 您应该只对将要更新的特定小部件使用 GetX 或 Obx。 如果您看到此错误,您可能没有将任何可观察变量插入 GetX/Obx 或将它们插入到 GetX 认为适合更新的 scope 之外(例如:GetX => HeavyWidget => variableObservable)。 如果您需要更新父小部件和子小部件,请将每个小部件包装在 Obx/GetX 中。
这是视图,我在这里调用 controller function:
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 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(),
));
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.