【问题标题】:How can I reload list again after new record inserted?插入新记录后如何重新加载列表?
【发布时间】:2020-05-20 05:59:03
【问题描述】:

我有一个 listView,它是使用 Future Builder 创建的刷新了,如何刷新我的列表?

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

【问题讨论】:

  • 您是否尝试使用 Navigator.push().whenComplete(() { setState() {} })?
  • 我使用@override void didChangeDependencies() { super.didChangeDependencies(); 解决了它_myList = hitApiGetData();这是正确的方法吗?

标签: listview flutter dart


【解决方案1】:

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

【讨论】:

  • 如果我删除一条记录,你能告诉我同样的删除操作吗?该记录被删除但列表没有刷新?
  • 我使用@override void didChangeDependencies() { super.didChangeDependencies(); 解决了它_myList = hitApiGetData();这是正确的方法吗?
  • 您应该查看他的帖子以供参考:stackoverflow.com/questions/54641746/…。如果它有效,那就太好了。
  • 请在此查询中提供更多帮助stackoverflow.com/questions/59942915/…
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-06
    • 2015-03-05
    • 1970-01-01
    • 1970-01-01
    • 2012-05-11
    • 1970-01-01
    • 2017-03-30
    相关资源
    最近更新 更多