Getx await构建列表



我有一个方法需要在构造ListView之前首先执行以获取项目。构建器,如何保持这个方法总是执行前ListView?

class TestModel extends GetxController {
final items = <Item>[].obs;
void init() async {
items.value = getRemoteItems();
}
}
class TestScreen extends StatelessWidget {
final TestModel testModel = Get.put(TestModel());
@override
Widget build(BuildContext context) {
if (testModel.items.isEmpty) {
testModel.init(); // It seems the ListView can not get the testModel's items.
}
return Obx(
() => ListView.builder(
itemCount: testModel.items.length, // But the items length is always 0.
itemBuilder: (context, index) {
final item = testModel.items[index];
...
}
}

可能你不能这么做但你可以在它发生时更新你的ui。你能试试这个吗?

class TestModel extends GetxController {
final items = <Item>[];
String token = ''; //if it's dynamic, don't do this...
void onInit() {
// this runs your method at the beginning
// but if you wanna aviod this, 
// you can remove here.
foo();
}
void foo(
String token //...do this and run this with token.
) async {
items.value = await getRemoteItems(token);
update();
}
}
class TestScreen extends StatelessWidget {
final TestModel testModel = Get.put(TestModel());
@override
Widget build(BuildContext context) {
if (testModel.items.isEmpty) {
testModel.foo();
return Container(); // or loading screen.
}
return GetxController<TestModel>(
builder: (_) => ListView.builder(
itemCount: _.items.length, 
itemBuilder: (context, index) {
final item = _.items[index];
...
}
}

最新更新