Мое обновление на sqlite не является постоянным (после смены страницы)

#flutter #dart

#flutter #dart

Вопрос:

Итак, я работал над этим приложением из учебника, и у меня все заработало, но часть, в которой обновление остается постоянным, элементы ListTile обновляются, когда я нажимаю кнопку для обновления (onTap), но они меняют свои значения на исходные после того, как я покидаю страницу. Вот мой код для обновления:

 Future<int> update(Food food) async {
final db = await database;

return await db.update(
  TABLE_FOOD,
  food.toMap(),
  where: "id = ?",
  whereArgs: [food.id],
);
  

}

 class UpdateFood extends FoodEvent {
  Food newFood;
  int foodIndex;

  UpdateFood(int index, Food food) {
    newFood = food;
    foodIndex = index;
  }
}
  

Кнопка обновления обновляет значения элементов ListTile, но они не остаются постоянными, они возвращаются к исходным значениям после изменения страницы, а затем возвращаются к основному.

Вот состояние инициализации, возможно, с ним что-то не так:

   void initState() {
    super.initState();
    DatabaseProvider.db.getFoods().then(
      (foodList) {
        BlocProvider.of<FoodBloc>(context).add(SetFoods(foodList));
      },
  

Я понимаю, если проблема не в одном из них, но, возможно, в setState или initState, поэтому вот полный код Github, это очень короткое приложение, и, вероятно, кому-то потребуется всего несколько минут, чтобы сказать, в чем проблема:

https://github.com/cheetahcoding/CwC_Flutter/tree/sqflite_tutorial/lib

Ответ №1:

Я думаю, вам не хватает обновления обновленного Food объекта в БД в food_form.dart

 // This one is the updated one, 
Food food = Food(
  id: widget.food.id, // add this line
  name: _name,
  calories: _calories,
  isVegan: _isVegan,
);

DatabaseProvider.db.update(food).then(    // <= change "widget.food" to "food"
  (storedFood) => BlocProvider.of<FoodBloc>(context).add(
  UpdateFood(widget.foodIndex, food),
  ),
);
  

транзакция обновления БД выполнена успешно, но значения являются старыми.

Комментарии:

1. Я не могу отблагодарить вас, я знал, что проблема существует, но после тысяч строк я не мог ее понять. Слава!

2. Добро пожаловать! Вы можете ознакомиться с режимом отладки и разделить действие на множество шагов. Это может помочь в отладке.