flutter/getx 如何初始化可空对象observable
flutter/getx how to initialize nullable obejct observable
假设我有这样的控制器:
class ProfileController extends GetxController {
Rx<UserFacebookInfo?> facebookInfo = null.obs;
void facebookSync() async {
//
// logic to get user info from facebook
//
facebookInfo.value = UserFacebookInfo.fromFacebookApi(userData);
// facebookInfo = UserFacebookInfo.fromFacebookApi(userData).obs; <=== also tried this
update();
}
}
}
在小部件中我有这样的东西:
Widget buildFacebook() => Padding(
padding: const EdgeInsets.only(top: 30.0, right: 20.0, left: 20.0, bottom: 10.0),
child: Obx(() => (_profileController.facebookInfo.value == null) ? Column(
children: [
IconButton(
icon : const Icon(Icons.facebook_outlined, size: 40.0),
onPressed: () => _profileController.facebookSync()
),
const Text(
'Facebook',
style: TextStyle(color: Colors.white),
)
],
) :
Column(
children: [
UserProfileAvatar(
avatarUrl: _profileController.facebookInfo.value!.facebookAvatar,
radius: 40,
),
Text(
_profileController.facebookInfo.value!.name,
style: const TextStyle(color: Colors.white),
)
],
)
));
并且因为初始值可以为空,所以它无法正常工作并且不会即时更改小部件,但前提是我从 android studio 更新它。初始化它的正确方法是什么???我有类似的情况,可以观察到可为空的字符串,所以我能够将它初始化为 String string
(null as String?).obs` 感谢您的任何建议
您可以使用 Rxn<Type>()
.
初始化可为空的可观察对象
因此使用这个:
final facebookInfo= Rxn<UserFacebookInfo>();
假设我有这样的控制器:
class ProfileController extends GetxController {
Rx<UserFacebookInfo?> facebookInfo = null.obs;
void facebookSync() async {
//
// logic to get user info from facebook
//
facebookInfo.value = UserFacebookInfo.fromFacebookApi(userData);
// facebookInfo = UserFacebookInfo.fromFacebookApi(userData).obs; <=== also tried this
update();
}
}
}
在小部件中我有这样的东西:
Widget buildFacebook() => Padding(
padding: const EdgeInsets.only(top: 30.0, right: 20.0, left: 20.0, bottom: 10.0),
child: Obx(() => (_profileController.facebookInfo.value == null) ? Column(
children: [
IconButton(
icon : const Icon(Icons.facebook_outlined, size: 40.0),
onPressed: () => _profileController.facebookSync()
),
const Text(
'Facebook',
style: TextStyle(color: Colors.white),
)
],
) :
Column(
children: [
UserProfileAvatar(
avatarUrl: _profileController.facebookInfo.value!.facebookAvatar,
radius: 40,
),
Text(
_profileController.facebookInfo.value!.name,
style: const TextStyle(color: Colors.white),
)
],
)
));
并且因为初始值可以为空,所以它无法正常工作并且不会即时更改小部件,但前提是我从 android studio 更新它。初始化它的正确方法是什么???我有类似的情况,可以观察到可为空的字符串,所以我能够将它初始化为 String string
(null as String?).obs` 感谢您的任何建议
您可以使用 Rxn<Type>()
.
因此使用这个:
final facebookInfo= Rxn<UserFacebookInfo>();