【问题标题】:How to refresh ListView after Sorting in Flutter?在 Flutter 中排序后如何刷新 ListView?
【发布时间】:2021-09-01 10:07:50
【问题描述】:

我有一个包含我的客户的 ListView。这个 ListView 当前是一个无状态的 Widget。在对父级内部的客户列表进行排序后,我需要刷新列表。

显示列表的父级(父级是有状态的):

MyLieferListe(
  bestellungen.anzahlPositionen,
  bestellungen.kunde,
  notifyParent: refresh,
),

MyLieferListe(当前无状态):

SingleChildScrollView(
            child: ListView.builder(
              shrinkWrap: true,
              physics: NeverScrollableScrollPhysics(),
              itemBuilder: (context, index) {
                return GestureDetector(
                  onTap: () {
                    getBeleg();
                    this.notifyParent(kunden[index]);
                  },
                  child: MyBestellungText(
                      kunden[index].kundenbezeichnung,
                      kunden[index].kundenNr,
                      "${kunden[index].strasse}, ${kunden[index].plz} ${kunden[index].ort}",
                      kunden[index].tourHinweis),
                );
              },
              itemCount: kunden.length,
            ),
          ),

如何刷新显示在parent里面的Child的ListView?

【问题讨论】:

    标签: flutter listview


    【解决方案1】:

    首先,您必须使列表有状态,因为在更改列表时。你必须调用 setState。

    一个糟糕的解决方案是使用 Navigator.pushReplacement。

    一个好的解决方案是让您的列表成为一个有状态的小部件。

    【讨论】:

      【解决方案2】:

      状态更改会触发 Flutter 中的重建,因此为了确保您的小部件在您对列表进行排序后重建,您应该调用 setState

      // a state variable
      List<Kunde> kunden;
      
      onSortButtonClick() {
          List<Kunde> newKunden = kunden.sort(...);
          
          // store to the state
          setState((){
              kunden = newKunden;
          });
      }
      
      build(WidgetContext context) {
          return ListView.builder(/* use kunden, from state, in here */)
      }
      

      正如你提到的,你的父母已经是有状态的。您应该将bestellungen.kunde 移动到状态变量(首先在initState 中设置它并在每次更改时使用setState),然后如果您通过setState 更新kunden,它应该自动重建小部件。

      或者,您可以使子小部件有状态,并将 kunden 置于该小部件的状态。从理论上讲,这应该会稍微好一些,因为您重建了孩子,而不是父母,但实际上在这种情况下应该不会有太大的不同。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-03-14
        • 2019-08-16
        • 1970-01-01
        • 1970-01-01
        • 2013-03-31
        • 2022-07-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多