Нет контекста в обратном вызове из пользовательского виджета - PullRequest
0 голосов
/ 17 мая 2019

Я новичок во Флаттере, поэтому на него наверняка легко ответит кто-то с большим опытом, чем я. Это больше вопрос дизайна, чем проблемы кода.

Иногда я хочу написать повторно используемые виджеты и сделать их несколько универсальными, я хочу иметь обратные вызовы для ввода данных пользователем, чтобы родительский виджет мог подписаться и затем предпринимать надлежащие действия, а не жесткие пути кодирования и т. Д. Но я непосредственно запускаю в беду, если я, например, хочу перейти от моего обратного вызова, поскольку у меня тогда нет контекста. Так, как я проектирую это во Флаттере?

Ответы [ 2 ]

1 голос
/ 17 мая 2019

Вы всегда можете иметь необязательный / обязательный параметр контекста в ваших виджетах без сохранения состояния. Для виджетов с состоянием обычно доступен контекст, но если по какой-то причине вам нужен родительский контекст, вы всегда можете передать его своему виджету. Взгляните на пример ниже

class GenericWidgetFoo extends StatelessWidget {
  final BuildContext context;
  final Key key;
  final String name;

  const GenericWidgetFoo(
      {this.key, @required this.context, @required this.name});

  @override
  Widget build(BuildContext context) {
    return Padding(
      padding: const EdgeInsets.all(8.0),
      child: Center(
          child: Text(
        this.name,
        style: TextStyle(
          color: Theme.of(context).primaryColorLight,
        ),
      )),
    );
  }
}
0 голосов
/ 18 мая 2019

Как сказал выше psink, я просто упустил тот факт, что расширенный класс State фактически имеет доступ к контексту:

Свойства

context → BuildContext Расположение в дереве, где создается этот виджет. [...] только для чтения

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...