【发布时间】:2021-11-13 07:08:42
【问题描述】:
我正在构建一个基于 RxMap 内容呈现的小部件。我从初始化为空的 RxMap 开始,然后单击按钮将 RxMap 设置为包含一个新值。为 RxMap 设置新值后,小部件不会重新渲染以显示新的地图值。
这是我的代码:
(编辑:还包括所有样板文件以防止混淆。每个类都在一个单独的文件中,所有其他文件中都有相关的导入。)
class MyController extends GetxController {
var selectedItem = {}.obs;
}
class MyBinding extends Bindings {
@override
void dependencies() {
Get.put(MyController());
}
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext highContext) {
return GetMaterialApp(
title: 'App',
getPages: [
GetPage(
name: "/test",
page: () => MyClass(),
binding: MyBinding()),
],
initialRoute: "/test",
);
}
}
final saController = Get.find<MyController>();
class MyClass extends StatelessWidget {
Widget build(context) {
print(saController.selectedItem);
return Scaffold(
child: Column(
children: [
Obx(() => Container(
child: Text(saController.selectedItem.toString())
)),
TextButton(
child: Text("click"),
onPressed: (() {
saController.selectedItem = RxMap({"test": "item"});
saController.selectedItem.refresh();
saController.update();
print(saController.selectedItem);
})
)
]
)
);
}
}
第一个 print 语句正确地将空对象打印到控制台,而 onPressed print 语句正确地将新对象及其键和值打印到控制台,但小部件不会使用新值重新渲染。 refresh() 和 update() 似乎没有做任何事情。
这似乎是 RxMap 特有的,我已经能够让其他数据类型成功更新更改,例如将 RxMap 值替换为布尔值并在单击时将其从 true 切换为 false 会导致小部件正确地重新渲染,而无需更改代码的任何其他部分。
【问题讨论】:
-
你放控制器了吗?
-
@CyrustheGreat 是的,我做到了。如果我没有并且根本没有渲染,find() 会抛出错误,而不是页面渲染但行为不正确。
标签: flutter dart flutter-getx