我想调用字符串函数,在运行应用时使用package_info_plus
获取packageName,如下所示:
class SplashScreenController extends GetxController {
late String one = '';
late RxString two = ''.obs;
@override
void onInit() {
_initPackageInfo();
_setImage();
Timer(Duration(seconds: 5), () => Get.offNamed(Routes.DASHBOARD));
super.onInit();
}
@override
void onClose() {}
Future<void> _initPackageInfo() async {
final info = await PackageInfo.fromPlatform();
one = info.packageName;
}
String _setImage() {
if (one == 'com.package.one') {
return two.value = Images.one;
} else if (one == 'com.package.two) {
return two.value = Images.two;
} else {
return two.value = Images.one;
}
}
}
当我尝试在Image.asset()中调用RxString two
时
@override
Widget build(BuildContext context) {
print(controller.two);
return Obx(() => Scaffold(
body: Container(
color: const Color.fromARGB(255, 255, 255, 255),
alignment: AlignmentDirectional.center,
child: controller.one.isNotEmpty
? Image.asset(controller.two.toString())
: const SizedBox.shrink(),
)));
}
它显示了空值,我是否可以在条件大小写中使用packageName值,然后在Image.asset()
小部件中调用它?
2条答案
按热度按时间fykwrbwg1#
我已经重写了你的控制器和UI代码。请检查出来。
控制器(启动画面)
UI(启动画面)
cngwdvgl2#
这实际上与
Getx
无关,它与Dart语言编程和futures有关,在这段代码中:_initPackageInfo()
是异步方法,需要时间来解析(因此info
变量获得PackageInfo
示例),这意味着同步执行它仍将获得示例,但它不会等待它,它将立即运行_setImage()
,此时PackageInfo.fromPlatform()
尚未得到解析***,因此它是null
,您需要做的是让它等待,直到有示例**,然后**继续运行其他代码: