Flutter: как синхронизировать данные из sqlite?

#sqlite #flutter

#sqlite #flutter

Вопрос:

             TextEditingController textEditingController = TextEditingController();
            bool editState = false;

            StatefulBuilder(
                builder: (context, setState){
                  return AlertDialog(
                      content: SingleChildScrollView(
                        child: Column(
                          children: [
                            Container(
                              child: Padding(
                                padding: const EdgeInsets.only(bottom: 8, left: 8, right: 8),
                                child: Align(
                                    alignment: Alignment.centerLeft,
                                    child: editState ?
                                    TextField(
                                      controller: textEditingController,
                                    ) :
                                    Text(checkpoint["memo"])
                                ),
                              ),
                            ),
                            Container(
                              child: Row(
                                mainAxisAlignment: MainAxisAlignment.spaceAround,
                                children: [
                                  Padding(
                                    padding: const EdgeInsets.only(bottom: 8),
                                    child: GestureDetector(
                                      child: editState ? Text("Save") : Text("Edit"),
                                      onTap: () async {
                                        if(editState == true){
                                          DBHelper dbHelper = DBHelper();
                                          await dbHelper.updateCheckpoint(checkpoint["userkey"], checkpoint["id"], textEditingController.text);
                                        }
                                        else{
                                          setState((){
                                            editState = !editState;
                                          });
                                        }
                                      },
                                    ),
                                  ),
                                ],
                              ),
                            )
                          ],
                        ),
                      )
                  );
                },
              )
  

Это мой код. Я хочу Text (checkpoint ["memo"]) , чтобы они обновлялись, когда я что-то набираю и нажимаю кнопку сохранить.
Я пытался использовать ChangeNotifierProvider , но это не сработало. Возможно, я использовал его неправильно. Поэтому я не знаю, как подойти к этой проблеме. Как я могу это решить?

Ответ №1:

Для текстового поля существует один метод OnChanged() . Что дает вам обновленный текст. Вы можете сохранить этот текст в некоторой переменной и использовать ту же переменную для отображения текста там, где вы хотите его отобразить. Не забудьте вызвать setState() что-то вроде следующего в OnChanged(), чтобы обновить текст текстового поля.

 setState(() { _memo = newTextValue; });