Проблема с навигацией по приложению Flutter

#flutter #dart #hybrid-mobile-app #sqflite

#флаттер #dart #гибридное мобильное приложение #sqflite

Вопрос:

В моем приложении есть 2 экрана. На первом экране я перечисляю все данные из моей базы данных sqflite. На втором экране я предоставляю функциональность для удаления этой записи. Но когда я извлекаю этот экран из стека. Его следует обновить. Как я могу этого добиться.

Это мой первый код возврата на экран.

 return FutureBuilder<List>(
      future: DatabaseHelper.instance.queryAll(),
      initialData: List(),
      builder: (context, snapshot) {
        return snapshot.hasData
            ? new ListView.builder(
                padding: const EdgeInsets.all(10.0),
                itemCount: snapshot.data.length,
                itemBuilder: (context, i) {
                 
                  print("value : "   snapshot.data.toString());

                  return new Card(
                      child: Column(mainAxisSize: MainAxisSize.min, children: <
                          Widget>[
                  
                    ListTile(
                      leading:
                          Image.file(File(snapshot.data[i]["thumbnail_url"])),

                      title: Text(
                        snapshot.data[i]["title"],
                        style: _biggerFont,
                      ),
                      subtitle: Text(snapshot.data[i]["month"]  
                          ", "  
                          snapshot.data[i]["year"]),
                      
                      onTap: () {
                       
                      },
                    ),

                    ButtonBar(
                      children: <Widget>[
                        Visibility(
                          visible: _isUrduAvail,
                          child: FlatButton(
                            child: const Text('اردو'),
                            onPressed: () {
                            
                                Navigator.of(context).push(MaterialPageRoute(
                                    builder: (context) => OfflinePdfViewer(
                                        snapshot.data[i]["id"].toString(),
                                        snapshot.data[i]["title"],
                                        snapshot.data[i]["urdu_url"],
                                        "Urdu")));
                           
                            },
                          ),
                        ),
                        Visibility(
                          visible: _isEnglishAvail,
                          child: FlatButton(
                            child: const Text('English'),
                            onPressed: () {
                             
                                Navigator.of(context).push(MaterialPageRoute(
                                    builder: (context) => OfflinePdfViewer(
                                        snapshot.data[i]["id"].toString(),
                                        snapshot.data[i]["title"],
                                        snapshot.data[i]["english_url"],
                                        "English")));
                              
                            },
                          ),
                        ),
                        Visibility(
                          visible: _isHindiAvail,
                          child: FlatButton(
                            child: const Text('हिन्दी'),
                            onPressed: () {
                             
                                Navigator.of(context).push(MaterialPageRoute(
                                    builder: (context) => OfflinePdfViewer(
                                        snapshot.data[i]["id"].toString(),
                                        snapshot.data[i]["title"],
                                        snapshot.data[i]["hindi_url"],
                                        "Hindi")));
                            
                            },
                          ),
                        ),
                      ],
                    )
                  ]));
                },
              )
            : Center(
                child: CircularProgressIndicator(),
              );
      },
    );
  

На этом экране я создаю список и заполняю FutureBuilder.

и на втором экране у меня есть кнопка, при нажатии на которую запись будет удалена, но каким будет маршрут для вызова, чтобы ее можно было обновить?

  Navigator.pushAndRemoveUntil(
      context,
      MaterialPageRoute(
        builder: (BuildContext context) => LibraryScreen(),
      ),
      (route) => false,
    );
  

Я пробовал этот код, но он очищает весь мой стек активности.

Ответ №1:

При вызове второго экрана попробуйте использовать ‘pushReplacement’ вместо ‘push’

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

1. обновит ли это список?

2. Он должен перестроить весь экран. Но вы не сможете вернуться с помощью «pop», Чтобы вернуться, вы должны использовать «push» с маршрутом, направленным на ваш первый / предыдущий экран.

Ответ №2:

Если вы нажмете andremoveuntil, вы не сможете вернуться на ту же страницу. Вам нужно нажать его снова, и в этом случае FutureBuilder перестроит, и вы увидите правильные данные.

Или лучшим решением было бы получить ваши данные в виде потока вместо Future и использовать StreamBuilder вместо FutureBuilder.

Ответ №3:

Вы можете попробовать использовать ‘Pushreplacement’, потому что он удалит предыдущий маршрут.

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

1. Хорошо, позволь мне попробовать это.