我用Flutter/Dart和GetX框架编写了一个应用程序。在主屏幕上,数据库(ISAR DB)中的内容应以卡片小部件的形式显示。如果您在HomeScreen中单击FAB,则会在新屏幕中加载一个表单,您可以在其中输出新CardWidget的数据。我现在的问题是,当我在模拟器中重新启动应用程序时,就像在真实的设备上一样,没有记录(即。没有卡)显示-如果我改变屏幕并返回或在模拟器中执行热刷新,则显示卡。创建新数据库条目时显示相同的行为:如果返回主屏幕,则只有在屏幕更改或热刷新后,新条目才会显示在主屏幕上。
从这个行为中,我假设HomeScreen没有提供更新的数据--尽管我实际上已经考虑到了这一点,正如下面的代码所示。也许有人可以帮我解决这个问题。我假设从这个行为中,主屏幕没有提供更新的数据-虽然我实际上已经考虑到这一点,因为下面的代码应该显示。也许有人能帮我。
home_screen.dart:
import 'package:flutter/material.dart';
import 'package:get/get.dart';
[imports of widgets]
import '../../controllers/home_screen_controller.dart';
class HomeScreen extends StatelessWidget {
HomeScreen({Key? key}) : super(key: key);
final HomeScreenController homeScreenController = Get.put(HomeScreenController());
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: CxdAppbar(title: 'appbar_01'.tr),
drawer: const NavDrawer(),
body: GetBuilder<HomeScreenController>(
builder: (homeScreenController) {
if (homeScreenController.isLoading.value) {
return const Center(
child: CircularProgressIndicator(),
);
} else {
final allCardEntitys = homeScreenController.allCardEntitys;
return ListView.builder(
itemCount: allCardEntitys.length,
itemBuilder: (context, index) {
return CxdCardWidget1(
id: allCardEntitys[index].id,
title: allCardEntitys[index].title,
tsCd: allCardEntitys[index].tsCd,
imageBytes: allCardEntitys[index].imageBytes ?? [],
bgColor: Color(allCardEntitys[index].bgColor),
fontColor: Color(allCardEntitys[index].fontColor),
dividerColor: Color(allCardEntitys[index].dividerColor),
borderColor: Color(allCardEntitys[index].borderColor),
);
},
);
}
},
),
floatingActionButton: const CxdFloatingActionButton(),
);
}
}
home_screen_controller.dart:
import 'package:get/get.dart';
import '../services/entities/card_entity.dart';
import '../services/isar_service.dart';
class HomeScreenController extends GetxController {
IsarService isarService = IsarService();
RxList<CardEntity> allCardEntitys = RxList([]);
RxBool isLoading = true.obs;
Future<void> getAllCardEntitys() async {
try {
isLoading.value = true;
final cardEntitys = await isarService.getAllCardEntitys();
allCardEntitys.assignAll(cardEntitys);
} finally {
isLoading.value = false;
}
}
@override
void onInit() {
super.onInit();
getAllCardEntitys();
}
}
1条答案
按热度按时间6ss1mwsb1#
当您使用GetBuilder从控制器手动更新小部件的状态时,必须使用update()。
在你的情况下,就像这样使用它: