Различать определенные виджеты в пользовательских тематических данных

#flutter #dart #key #themes

#flutter #dart #Клавиша #темы

Вопрос:

Мне было интересно, существует ли возможность различать разные отдельные виджеты в приложении из класса ThemeData(). Могу ли я, например, использовать key виджет для получения того же эффекта, class что и или id в HTML / CSS?

Предположим, у меня есть следующий код:

 import 'package:flutter/material.dart';

ThemeData customTheme(BuildContext context) {
  return ThemeData.light().copyWith(
    appBarTheme: AppBarTheme(
      backgroundColor: customBlueColor,
    ),
  )
}
 

Есть ли какой-нибудь способ проверить key или что-то еще в виджете таким образом?

 appBarTheme: widgetKeyIs('greenAppBar')
  ? AppBarTheme(
    backgroundColor: customGreenColor,
  )
  : AppBarTheme(
    backgroundColor: customBlueColor,
  ),
 

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

Ответ №1:

Вероятно, вы могли бы использовать shared_preferences , добавить общую переменную (bool) isGreenAppBar . Это поможет вам.

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

Для поддержки этого сценария вы можете использовать provider вместе с shared_preferences .

Использование shared_preferences необязательно, если вы не хотите, чтобы значение сохранялось и восстанавливалось при запуске приложения.

Это пример использования обоих пакетов. Ссылка theme , которая в вашем случае может быть isGreenAppBar .

Вопрос, похоже, похож на тематизацию. Итак, это может ответить на ваш вопрос об использовании ключа для изменения темы панели приложений.