Więc mam stronę główną z rusztowaniem i odświeżaniem iconbutton. Po naciśnięciu przycisku, chcę ponownie uruchomić przyszłość z MyCustomListView w przypadku nowych danych.

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        actions: <Widget>[
          IconButton(
              icon: Icon(Icons.refresh),
              onPressed: () {

              }),
        ],
      ),
      body: Padding(
        padding: const EdgeInsets.fromLTRB(10, 10, 10, 0),
        child: 
            MyCustomListView()
      ),
    );
  }

To jest mój widget {x0}}:

class MyCustomListView extends StatelessWidget {
  Future<List<MyData>> getMyData() async {
    try {
      final response = await http.get(
          Uri.encodeFull(
              'myurl'),);

      if (response.statusCode == 200) {
        return MyDataEntity.fromJson(json.decode(response.body)).myData;
      }
    } catch (e) {
      throw Exception(e);
    }
  }

  @override
  Widget build(BuildContext context) {
    return FutureBuilder<List<MyData>>(
      future: getMyData(),
      builder: (context, snapshot) {
        if (!snapshot.hasData) {
          return SliverToBoxAdapter(
            child: Center(
              child: Spinner(),
            ),
          );
        } else {
          final _myData = snapshot.data;
          return SliverList(
            delegate: SliverChildBuilderDelegate(
              (BuildContext context, int index) {

              },
              childCount: _myData == null ? 0 : _myData.length,
            ),
          );
        }
      },
    );
  }
}

Jak mogę ponownie uruchomić przyszłość z rodzica w HomePage? Czy potrzebuję GlobalKey, innej funkcji i trzeba konwertować widżet do StateFul?

0
Jona 26 marzec 2020, 18:32

2 odpowiedzi

Najlepsza odpowiedź

Obejście jest tworzenie strony A StatefulWidget , a następnie wywołaj setstate po naciśnięciu przycisku.

Zostanie ponownie ponownie włączyć metodę Budowy, ponownie załadując nowe dane

    IconButton(
      onPressed: (){
        setState((){

        });
      },
    )

Mam nadzieję, że to Ci pomoże.

1
Josteve 26 marzec 2020, 15:41

W tym scenariuszu można użyć zwykłego Buidera Konwertuj na widget statefull i załaduj dane w initstate.

@override
void initState() {
    super.initState();
    // load data here
    // call steState
}

Nie zapomnij uruchomić Setstate in initstate

0
Mammad 26 marzec 2020, 17:36