Можно ли передать аргументы в PreferredSizeWidget?

#flutter #dart #flutter-web

Вопрос:

Я объявил Scaffold панель приложений как переменную вне области видимости.

 PreferredSizeWidget originAppBar = AppBar(
  centerTitle: true,
          backgroundColor: Colors.white,
          title: ....
 

Это позволяет мне использовать его, назначив originAppBar appBar: кому .

 appBar: originAppBar,
 

Тем не менее, я включил следующий код в originAppBar .

 Navigator.of(context).pushNamed(Profile.route);
 

Это функция, которая требует a BuildContext и не входит в originAppBar .

Возможно ли иметь предпочтительный вариант с аргументом? Вот так С#;

 //C# 
PreferredSizeWidget originAppBar = new PreferredSizeWidget(BuildContext context)

Widget build(BuildContext xontext){ 
....
    appBar: originAppBar(context)
....
}
 

Спасибо.

Ответ №1:

Используйте GlobalKey — назначьте его своему виджету

Global keys uniquely identify elements. Global keys provide access to other objects that are associated with those elements, such as BuildContext.

https://api.flutter.dev/flutter/widgets/GlobalKey-class.html

Комментарии:

1. Спасибо вам за ваш ответ. Неужели его нельзя использовать GlobalKey только для appBar ? В большинстве примеров в сети GlobalKey объявлен в классе, поэтому я думаю, что его нельзя использовать с PreferredSizeWidget . Я слишком новичок, чтобы учиться здесь, может кто-нибудь, пожалуйста, сказать мне?

Ответ №2:

Похоже, что определение было неправильным. Следующее верно.

 PreferredSizeWidget originAppBar(BuildContext context) {
  return AppBar(....
}

....

Widget build(BuildContext context) {
  return Scaffold(
    appBar: originAppBar(context),