Flutter ListView doesn't refresh UI with setState(), although itemCount and attached list update correctly

I can see only two possible options for why this happens.

First one is obvious, your IdeasDB.db.deleteIdea(idea.url); doesn't delete correct idea from DB;

The second one is less obvious, it's because your Element Tree couldn't recognize what's a widget you are trying to delete. It happens only with Stateful Widgets as your IdeaItem could be.

Solution then is to use key attribute for your IdeaItem widget like this:

ListView.builder(
  itemCount: _favorites.length,
  itemBuilder: (context, index) {
    final idea = _favorites[index];
    return IdeaItem(
      key: ValueKey(idea.url) // or UniqueKey()
      idea: idea,
      onFavoriteToggle: () => deleteFromFavorites(idea),
    );
  },
),

and in your IdeaItem widget you have to pass that key to your parent Stateful widget like in this example:

class IdeaItem extends StatefulWidget {
  final Idea idea;
  Function onFavoriteToggle;

  IdeaItem({Key key, this.idea, this.onFavoriteToggle}) : super(key: key);

  @override
  _IdeaItemState createState() => _IdeaItemState();
}

Try to change

onFavoriteToggle: () => deleteFromFavorites(index),

and then

  void deleteFromFavorites( int index) async {
    await IdeasDB.db.deleteIdea(idea.url);
    setState(() {
      this._favorites.removeAt(index);
    });
  }

See if it works. If yes, there is probably error on deleteIdea().

Also, you know which item should be deleted, so you don't need to await to reload the List from your db. await IdeasDB.db.ideas();

If you want to be sure you can wrap your code with Try catch

  void deleteFromFavorites(int index) async {
    try {
      await IdeasDB.db.deleteIdea(idea.url);
      setState(() {
        this._favorites.removeAt(index);
      });
    } catch (_) {
      print('ERROR');
    }
  }