В классе State, несмотря на то, что не вызывается вызов setState (), он перестраивается с новыми элементами, когда виджет возвращается из Navigator.pop (). Как такое могло произойти?
В моем упрощенном коде ниже ListView
перестраивается всякий раз, когда я нажимаю кнопку и открываю нажатый виджет.
Это потому, что Navigator.push()
удаляет текущий виджет, а виджет повторно отрисовывается после Navigator.pop()
?
class _TestState extends State<Test> {
List<int> initialList = [];
@override
Widget build(BuildContext context) {
return Scaffold(
floatingActionButton: FlatButton(
onPressed: () async {
var nothing = await Navigator.of(context).push(
MaterialPageRoute(builder: (_context) => PushedWidget()),
);
// the State is rebuilt without calling setState()
initialList.add(1);
},
child: Text('test'),
),
body: Container(
child: ListView.builder(
itemCount: initialList.length,
itemBuilder: (context, idx) {
return Text('${initialList[idx]}');
},
),
),
);
}
}
class PushedWidget extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(leading: IconButton(onPressed: () => _pop(context), icon: Icon(Icons.close))),
);
}
void _pop(BuildContext context) {
Navigator.of(context).pop('popped');
}
}
Я читал документы и коды реализации. Но я не нашел ответа на этот вопрос.