Flutter GetX 状态没有改变
Flutter GetX state isn't changing
大家好,我需要有关 getx 状态管理的帮助,
我有一个默认加载的布尔值,它在加载数据后更改后为 false
RxBool loading=false.obs;
List<String> texts =<String>[].obs;
getData()async {
print('loadimg :' + loading.value.toString());
loading=true.obs; print('loadimg :' + loading.value.toString());
var result = await http.get(Uri.parse(main_url));
print(result.statusCode.toString());
var data = json.decode(result.body);
data.forEach((element) => texts.add(element["title"]));
print(data);
loading=false.obs;
print('loadimg :' + loading.value.toString());
}
我需要检查这个值,如果它是真的我显示一个小部件否则我显示另一个小部件
但是当我将这个布尔值调用到第二个屏幕时它总是 true
class _HomePageState extends State<HomePage> {
PostController controller = Get.put(PostController());
@override
void initState() {
// TODO: implement initState
super.initState();
controller.getData();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text('App'),),
body:controller.loading.isTrue? Center(child: CircularProgressIndicator()): ListView.builder(itemBuilder: (context,index){
return Card(child: ListTile(title: Text(controller.texts[index],style: TextStyle(color: Colors.black,fontSize: 24),)));
},itemCount: controller.texts.length,),
);
您忘记使用 Obx
小部件或类似的小部件包装脚手架正文内容,这些小部件可以侦听可观察到的变化并重新uild ui。
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('App'),
),
body: Obx(() => controller.loading.isTrue
? Center(child: CircularProgressIndicator())
: ListView.builder(
itemBuilder: (context, index) {
return Card(
child: ListTile(
title: Text(
controller.texts[index],
style: TextStyle(color: Colors.black, fontSize: 24),
)));
},
itemCount: controller.texts.length,
)),
);
}
此外,在您的控制器上,您不必每次都重新分配 loading
变量。就这样做吧loading.value = true;
大家好,我需要有关 getx 状态管理的帮助, 我有一个默认加载的布尔值,它在加载数据后更改后为 false
RxBool loading=false.obs;
List<String> texts =<String>[].obs;
getData()async {
print('loadimg :' + loading.value.toString());
loading=true.obs; print('loadimg :' + loading.value.toString());
var result = await http.get(Uri.parse(main_url));
print(result.statusCode.toString());
var data = json.decode(result.body);
data.forEach((element) => texts.add(element["title"]));
print(data);
loading=false.obs;
print('loadimg :' + loading.value.toString());
}
我需要检查这个值,如果它是真的我显示一个小部件否则我显示另一个小部件 但是当我将这个布尔值调用到第二个屏幕时它总是 true
class _HomePageState extends State<HomePage> {
PostController controller = Get.put(PostController());
@override
void initState() {
// TODO: implement initState
super.initState();
controller.getData();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text('App'),),
body:controller.loading.isTrue? Center(child: CircularProgressIndicator()): ListView.builder(itemBuilder: (context,index){
return Card(child: ListTile(title: Text(controller.texts[index],style: TextStyle(color: Colors.black,fontSize: 24),)));
},itemCount: controller.texts.length,),
);
您忘记使用 Obx
小部件或类似的小部件包装脚手架正文内容,这些小部件可以侦听可观察到的变化并重新uild ui。
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('App'),
),
body: Obx(() => controller.loading.isTrue
? Center(child: CircularProgressIndicator())
: ListView.builder(
itemBuilder: (context, index) {
return Card(
child: ListTile(
title: Text(
controller.texts[index],
style: TextStyle(color: Colors.black, fontSize: 24),
)));
},
itemCount: controller.texts.length,
)),
);
}
此外,在您的控制器上,您不必每次都重新分配 loading
变量。就这样做吧loading.value = true;