Flutter: как передать параметр с одного экрана на другой, не меняя экран

Я начал использовать флаттер недавно и в настоящее время занимаюсь навигацией. Я хочу знать, есть ли способ передать параметр от одного виджета к другому (или с одного экрана на другой) без необходимости вызывать функцию построителя и изменять экран? Я смотрел onGenerateRoute и навигаторы, но все они вызывают изменение экрана. Есть ли способ заблокировать это изменение во время navigator.push ()?

На самом деле я хочу очень просто. Я хочу, чтобы кнопка переключения передавала логическое значение виджету, который его считывает и применяет к условному выражению.


person erbaz kamran    schedule 17.05.2020    source источник
comment
Зачем для этого нужен новый виджет / экран? Если единственное, что вам нужно, это то, что ваш переключатель влияет на пользовательский интерфейс, вы должны использовать StatefulWidget и setState метод.   -  person puelo    schedule 17.05.2020
comment
Если вы хотите передать куда-то только логическое значение, вы можете использовать общие настройки, чтобы сохранить его значение, или вам нужно применить что-то, что вы можете использовать, но как будет работать этот виджет или страница без сборки? Если вы дадите больше информации, какова ваша основная цель, возможно, мы сможем предложить что-нибудь еще.   -  person Lunedor    schedule 17.05.2020
comment
@puelo можно ли установить состояние родственного элемента (или родительского виджета) с помощью события нажатия на рассматриваемый виджет? Допустим, у меня есть кнопка переключения, которая дает логическое значение true, но как я могу отправить это родственному или родительскому виджету. Или даже дочерний виджет без перехода к нему?   -  person erbaz kamran    schedule 17.05.2020
comment
@erbazkamran Если родитель перестраивается из-за setState, все дочерние элементы также будут перестроены. Вы можете просто передать логическое значение в конструктор дочернего виджета, и он также должен быть перестроен.   -  person puelo    schedule 17.05.2020
comment
@puelo, тогда есть ли способ отправить данные от дочернего элемента к родительскому? Я прочитал о VoidCallback и буду рассматривать его как решение моей проблемы. Как вы думаете, это правильный метод, или мне следует использовать систему государственного управления, такую ​​как BLoC? Спасибо за ответы.   -  person erbaz kamran    schedule 17.05.2020
comment
Если оно станет большим приложением, чем я предлагаю вам использовать какое-то управление состоянием, да. Я считаю, что Flutter имеет встроенное управление состоянием, но вы должны выбрать то, что вам подходит.   -  person puelo    schedule 17.05.2020


Ответы (1)


Вам следует сделать так:

            child: RaisedButton(
              onPressed: () {
                Navigator.push(
                  context,
                  MaterialPageRoute(
                    builder: (context) => SecondPage(
                      value: true,
                    ),
                  ),
                );
              },
            ),



class SecondPage extends StatelessWidget {
  final bool value;

  const SecondPage({Key key, @required this.value}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Container();
  }
}
person M.B    schedule 17.05.2020
comment
но разве это не изменит экраны? Как я могу добиться того же эффекта, но без этого изменения? - person erbaz kamran; 17.05.2020
comment
@erbaz kamran У меня такая же проблема, вы нашли решение? - person blue492; 17.03.2021