Вы можете окружить свой скаффолд на странице 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.
}
В жемчуге
s/(.)\1+/$1/g;
Добивается цели, я принимаю, имеет ли Java жемчуг совместимый regexps, он должен работать также.
Редактирование: Вот то, что это означает
s {
(.) # match any charater ( and capture it )
\1 # if it is followed by itself
+ # One or more times
}{$1}gx; # And replace the whole things by the first captured character (with g modifier to replace all occurences)
Редактирование: Как другие указали, синтаксис в Java стал бы
original.replaceAll("(.)\\1+", "$1");
, не забывают выходить \1
String a = "aaabbb";
String b = a.replaceAll("(.)\\1+", "$1");
System.out.println("'" + a + "' -> '" + b + "'");
шаблон соответствия (в Java/языках, где \должен быть оставлен):
(.)\\1+
или (на языках, где можно использовать строки, которые не рассматривают \как символ ESC)
(.)\1+
замена :
$1
В Perl:
tr/a-z0-9//s;
Пример:
$ perl -E'@a = (aaabbb, 14442345); for(@a) { tr/a-z0-9//s; say }'
ab
142345
, Если Java не имеет никакого tr
аналог затем:
s/(.)\1+/$1/sg;
#NOTE: `s` modifier. It takes into account consecutive newlines.
Пример:
$ perl -E'@a = (aaabbb, 14442345); for(@a) { s/(.)\1+/$1/sg; say }'
ab
142345
в TextEdit (принимающий posix выражения) найдите: + [b] + заменяют: ab