Flattern Wechseln Sie zur Registerkarte neu Geladen Widgets und läuft FutureBuilder

Das Problem:

Habe ich 2 Registerkarten mit Standard-Registerkarten-Controller, etwa so:

Widget build(BuildContext context) {
    return DefaultTabController(
      length: 2,
      child: Scaffold(
        drawer: Menu(),
        appBar: AppBar(
          title: Container(
            child: Text('Dashboard'),
          ),
          bottom: TabBar(
            tabs: <Widget>[
              Container(
                padding: EdgeInsets.all(8.0),
                child: Text('Deals'),
              ),
              Container(
                padding: EdgeInsets.all(8.0),
                child: Text('Viewer'),
              ),
            ],
          ),
        ),
        body: TabBarView(
          children: <Widget>[
            DealList(),
            ViewersPage(),
          ],
        ),
      ),
    );
  }
}

Den DealList() ist ein StatefulWidget was ist so gebaut:

Widget build(BuildContext context) {
    return FutureBuilder(
      future: this.loadDeals(),
      builder: (BuildContext context, AsyncSnapshot snapshot) {
        print('Has error: ${snapshot.hasError}');
        print('Has data: ${snapshot.hasData}');
        print('Snapshot data: ${snapshot.data}');
        return snapshot.connectionState == ConnectionState.done
            ? RefreshIndicator(
                onRefresh: showSomething,
                child: ListView.builder(
                  physics: const AlwaysScrollableScrollPhysics(),
                  itemCount: snapshot.data['deals'].length,
                  itemBuilder: (context, index) {
                    final Map deal = snapshot.data['deals'][index];
                    print('A Deal: ${deal}');
                    return _getDealItem(deal, context);
                  },
                ),
              )
            : Center(
                child: CircularProgressIndicator(),
              );
      },
    );
  }
}

Mit den oben genannten, hier ist, was passiert, wenn ich wechseln Sie zurück zu den DealList() Registerkarte: Es lädt.

Flattern Wechseln Sie zur Registerkarte neu Geladen Widgets und läuft FutureBuilder

Gibt es eine Möglichkeit zu verhindern, re-run der FutureBuilder, wenn einmal getan? (der plan ist für Benutzer, die in der RefreshIndicator neu zu laden. So ändern tabs sollte nicht lösen nichts, es sei denn, explizit getan durch den Benutzer.)

InformationsquelleAutor KhoPhi | 2018-07-07
Schreibe einen Kommentar