小部件不会在提供者变量更改时重绘 - Flutter

Widget not redrawing on Provider variable change - Flutter

我有一个名为“FavoritesProvider”的提供程序,它有一个名为“_favoritos”的变量,我在其中存储了一个 ID 列表。

我正在尝试做的是,每次将新项目添加到收藏夹变量或从中删除时,都会重新绘制一个 ListView 小部件。这是我执行此操作的函数,我在其中更新变量和 notifyListeners。

    Future setFavorites(
    int id,
  ) async {
    final prefs = await SharedPreferences.getInstance();
    String _receivedData = (prefs.getString('favorites') ?? "");
    List _decodedData = [];
    if (_receivedData != "") {
      _decodedData = json.decode(_receivedData);
    }
    String _sentData = "";

    if (_decodedData.contains(id)) {
      _decodedData.remove(id);
      _sentData = json.encode(_decodedData);
    } else {
      _decodedData.add(id);
      _sentData = json.encode(_decodedData);
    }

    prefs.setString("favorites", _sentData);
    _favoritos = _decodedData;
    notifyListeners();
    return _favoritos;}

我要重绘的项目是这样嵌套的:

  List<Widget> _widgetOptions = [
    HomePage(),
    FavoriteScreen(),
    CompletedScreen()
  ];

  @override
  Widget build(BuildContext context) {
    return Scaffold(
        body: IndexedStack(
          index: _selectedIndex,
          children: _widgetOptions,
        ),
  @override
  Widget build(BuildContext context) {
    var _favorites = Provider.of<FavoritesProvider>(context).favoritos;

    if (flag == true) {
      if (_favorites.isEmpty) {
        return Center(child: Text("No has añadido favoritos"));
      }

      return ListView(
        children: _loadFavorites(_favorites),
      );
    }
    return Center(
        child: CircularProgressIndicator(
      color: Colors.red,
    ));
  }

你能帮我理解我做错了什么吗?我不知道如何重绘它。 谢谢!

我用一些“丑陋”的东西解决了它:

由于我的提供者、消费者或听众中的 none 可以工作,我打算在每次按下中间底部选项卡时重新加载整个 FavDoneList 小部件。就性能而言,这是一个非常小的代价,不会对用户造成太大影响。

我在主页上这样做了:

  void _onItemTapped(int index) {
if (index == 1) {
  setState(() {
    _widgetOptions.removeAt(1);
    _widgetOptions.insert(1, FavDoneList(key: UniqueKey()));

    _selectedIndex = index;
  });
} else {
  setState(() {
    _selectedIndex = index;
  });
}}

传递唯一键非常重要,否则不起作用。