【问题标题】:Getx await to build the listGetx 等待构建列表
【发布时间】:2021-12-13 11:26:49
【问题描述】:

我有一个方法需要在构造ListView.builder之前先执行获取项目,如何保持这个方法总是在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];
    ...
  }
}

【问题讨论】:

    标签: flutter flutter-getx


    【解决方案1】:

    可能你不能这样做,但你可以在它发生时更新你的用户界面。你可以试试这个吗?

    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];
    ...
        }
       }
    

    【讨论】:

    • 如果foo方法需要foo(String token)这样的参数,如何添加这个动作?
    • 嘿@ccd!我为你编辑了代码。你可以再检查一遍。
    猜你喜欢
    • 2022-01-16
    • 2021-03-05
    • 2020-01-25
    • 2019-07-04
    • 1970-01-01
    • 2018-02-19
    • 2013-07-11
    • 2016-04-10
    • 2020-12-28
    相关资源
    最近更新 更多