#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. Хорошо, позволь мне попробовать это.