Как динамически изменить заголовок приложения в Flutter Web? - PullRequest
1 голос
/ 28 февраля 2020

Веб-приложения обычно отображают отображаемый в данный момент контент в заголовке вкладки .

Предоставление параметра title в MaterialApp или WidgetsApp означает, что я не могу изменить его без перестроения всего дерева , то есть вызова setState на верхнем уровне, где я возвращаю свой MaterialApp.

MaterialApp(
  title: 'Web app title',
  ...,
)

Я хочу иметь возможность изменить название приложения с в любом месте в приложении на в любое время . Как мне это сделать?

1 Ответ

2 голосов
/ 28 февраля 2020

Dynami c заголовок приложения во флаттере

заголовок приложения может быть динамически изменен на всех платформах с использованием SystemChrome.setApplicationSwitcherDescription:

@override
Widget build(BuildContext context) {
    SystemChrome.setApplicationSwitcherDescription(ApplicationSwitcherDescription(
      label: 'Dynamic web app title',
      primaryColor: Theme.of(context).primaryColor.value,
    ));


  return Container(...);
}

Screen capture

SystemChrome становится доступным с import 'package:flutter/services.dart'; и вы хотите позвонить setApplicationSwitcherDescription в вашем build методе .

Это также как Title делает это (см. исходный код ), который является виджетом, используемым WidgetsApp, MaterialApp, et c.

Таким образом, вы также можете использовать виджет Title вместо доступа к SystemChrome себе:

@override
Widget build(Context context) {
  return Title(
    label: 'Dynamic app title',
    primaryColor: Theme.of(context).primaryColor.value,
    child: ..,
  );
}

label

Параметр label довольно прямо: он точно соответствует тому, что title находится в вашем MaterialApp и просто String.

primaryColor

primaryColor определит цвет, который может использовать система используйте в переключателе приложений, например, цвет строки заголовка в последних значениях Android.
Это int вместо из Color, поэтому вам нужно позвонить Color.value для преобразования вашего основного цвета в целое число.

Помехи другим Title s

Вы можете спросить себя, звоните ли вы setApplicationSwitcherDescription или вставляете виджет Title если установлено свойство title для MaterialApp, это может вызвать любые проблемы.
Ответ: no , поскольку виджет, который находится в самом низу дерева, будет устанавливать заголовок. По сути, даже если все приложение перестраивается, ваш setApplicationSwitcherDescription будет вызываться после того, как MaterialApp, при условии, что вы вызываете его в потомке, и поэтому вы переопределите заголовок MaterialApp.

...