【发布时间】:2021-07-22 04:04:10
【问题描述】:
描述错误 我有两个控制器,第一个是 LoginController 用于保存用户登录状态,第二个是 settingsController 来管理应用程序设置,我在设置小部件中有一个切换器按钮来更改用户状态(可用,不可用),这样做我使用 Get.put ,它可以显示用户状态,但是当我尝试更改状态时出现问题,设置小部件没有改变它的状态
**复制代码
class AppPages {
static const INITIAL = AppRoutes.RootURL;
static final routes = [
//Simple GetPage
GetPage(
name: AppRoutes.HomePageURL,
page: () => HomePage(),
binding: BindingsBuilder(() => Get.lazyPut(() => HomeController())),
transition: Transition.fade,
parameter: {},
middlewares: [],
children: [],
),
GetPage(
name: AppRoutes.LoginPageURL,
page: () => LoginPage(),
binding: BindingsBuilder (() => Get.put<LoginController>(LoginController(), permanent: true)),
parameter: {},
middlewares: [],
children: [],
),
GetPage(
name: AppRoutes.RegisterPageURL,
page: () => RegisterPage(),
binding: BindingsBuilder(() => Get.lazyPut(() => RegisterController())),
parameter: {},
middlewares: [],
children: [],
),
GetPage(
name: AppRoutes.SettingsPageURL,
page: () => SettingsPage(),
binding: BindingsBuilder (() => Get.put<SettingsController>(SettingsController(), permanent: true)
),
parameter: {},
middlewares: [],
children: [],
),
GetPage(
name: AppRoutes.NotifiesPageURL,
page: () => NotifiesPage(),
binding: BindingsBuilder(
() => Get.lazyPut(() => NotifiesController())
),
parameter: {},
middlewares: [],
children: [],
),
GetPage(
name: AppRoutes.OrdersPageUrl,
page: () => OrdersPage(),
binding: BindingsBuilder(
() => Get.lazyPut(() => OrdersController())
),
parameter: {},
middlewares: [],
children: [],
),
GetPage(
name: AppRoutes.OrdersPageUrl,
page: () => OrderContainerPage(),
binding: BindingsBuilder(
() => Get.lazyPut(() => OrdersController())
),
parameter: {},
middlewares: [],
children: [],
),
GetPage(
name: AppRoutes.OrderDetailsPageUrl,
page: () => OrderDetailsPage(),
binding: BindingsBuilder(() => Get.lazyPut(() => OrderDetailsController())),
parameter: {},
middlewares: [],
children: [],
),
GetPage(
name: AppRoutes.ContactPageURL,
page: () => ContactPage(),
binding: BindingsBuilder(() => Get.lazyPut(() => ContactController())),
transition: Transition.fade,
parameter: {},
middlewares: [],
children: [],
),
GetPage(
name: AppRoutes.PagesUrl,
page: () => PostsPage(),
binding: BindingsBuilder(() => Get.lazyPut(() => PostsController())),
transition: Transition.fade,
parameter: {},
middlewares: [],
children: [],
),
];
}
class SettingsPage extends GetView<SettingsController> {
final user = Get.put(LoginController());
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.white,
body: Obx(
() => Container(
height: 70,
decoration: BoxDecoration(
color: AppColors.primaryColor,
backgroundBlendMode: BlendMode.softLight,
),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceAround,
children: [
Text(
"change status",
style: AppStyles.primaryMediumTextStyle,
),
_buildAvailableButton('Available', 1),
_buildAvailableButton('Not Available', 0),
],
),
),
)
);
}
_buildAvailableButton(text, btnStatus) {
return Container(
alignment: Alignment.center,
child: ConstrainedBox(
constraints: BoxConstraints.tightFor(width: 100, height: 35),
child: ElevatedButton(
style: ElevatedButton.styleFrom(
primary: user.userData.value.status == btnStatus
? AppColors.primaryColor
: AppColors.secondaryColor,
// AppColors.primaryColor, AppColors.secondaryColor
shape: RoundedRectangleBorder(
side: BorderSide(
color: AppColors.primaryColor,
width: 1,
style: BorderStyle.solid),
borderRadius: BorderRadius.circular(65))),
child: Text(text,
style: user.userData.value.status == btnStatus
? AppStyles.primaryCardText
: AppStyles.secondaryCardText),
// AppStyles.primaryCardText AppStyles.secondaryCardText
// AppStyles.secondaryCardText
onPressed: () async {
user.userData.value.status = btnStatus ;
},
),
),
);
}
}
复制 重现行为的步骤:
- 点击_buildAvailableButton
- 用户状态没有改变
预期行为 当更改用户状态时,小部件应该重建以影响此更改
Flutter 版本: 颤振 2.0.5 Getx 版本: 得到:^4.1.4
描述您在哪个设备上发现了该错误: 例如:小米安卓。
最少的重现代码
onPressed: () async {
user.userData.value.status = btnStatus ;
},
【问题讨论】:
-
你能分享你的相关Getx课程吗?目前尚不清楚您是否正确实施
user以使其可观察。 -
还有你真正想要更新的 UI 部分,因为看起来你只是在共享按钮和设置页面。您要更新的状态在应用中的其他位置,对吗?
标签: flutter flutter-getx