Temalar ve Stil
Giriş
Temalar kullanarak uygulamanızın UI stillerini yönetebilirsiniz. Temalar, örneğin metnin yazı tipi boyutunu, düğmelerin nasıl görüneceğini ve uygulamanızın genel görünümünü değiştirmemize olanak tanır.
Temalara yeniyseniz, Flutter web sitesindeki örnekler başlamanıza yardımcı olacaktır buradan.
Nylo Website, Açık mod ve Koyu mod için önceden yapılandırılmış temalarla birlikte gelir.
Cihaz 'açık/koyu' moda girerse tema da güncellenecektir.
Açık ve Koyu temalar
- Açık tema -
lib/resources/themes/light_theme.dart - Koyu tema -
lib/resources/themes/dark_theme.dart
Bu dosyaların içinde, önceden tanımlanmış ThemeData ve ThemeStyle bulacaksınız.
Tema oluşturma
Uygulamanız için birden fazla tema istiyorsanız, bunu yapmanın kolay bir yolu vardır. Temalara yeniyseniz, takip edin.
İlk olarak, terminalden aşağıdaki komutu çalıştırın
metro make:theme bright_theme
Not: bright_theme yerine yeni temanızın adını yazın.
Bu, /resources/themes/ dizininizde yeni bir tema ve ayrıca /resources/themes/styles/ dizininde bir tema renkleri dosyası oluşturur.
// App Themes
final List<BaseThemeConfig<ColorStyles>> appThemes = [
BaseThemeConfig<ColorStyles>(
id: getEnv('LIGHT_THEME_ID'),
description: "Light theme",
theme: lightTheme,
colors: LightThemeColors(),
),
BaseThemeConfig<ColorStyles>(
id: getEnv('DARK_THEME_ID'),
description: "Dark theme",
theme: darkTheme,
colors: DarkThemeColors(),
),
BaseThemeConfig<ColorStyles>( // new theme automatically added
id: 'Bright Theme',
description: "Bright Theme",
theme: brightTheme,
colors: BrightThemeColors(),
),
];
Yeni temanızın renklerini /resources/themes/styles/bright_theme_colors.dart dosyasında değiştirebilirsiniz.
Tema Renkleri
Projenizdeki tema renklerini yönetmek için lib/resources/themes/styles dizinine bakın.
Bu dizin, light_theme_colors.dart ve dark_theme_colors.dart için stil renklerini içerir.
Bu dosyada, aşağıdakine benzer bir şey bulmalısınız.
// e.g Light Theme colors
class LightThemeColors implements ColorStyles {
// general
@override
Color get background => const Color(0xFFFFFFFF);
@override
Color get content => const Color(0xFF000000);
@override
Color get primaryAccent => const Color(0xFF0045a0);
@override
Color get surfaceBackground => Colors.white;
@override
Color get surfaceContent => Colors.black;
// app bar
@override
Color get appBarBackground => Colors.blue;
@override
Color get appBarPrimaryContent => Colors.white;
// buttons
@override
Color get buttonBackground => Colors.blue;
@override
Color get buttonContent => Colors.white;
@override
Color get buttonSecondaryBackground => const Color(0xff151925);
@override
Color get buttonSecondaryContent => Colors.white.withAlpha((255.0 * 0.9).round());
// bottom tab bar
@override
Color get bottomTabBarBackground => Colors.white;
// bottom tab bar - icons
@override
Color get bottomTabBarIconSelected => Colors.blue;
@override
Color get bottomTabBarIconUnselected => Colors.black54;
// bottom tab bar - label
@override
Color get bottomTabBarLabelUnselected => Colors.black45;
@override
Color get bottomTabBarLabelSelected => Colors.black;
// toast notification
@override
Color get toastNotificationBackground => Colors.white;
}
Widget'larda renkleri kullanma
import 'package:flutter_app/config/theme.dart';
...
// gets the light/dark background colour depending on the theme
ThemeColor.get(context).background
// e.g. of using the "ThemeColor" class
Text(
"Hello World",
style: TextStyle(
color: ThemeColor.get(context).content // Color - content
),
),
// or
Text(
"Hello World",
style: TextStyle(
color: ThemeConfig.light().colors.content // Light theme colors - primary content
),
),
Temel stiller
Temel stiller, kodunuzun tek bir alanından çeşitli widget renklerini özelleştirmenize olanak tanır.
Nylo Website, projeniz için lib/resources/themes/styles/color_styles.dart konumunda önceden yapılandırılmış temel stillerle birlikte gelir.
Bu stiller, light_theme_colors.dart ve dart_theme_colors.dart dosyalarındaki tema renkleriniz için bir arayüz sağlar.
Dosya lib/resources/themes/styles/color_styles.dart
abstract class ColorStyles {
// general
@override
Color get background;
@override
Color get content;
@override
Color get primaryAccent;
@override
Color get surfaceBackground;
@override
Color get surfaceContent;
// app bar
@override
Color get appBarBackground;
@override
Color get appBarPrimaryContent;
@override
Color get buttonBackground;
@override
Color get buttonContent;
@override
Color get buttonSecondaryBackground;
@override
Color get buttonSecondaryContent;
// bottom tab bar
@override
Color get bottomTabBarBackground;
// bottom tab bar - icons
@override
Color get bottomTabBarIconSelected;
@override
Color get bottomTabBarIconUnselected;
// bottom tab bar - label
@override
Color get bottomTabBarLabelUnselected;
@override
Color get bottomTabBarLabelSelected;
// toast notification
Color get toastNotificationBackground;
}
Buraya ek stiller ekleyebilir ve ardından renkleri temanızda uygulayabilirsiniz.
Tema değiştirme
Nylo Website, anında tema değiştirme özelliğini destekler.
Örn. Kullanıcı "koyu temayı" etkinleştirmek için bir düğmeye dokunursa temayı değiştirmeniz gerekiyorsa.
Aşağıdakileri yaparak bunu destekleyebilirsiniz:
import 'package:nylo_framework/theme/helper/ny_theme.dart';
...
TextButton(onPressed: () {
// set theme to use the "dark theme"
NyTheme.set(context, id: "dark_theme");
setState(() { });
}, child: Text("Dark Theme")
),
// or
TextButton(onPressed: () {
// set theme to use the "light theme"
NyTheme.set(context, id: "light_theme");
setState(() { });
}, child: Text("Light Theme")
),
Yazı tipleri
Nylo Website'da uygulama genelinde birincil yazı tipinizi güncellemek kolaydır. lib/config/design.dart dosyasını açın ve aşağıdakini güncelleyin.
final TextStyle appThemeFont = GoogleFonts.lato();
Depoda GoogleFonts kütüphanesini dahil ediyoruz, böylece tüm yazı tiplerini az çabayla kullanmaya başlayabilirsiniz. Yazı tipini başka bir şeyle güncellemek için aşağıdakileri yapabilirsiniz:
// OLD
// final TextStyle appThemeFont = GoogleFonts.lato();
// NEW
final TextStyle appThemeFont = GoogleFonts.montserrat();
Daha fazlasını anlamak için resmi Google Fonts kütüphanesindeki yazı tiplerine göz atın
Özel bir yazı tipi mi kullanmanız gerekiyor? Bu kılavuza bakın - https://flutter.dev/docs/cookbook/design/fonts
Yazı tipinizi ekledikten sonra, değişkeni aşağıdaki örnekteki gibi değiştirin.
final TextStyle appThemeFont = TextStyle(fontFamily: "ZenTokyoZoo"); // ZenTokyoZoo used as an example for the custom font
Tasarım
config/design.dart dosyası, uygulamanız için tasarım öğelerini yönetmek için kullanılır.
appFont değişkeni uygulamanızın yazı tipini içerir.
logo değişkeni uygulamanızın Logosunu görüntülemek için kullanılır.
Logonuzu nasıl görüntülemek istediğinizi özelleştirmek için resources/widgets/logo_widget.dart dosyasını değiştirebilirsiniz.
loader değişkeni bir yükleyici görüntülemek için kullanılır. Nylo Website, bazı yardımcı metotlarda bu değişkeni varsayılan yükleyici widget'ı olarak kullanacaktır.
Yükleyicinizi nasıl görüntülemek istediğinizi özelleştirmek için resources/widgets/loader_widget.dart dosyasını değiştirebilirsiniz.
Metin Uzantıları
Nylo Website'da kullanabileceğiniz mevcut metin uzantıları şunlardır.
| Kural Adı | Kullanım | Bilgi |
|---|---|---|
| Display Large | displayLarge() | displayLarge textTheme uygular |
| Display Medium | displayMedium() | displayMedium textTheme uygular |
| Display Small | displaySmall() | displaySmall textTheme uygular |
| Heading Large | headingLarge() | headingLarge textTheme uygular |
| Heading Medium | headingMedium() | headingMedium textTheme uygular |
| Heading Small | headingSmall() | headingSmall textTheme uygular |
| Title Large | titleLarge() | titleLarge textTheme uygular |
| Title Medium | titleMedium() | titleMedium textTheme uygular |
| Title Small | titleSmall() | titleSmall textTheme uygular |
| Body Large | bodyLarge() | bodyLarge textTheme uygular |
| Body Medium | bodyMedium() | bodyMedium textTheme uygular |
| Body Small | bodySmall() | bodySmall textTheme uygular |
| Label Large | labelLarge() | labelLarge textTheme uygular |
| Label Medium | labelMedium() | labelMedium textTheme uygular |
| Label Small | labelSmall() | labelSmall textTheme uygular |
| Font Weight Bold | fontWeightBold | Text widget'a kalın yazı tipi ağırlığı uygular |
| Font Weight Light | fontWeightLight | Text widget'a hafif yazı tipi ağırlığı uygular |
| Set Color | setColor(context, (color) => colors.primaryAccent) | Text widget'ta farklı bir metin rengi ayarla |
| Align Left | alignLeft | Yazı tipini sola hizala |
| Align Right | alignRight | Yazı tipini sağa hizala |
| Align Center | alignCenter | Yazı tipini ortaya hizala |
| Set Max Lines | setMaxLines(int maxLines) | Text widget'ı için maksimum satır sayısını ayarla |
Display large
Text("Hello World").displayLarge()
Display medium
Text("Hello World").displayMedium()
Display small
Text("Hello World").displaySmall()
Heading large
Text("Hello World").headingLarge()
Heading medium
Text("Hello World").headingMedium()
Heading small
Text("Hello World").headingSmall()
Title large
Text("Hello World").titleLarge()
Title medium
Text("Hello World").titleMedium()
Title small
Text("Hello World").titleSmall()
Body large
Text("Hello World").bodyLarge()
Body medium
Text("Hello World").bodyMedium()
Body small
Text("Hello World").bodySmall()
Label large
Text("Hello World").labelLarge()
Label medium
Text("Hello World").labelMedium()
Label small
Text("Hello World").labelSmall()
Font weight bold
Text("Hello World").fontWeightBold()
Font weight light
Text("Hello World").fontWeightLight()
Set color
Text("Hello World").setColor(context, (color) => colors.content)
// Color from your colorStyles
Align left
Text("Hello World").alignLeft()
Align right
Text("Hello World").alignRight()
Align center
Text("Hello World").alignCenter()
Set max lines
Text("Hello World").setMaxLines(5)