插入新记录后如何重新加载列表?

时间:2020-02-04 11:53:55

标签: listview flutter dart

我有一个listView,它是使用Future Builder创建的,所有数据都是从服务器获取的,添加新记录后,记录已成功添加到数据库中,Navigate.pop已成功添加到listView页面中,但是我的列表未刷新,如何刷新我的列表?

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 个答案:

答案 0 :(得分:2)

这是因为当您从一个页面导航到另一页面时,应在推送中添加@Abjox所说的whencomplete方法,以便当您导航回到Listview页面时,将调用build方法,并且futurebuilder将获取数据。并在您插入数据库的列表中的数据中显示。

答案 1 :(得分:2)

只需将Future函数调用重新分配给myAddressList,然后再调用setState

Future<void> navigateToAddAddress() async {
  await Navigator.push(
    context,
    MaterialPageRoute(
      builder: (context) => AddAddress(),
    ),
  );
  setState((){
    myAddressList = _fetchAddressListFromServer();
  });
}

答案 2 :(得分:1)

像@Abjox建议的那样使用Navigator.push()。whenComplete((){setState(){}})这样的

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    
        });});
  }