Это точно правильно, потому что компилятор должен знать, какой тип он предназначен для распределения. Поэтому классы шаблонов, функции, перечисления и т. Д. Должны быть реализованы также в файле заголовка, если он должен быть опубликован или частично из библиотеки (статический или динамический), поскольку файлы заголовков НЕ скомпилированы в отличие от файлов c / cpp, которые находятся. Если компилятор не знает, что тип не может его скомпилировать. В .Net это возможно, потому что все объекты происходят из класса Object. Это не .Net.
Вы можете окружить свой скаффолд на странице 2 с помощью WillPopScope, установить для onWillPop значение false, чтобы предотвратить появление страницы системой, а затем добавить собственную кнопку «назад» в ведущий виджет панели приложения и выполнить в ней всплывающее окно. ]
@override
Widget build(BuildContext context) {
return new WillPopScope(
onWillPop: () async => false,
child: new Scaffold(
appBar: new AppBar(
title: new Text("data"),
leading: new IconButton(
icon: new Icon(Icons.ac_unit),
onPressed: () => Navigator.of(context).pop(),
),
),
),
);
}
код для ответа от этого поста
Редактировать: дополнение к странице 2 для управления навигацией
В дополнение к Код выше, вы добавите код ниже на страницу 2. Измените
Navigator.of(context).pop()
на
Navigator.of(context).pop('upload_files')
Затем на странице 1, где вы будете перемещаться, вы будете ждать навигации и использовать Результат возвращается из всплывающего окна на странице 2 и запускайте вашу логику
var navigationResult = await Navigator.push(
context,
new MaterialPageRoute(
builder: (context) => Page2()));
if(navigationResult == 'upload_files') {
uploadFiles(); // Perform your custom functionality here.
}