Как создать собственный файл темы для приложения Flutter - PullRequest
0 голосов
/ 26 мая 2020

Я ищу собственный шаблон цветовой темы во Flutter. Что-то вроде следующего написано на Swift.

struct Colors {
    struct Text {
        static var success: UIColor {
            return UIColor.green
        }
        static var error: UIColor {
            return UIColor.red
        }
    }

    struct Button {
        static var normal: UIColor {
            return UIColor.black
        }
        static var onPressed: UIColor {
            return UIColor.blue
        }
    }
}

Чтобы я мог использовать что-то вроде,

let successTextColor = Colors.Text.success
let normalButtonColor = Colors.Button.normal

> Основная цель:

Я ищу что-то подходящее или лучшее для проекта флаттера, приведенное выше только для справки.

Я попытался переопределить ThemeData, но, насколько я понимаю, я могу переопределить только TextTheme и не могу использовать какие-либо настраиваемые значения, такие как errorText или successText, et c.

Я хочу что-то, что предоставит мне цветовую палитру (шрифты, размер и т. Д. c) для кнопок или других виджетов.

Также помните, что мне нужно поддерживать светлую и темную тему.

Любые предложения будут приняты во внимание.

Ответы [ 2 ]

1 голос
/ 10 июня 2020

Вот моя светлая тема. Я заменяю базовую на разные цвета для текста et c и внизу buttonTheme:

import 'package:flutter/material.dart';

ThemeData lightTheme() {
  TextTheme _basicTextTheme(TextTheme base) {
    return base.copyWith(
      headline1: base.headline1.copyWith(
        fontSize: 72.0,
        fontWeight: FontWeight.bold,
        fontFamily: 'Lato',
        color: Colors.white,
      ),
      headline6: base.headline6.copyWith(
        fontSize: 23.0,
        fontFamily: 'Lato',
      ),
      bodyText2: base.bodyText2.copyWith(
        fontSize: 16.0,
        fontFamily: 'Lato',
        color: Colors.deepPurple[300],
      ),
      headline4: base.headline4.copyWith(
        fontSize: 18.0,
        fontFamily: 'Lato',
        color: Colors.deepPurple[600],
      ),
      headline5: base.headline4.copyWith(
        fontSize: 18.0,
        fontFamily: 'Lato',
        color: Colors.deepPurple[50],
        //buttons
      ),
      caption: base.headline5.copyWith(
        fontSize: 12.0,
        fontFamily: 'Lato',
      ),
      bodyText1: base.bodyText1.copyWith(
        color: Colors.deepPurple[300],
        fontSize: 14,
      ),
    );
  }

  final ThemeData base = ThemeData.light();
  return base.copyWith(
      textTheme: _basicTextTheme(base.textTheme),
      primaryColor: Colors.deepPurple[300],
      accentColor: Colors.deepPurple[300],
      iconTheme: IconThemeData(
        color: Colors.deepPurple[300],
        size: 20.0,
      ),
      buttonTheme: ButtonThemeData(
        buttonColor: Colors.deepPurple[300],
        shape: RoundedRectangleBorder(),
        textTheme: ButtonTextTheme.primary,
      ),
      sliderTheme: SliderThemeData(
        activeTrackColor: Colors.deepPurple[300],
        overlayColor: Colors.deepPurple[300].withAlpha(32),
        thumbColor: Colors.deepPurple[300],
      ),

}
0 голосов
/ 26 мая 2020

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

Например, создайте файл standardtext.dart и вставьте ниже

import 'package:flutter/material.dart';

class StandardText extends StatelessWidget {
  final String title;
  final Color normalColor;
  StandardText({this.title, this.normalColor})

  @override
  Widget build(BuildContext context) {
    return Container(
      child: Text(
        title,
        style: TextStyle(
          color: normalColor,
        ),
      ),
    );
  }
}

, затем во всем приложении используйте его, как показано ниже

StandardText(title: 'Text', normalColor: Colors.blue)

подробно:

class Main extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Container(
      child: StandardText(title: 'Text', normalColor: Colors.blue),
    );
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...