Flutter устанавливает для фона ThemeData значение LinearGradient - PullRequest
0 голосов
/ 01 августа 2020

Есть ли способ установить для класса backgroundColor из ThemeData LinearGradient? Мое приложение будет переключаться между разными темами, и я хочу, чтобы у каждой темы был свой градиент. Я попытался установить LinearGradient на backgroundColor, но дал мне ошибку The argument type 'LinearGradient' can't be assigned to the parameter type 'Color'..

это то, что я пробовал

final _darkTheme = ThemeData(
    primarySwatch: Colors.grey,
    primaryColor: Colors.black,
    brightness: Brightness.dark,
//    backgroundColor: const Color(0xFF212121),
    backgroundColor: const LinearGradient(colors: [Colors.blue, Colors.green]),
    accentColor: Colors.white,
    floatingActionButtonTheme:
        FloatingActionButtonThemeData(foregroundColor: Colors.black),
    dividerColor: Colors.black12,
);

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

1 Ответ

0 голосов
/ 02 августа 2020

Возможно, это не лучший и эффективный способ сделать это, но очень простое решение, которое работает. Я создал две переменные в своем классе темы MyThemes. В зависимости от выбранной темы эти две переменные, gradientColorA и gradientColorB, изменятся соответственно. Я просто вызываю эти переменные через конструктор - TriviaThemes.gradientColorA.

Это мой класс темы:

class MyThemes {
    static Color gradientColorA = Color(0xFFFFFFFF);
    static Color gradientColorB = Color(0xFF000000);

    ThemeData getTheme(String themeName) {
      if (themeName == 'darkTheme') {
        gradientColorA = Color(0xFFFFFFFF);
        gradientColorB = Color(0xFF000000);
        return _darkTheme;
      } else if (themeName == 'lightTheme') {
        gradientColorA = Color(0xFF000000);
        gradientColorB = Color(0xFFFFFFFF);
        return _lightTheme;
      } else {
      return _lightTheme;
    }
  }

  final _darkTheme = ThemeData(
    primarySwatch: Colors.grey,
    primaryColor: Colors.black,
    brightness: Brightness.dark,
    accentColor: Colors.white,
    floatingActionButtonTheme:
        FloatingActionButtonThemeData(foregroundColor: Colors.black),
    dividerColor: Colors.black12,
  );

  final _lightTheme = ThemeData(
    accentColor: Colors.black,
    backgroundColor: const Color(0xFFE5E5E5),
    brightness: Brightness.light,
    buttonColor: Colors.blue,
    dividerColor: Colors.white54,
    disabledColor: Colors.grey,
    floatingActionButtonTheme:
        FloatingActionButtonThemeData(foregroundColor: Colors.white),
    fontFamily: 'Simplifica',
    primarySwatch: Colors.grey,
    primaryColor: Colors.white,
  );
}

Вот как выглядит код градиента:

gradient: LinearGradient(
  begin: Alignment.topCenter,
  end: Alignment.bottomCenter,
  colors: [
    TriviaThemes.gradientColorA,
    TriviaThemes.gradientColorB,
  ],
),
...