Как я могу перезагрузить список снова после вставки новой записи? - PullRequest
1 голос
/ 04 февраля 2020

У меня есть listView, и он создается с использованием Future Builder, все данные извлекаются с сервера, и после того, как я добавил новую запись, запись успешно добавляется в базу данных и Navigate.pop на страницу listView, но мой список не обновил, как я могу обновить sh мой список?

FutureBuilder<List<NewAddressModel>>(
  future: myAddressList,
  builder: (context, snapshot) {
    print(snapshot);
    if (snapshot.hasData)
      return addressList(snapshot.data);
    else if (snapshot.hasError)
      return _buildErrorPage(snapshot.error);
    else
      return _buildLoadingPage();
  },
),
Widget _buildErrorPage(error) => Material(
  child: Center(
    child: Text("ERROR: $error"),
  ),
);
Widget _buildLoadingPage() => Material(
  child: Center(
    child: CircularProgressIndicator(),
  ),
);

IconButton (
  icon: Icon(Icons.add_location),
  onPressed: navigateToAddAddress
)

void navigateToAddAddress() async {
  await Navigator.push(context, MaterialPageRoute(builder: (context) {
    return AddAddress();
  }));
}

Ответы [ 3 ]

2 голосов
/ 04 февраля 2020

Просто переназначить Future вызов функции на myAddressList, затем вызвать setState.

Future<void> navigateToAddAddress() async {
  await Navigator.push(
    context,
    MaterialPageRoute(
      builder: (context) => AddAddress(),
    ),
  );
  setState((){
    myAddressList = _fetchAddressListFromServer();
  });
}
2 голосов
/ 04 февраля 2020

Это потому, что когда вы переходите с одной страницы на другую, то в pu sh вы должны добавить метод whencomplete, как сказал @Abjox: чтобы при переходе обратно на страницу Listview вызывался метод сборки, и futurebuilder будет получить данные и показать в ваших данных в списке, который вы вставили в базу данных.

1 голос
/ 04 февраля 2020

Используйте Navigator.pu sh (). WhenComplete (() {setState () {}}), как это предложено @Abjox.

void navigateToAddAddress() async {
    Navigator.of(context).push
      (new MaterialPageRoute(builder: (context) => AddAddress()))
        .whenComplete((){setState(() {
//          use here that method by which you load data into listView    
        });});
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...