After Width: | Height: | Size: 2.2 KiB |
Before Width: | Height: | Size: 3.8 KiB After Width: | Height: | Size: 4.7 KiB |
Before Width: | Height: | Size: 4.1 KiB After Width: | Height: | Size: 4.9 KiB |
Before Width: | Height: | Size: 4.1 KiB After Width: | Height: | Size: 5.5 KiB |
Before Width: | Height: | Size: 3.3 KiB After Width: | Height: | Size: 3.8 KiB |
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 8.5 KiB |
After Width: | Height: | Size: 13 KiB |
@ -0,0 +1,24 @@ |
|||||||
|
import 'package:flutter_example_packages/base/package/package_dialog.dart'; |
||||||
|
|
||||||
|
/// Package values |
||||||
|
final packageCupertinoIcons = PackageDialog( |
||||||
|
key: 'cupertino_icons', |
||||||
|
descEN: ''' |
||||||
|
This is an asset repo containing the default set of icon assets |
||||||
|
used by Flutter's Cupertino widgets. |
||||||
|
''', |
||||||
|
descRU: ''' |
||||||
|
Это репозиторий ресурсов, содержащий набор ресурсов значков по умолчанию |
||||||
|
используется виджетами Flutter Cupertino. |
||||||
|
''', |
||||||
|
messageEN: ''' |
||||||
|
This is a platform independent plugin used in this app, should work |
||||||
|
for you too. |
||||||
|
''', |
||||||
|
messageRU: ''' |
||||||
|
Это плагин независимый от платформы, используется в этом приложении, |
||||||
|
должен работать и у вас. |
||||||
|
''', |
||||||
|
version: '1.0.5', |
||||||
|
isPlatformDependent: false, |
||||||
|
); |
@ -0,0 +1,22 @@ |
|||||||
|
import 'package:flutter_example_packages/base/package/package_dialog.dart'; |
||||||
|
|
||||||
|
/// Package values |
||||||
|
final packageGoogleFonts = PackageDialog( |
||||||
|
key: 'google_fonts', |
||||||
|
descEN: ''' |
||||||
|
A Flutter package to use fonts from fonts.google.com. |
||||||
|
''', |
||||||
|
descRU: ''' |
||||||
|
Пакет Flutter для использования шрифтов с fonts.google.com. |
||||||
|
''', |
||||||
|
messageEN: ''' |
||||||
|
This is a platform independent plugin used in this app, should work |
||||||
|
for you too. |
||||||
|
''', |
||||||
|
messageRU: ''' |
||||||
|
Это плагин независимый от платформы, используется в этом приложении, |
||||||
|
должен работать и у вас. |
||||||
|
''', |
||||||
|
version: '4.0.4', |
||||||
|
isPlatformDependent: false, |
||||||
|
); |
@ -0,0 +1,26 @@ |
|||||||
|
import 'package:flutter_example_packages/base/package/package_dialog.dart'; |
||||||
|
|
||||||
|
/// Package values |
||||||
|
final packageIntl = PackageDialog( |
||||||
|
key: 'intl', |
||||||
|
descEN: ''' |
||||||
|
Provides internationalization and localization facilities, |
||||||
|
including message translation, plurals and genders, |
||||||
|
date/number formatting and parsing, and bidirectional text. |
||||||
|
''', |
||||||
|
descRU: ''' |
||||||
|
Предоставляет средства интернационализации и локализации, |
||||||
|
включая перевод сообщений, множественное число и пол, |
||||||
|
форматирование и разбор даты/числа, а также двунаправленный текст. |
||||||
|
''', |
||||||
|
messageEN: ''' |
||||||
|
This is a platform independent plugin used in this app, should work |
||||||
|
for you too. |
||||||
|
''', |
||||||
|
messageRU: ''' |
||||||
|
Это плагин независимый от платформы, используется в этом приложении, |
||||||
|
должен работать и у вас. |
||||||
|
''', |
||||||
|
version: '0.17.0', |
||||||
|
isPlatformDependent: false, |
||||||
|
); |
@ -1,30 +1,41 @@ |
|||||||
import 'package:flutter_example_packages/base/package/package.dart'; |
import 'package:flutter_example_packages/base/package/package.dart'; |
||||||
import 'package:flutter_example_packages/packages/battery_plus/package.dart'; |
import 'package:flutter_example_packages/packages/battery_plus/package.dart'; |
||||||
import 'package:flutter_example_packages/packages/cached_network_image/package.dart'; |
import 'package:flutter_example_packages/packages/cached_network_image/package.dart'; |
||||||
|
import 'package:flutter_example_packages/packages/cupertino_icons/package.dart'; |
||||||
import 'package:flutter_example_packages/packages/device_info_plus/package.dart'; |
import 'package:flutter_example_packages/packages/device_info_plus/package.dart'; |
||||||
import 'package:flutter_example_packages/packages/flutter_cache_manager/package.dart'; |
import 'package:flutter_example_packages/packages/flutter_cache_manager/package.dart'; |
||||||
import 'package:flutter_example_packages/packages/flutter_local_notifications/package.dart'; |
import 'package:flutter_example_packages/packages/flutter_local_notifications/package.dart'; |
||||||
import 'package:flutter_example_packages/packages/flutter_secure_storage/package.dart'; |
import 'package:flutter_example_packages/packages/flutter_secure_storage/package.dart'; |
||||||
import 'package:flutter_example_packages/packages/get_it/package.dart'; |
import 'package:flutter_example_packages/packages/get_it/package.dart'; |
||||||
|
import 'package:flutter_example_packages/packages/google_fonts/package.dart'; |
||||||
|
import 'package:flutter_example_packages/packages/intl/package.dart'; |
||||||
import 'package:flutter_example_packages/packages/package_info_plus/package.dart'; |
import 'package:flutter_example_packages/packages/package_info_plus/package.dart'; |
||||||
import 'package:flutter_example_packages/packages/path_provider/package.dart'; |
import 'package:flutter_example_packages/packages/path_provider/package.dart'; |
||||||
|
import 'package:flutter_example_packages/packages/scoped_model/package.dart'; |
||||||
import 'package:flutter_example_packages/packages/shared_preferences/package.dart'; |
import 'package:flutter_example_packages/packages/shared_preferences/package.dart'; |
||||||
|
import 'package:flutter_example_packages/packages/sqflite/package.dart'; |
||||||
|
import 'package:flutter_example_packages/packages/universal_io/package.dart'; |
||||||
import 'package:flutter_example_packages/packages/wakelock/package.dart'; |
import 'package:flutter_example_packages/packages/wakelock/package.dart'; |
||||||
import 'package:flutter_example_packages/packages/xdga_directories/package.dart'; |
import 'package:flutter_example_packages/packages/xdga_directories/package.dart'; |
||||||
|
|
||||||
/// List app packages |
/// List app packages |
||||||
final packages = <Package>[ |
final packages = <Package>[ |
||||||
// Check with preview |
|
||||||
packageBatteryPlus, |
packageBatteryPlus, |
||||||
packageCachedNetworkImage, |
packageCachedNetworkImage, |
||||||
|
packageCupertinoIcons, |
||||||
packageDeviceInfoPlus, |
packageDeviceInfoPlus, |
||||||
packageFlutterCacheManager, |
packageFlutterCacheManager, |
||||||
packageFlutterLocalNotifications, |
packageFlutterLocalNotifications, |
||||||
packageFlutterSecureStorage, |
packageFlutterSecureStorage, |
||||||
packageGetIt, |
packageGetIt, |
||||||
|
packageGoogleFonts, |
||||||
|
packageIntl, |
||||||
packagePackageInfoPlus, |
packagePackageInfoPlus, |
||||||
packagePathProvider, |
packagePathProvider, |
||||||
|
packageScopedModel, |
||||||
packageSharedPreferences, |
packageSharedPreferences, |
||||||
|
packageSqflite, |
||||||
|
packageUniversalIO, |
||||||
packageWakelock, |
packageWakelock, |
||||||
packageXdgaDirectories, |
packageXdgaDirectories, |
||||||
]; |
]; |
||||||
|
@ -0,0 +1,24 @@ |
|||||||
|
import 'package:flutter_example_packages/base/package/package_dialog.dart'; |
||||||
|
|
||||||
|
/// Package values |
||||||
|
final packageScopedModel = PackageDialog( |
||||||
|
key: 'scoped_model', |
||||||
|
descEN: ''' |
||||||
|
A set of utilities that allow you to easily pass a data Model |
||||||
|
from a parent Widget down to its descendants. |
||||||
|
''', |
||||||
|
descRU: ''' |
||||||
|
Набор утилит, позволяющих легко передать Модель данных |
||||||
|
от родительского виджета до его потомков. |
||||||
|
''', |
||||||
|
messageEN: ''' |
||||||
|
This is a platform independent plugin used in this app, should work |
||||||
|
for you too. |
||||||
|
''', |
||||||
|
messageRU: ''' |
||||||
|
Это плагин независимый от платформы, используется в этом приложении, |
||||||
|
должен работать и у вас. |
||||||
|
''', |
||||||
|
version: '2.0.0', |
||||||
|
isPlatformDependent: false, |
||||||
|
); |
@ -0,0 +1,20 @@ |
|||||||
|
import 'package:flutter_example_packages/base/package/package_dialog.dart'; |
||||||
|
|
||||||
|
/// Package values |
||||||
|
final packageSqflite = PackageDialog( |
||||||
|
key: 'sqflite', |
||||||
|
descEN: ''' |
||||||
|
SQLite plugin for Flutter. Supports iOS, Android, MacOS and Aurora OS. |
||||||
|
''', |
||||||
|
descRU: ''' |
||||||
|
Плагин SQLite для Flutter. Поддерживает iOS, Android, MacOS и ОС Aurora. |
||||||
|
''', |
||||||
|
messageEN: ''' |
||||||
|
Platform dependent plugin. Preview of work in development. |
||||||
|
''', |
||||||
|
messageRU: ''' |
||||||
|
Платформо-зависимый плагин. Превью работы в разработке. |
||||||
|
''', |
||||||
|
version: '2.2.6', |
||||||
|
isPlatformDependent: true, |
||||||
|
); |
@ -0,0 +1,24 @@ |
|||||||
|
import 'package:flutter_example_packages/base/package/package_dialog.dart'; |
||||||
|
|
||||||
|
/// Package values |
||||||
|
final packageUniversalIO = PackageDialog( |
||||||
|
key: 'universal_io', |
||||||
|
descEN: ''' |
||||||
|
A cross-platform dart:io that works on all platforms, |
||||||
|
including browsers. |
||||||
|
''', |
||||||
|
descRU: ''' |
||||||
|
Кроссплатформенный dart:io, который работает на всех платформах, |
||||||
|
включая браузеры. |
||||||
|
''', |
||||||
|
messageEN: ''' |
||||||
|
This is a platform independent plugin used in this app, should work |
||||||
|
for you too. |
||||||
|
''', |
||||||
|
messageRU: ''' |
||||||
|
Это плагин независимый от платформы, используется в этом приложении, |
||||||
|
должен работать и у вас. |
||||||
|
''', |
||||||
|
version: '2.2.0', |
||||||
|
isPlatformDependent: false, |
||||||
|
); |
@ -0,0 +1,153 @@ |
|||||||
|
import 'package:flutter/material.dart'; |
||||||
|
import 'package:flutter_example_packages/widgets/base/export.dart'; |
||||||
|
import 'package:flutter_gen/gen_l10n/app_localizations.dart'; |
||||||
|
|
||||||
|
enum PlatformFilter { |
||||||
|
disable, |
||||||
|
dependent, |
||||||
|
independent, |
||||||
|
} |
||||||
|
|
||||||
|
class HomeAppBar extends AppStatefulWidget implements PreferredSizeWidget { |
||||||
|
const HomeAppBar({ |
||||||
|
super.key, |
||||||
|
required this.onChangeSearch, |
||||||
|
required this.onChangeFilter, |
||||||
|
}); |
||||||
|
|
||||||
|
final void Function(String) onChangeSearch; |
||||||
|
final void Function(PlatformFilter) onChangeFilter; |
||||||
|
|
||||||
|
@override |
||||||
|
State<HomeAppBar> createState() => _HomeAppBarState(); |
||||||
|
|
||||||
|
@override |
||||||
|
Size get preferredSize => const Size.fromHeight(56.0); |
||||||
|
} |
||||||
|
|
||||||
|
class _HomeAppBarState extends AppState<HomeAppBar> { |
||||||
|
bool _enableSearch = false; |
||||||
|
PlatformFilter _filter = PlatformFilter.disable; |
||||||
|
final TextEditingController _searchController = TextEditingController(); |
||||||
|
final FocusNode _searchFocus = FocusNode(); |
||||||
|
|
||||||
|
@override |
||||||
|
Widget buildWide( |
||||||
|
BuildContext context, |
||||||
|
MediaQueryData media, |
||||||
|
AppLocalizations l10n, |
||||||
|
) { |
||||||
|
final theme = Theme.of(context); |
||||||
|
return AppBar( |
||||||
|
centerTitle: true, |
||||||
|
shape: const Border(bottom: BorderSide(width: 0)), |
||||||
|
leading: _enableSearch |
||||||
|
? Padding( |
||||||
|
padding: const EdgeInsets.all(8.0), |
||||||
|
child: ClipOval( |
||||||
|
child: Material( |
||||||
|
color: Colors.blueGrey, |
||||||
|
child: IconButton( |
||||||
|
icon: const Icon(Icons.close), |
||||||
|
tooltip: l10n.homeSearch, |
||||||
|
onPressed: () { |
||||||
|
setState(() { |
||||||
|
widget.onChangeSearch.call(""); |
||||||
|
_searchController.clear(); |
||||||
|
_enableSearch = false; |
||||||
|
}); |
||||||
|
}, |
||||||
|
), |
||||||
|
), |
||||||
|
), |
||||||
|
) |
||||||
|
: null, |
||||||
|
title: _enableSearch |
||||||
|
? TextField( |
||||||
|
focusNode: _searchFocus, |
||||||
|
controller: _searchController, |
||||||
|
style: theme.textTheme.titleSmall?.copyWith(color: Colors.white), |
||||||
|
cursorColor: Colors.white, |
||||||
|
decoration: InputDecoration( |
||||||
|
hintText: l10n.homeSearchTitle, |
||||||
|
hintStyle: |
||||||
|
theme.textTheme.titleSmall?.copyWith(color: Colors.white54), |
||||||
|
border: InputBorder.none, |
||||||
|
), |
||||||
|
onChanged: (value) { |
||||||
|
widget.onChangeSearch.call(value); |
||||||
|
}, |
||||||
|
) |
||||||
|
: null, |
||||||
|
actions: [ |
||||||
|
if (!_enableSearch) |
||||||
|
Padding( |
||||||
|
padding: const EdgeInsets.all(8.0), |
||||||
|
child: ClipOval( |
||||||
|
child: Material( |
||||||
|
color: Colors.blueGrey, |
||||||
|
child: IconButton( |
||||||
|
icon: const Icon(Icons.search), |
||||||
|
tooltip: l10n.homeSearch, |
||||||
|
onPressed: () { |
||||||
|
setState(() { |
||||||
|
_enableSearch = true; |
||||||
|
_searchFocus.requestFocus(); |
||||||
|
}); |
||||||
|
}, |
||||||
|
), |
||||||
|
), |
||||||
|
), |
||||||
|
), |
||||||
|
Padding( |
||||||
|
padding: const EdgeInsets.all(8.0), |
||||||
|
child: ClipOval( |
||||||
|
child: Material( |
||||||
|
color: () { |
||||||
|
switch (_filter) { |
||||||
|
case PlatformFilter.disable: |
||||||
|
return Colors.blueGrey; |
||||||
|
case PlatformFilter.dependent: |
||||||
|
return Colors.deepOrangeAccent; |
||||||
|
case PlatformFilter.independent: |
||||||
|
return Colors.blueAccent; |
||||||
|
} |
||||||
|
}.call(), |
||||||
|
child: IconButton( |
||||||
|
icon: () { |
||||||
|
switch (_filter) { |
||||||
|
case PlatformFilter.disable: |
||||||
|
return const Icon(Icons.filter_list_off); |
||||||
|
case PlatformFilter.dependent: |
||||||
|
return const Icon(Icons.filter_list); |
||||||
|
case PlatformFilter.independent: |
||||||
|
return const Icon(Icons.filter_list); |
||||||
|
} |
||||||
|
}.call(), |
||||||
|
tooltip: l10n.homeFilter, |
||||||
|
onPressed: () { |
||||||
|
setState(() { |
||||||
|
switch (_filter) { |
||||||
|
case PlatformFilter.disable: |
||||||
|
_filter = PlatformFilter.dependent; |
||||||
|
widget.onChangeFilter.call(_filter); |
||||||
|
break; |
||||||
|
case PlatformFilter.dependent: |
||||||
|
_filter = PlatformFilter.independent; |
||||||
|
widget.onChangeFilter.call(_filter); |
||||||
|
break; |
||||||
|
case PlatformFilter.independent: |
||||||
|
_filter = PlatformFilter.disable; |
||||||
|
widget.onChangeFilter.call(_filter); |
||||||
|
break; |
||||||
|
} |
||||||
|
}); |
||||||
|
}, |
||||||
|
), |
||||||
|
), |
||||||
|
), |
||||||
|
), |
||||||
|
], |
||||||
|
); |
||||||
|
} |
||||||
|
} |
@ -1,8 +1,7 @@ |
|||||||
import 'dart:ui'; |
import 'package:flutter/material.dart'; |
||||||
|
|
||||||
class AppColors { |
class AppColors { |
||||||
static const Color primary = Color(0xFFCBDCF8); |
static const Color primary = Color(0xFF080614); |
||||||
static const Color primaryDark = Color(0xFF3c67b5); |
static const Color secondary = Colors.blueGrey; |
||||||
static const Color secondary = Color(0xFF00b3ad); |
|
||||||
static const Color warning = Color(0xFFfb7d4a); |
static const Color warning = Color(0xFFfb7d4a); |
||||||
} |
} |
||||||
|
@ -0,0 +1,44 @@ |
|||||||
|
import 'package:flutter/material.dart'; |
||||||
|
import 'package:flutter_gen/gen_l10n/app_localizations.dart'; |
||||||
|
|
||||||
|
abstract class AppState<T extends StatefulWidget> extends State<T> |
||||||
|
with WidgetsBindingObserver { |
||||||
|
Widget buildWide( |
||||||
|
BuildContext context, |
||||||
|
MediaQueryData media, |
||||||
|
AppLocalizations l10n, |
||||||
|
); |
||||||
|
|
||||||
|
void onPostFrameCallback() {} |
||||||
|
|
||||||
|
@override |
||||||
|
void initState() { |
||||||
|
super.initState(); |
||||||
|
WidgetsBinding.instance.addObserver(this); |
||||||
|
WidgetsBinding.instance.addPostFrameCallback((_) { |
||||||
|
didChangeMetrics(); |
||||||
|
Future.delayed(const Duration(milliseconds: 100), () { |
||||||
|
didChangeMetrics(); |
||||||
|
}); |
||||||
|
Future.delayed(const Duration(milliseconds: 200), () { |
||||||
|
didChangeMetrics(); |
||||||
|
}); |
||||||
|
Future.delayed(const Duration(milliseconds: 500), () { |
||||||
|
didChangeMetrics(); |
||||||
|
}); |
||||||
|
}); |
||||||
|
} |
||||||
|
|
||||||
|
@override |
||||||
|
void dispose() { |
||||||
|
WidgetsBinding.instance.removeObserver(this); |
||||||
|
super.dispose(); |
||||||
|
} |
||||||
|
|
||||||
|
@override |
||||||
|
Widget build(BuildContext context) => buildWide( |
||||||
|
context, |
||||||
|
MediaQuery.of(context), |
||||||
|
AppLocalizations.of(context)!, |
||||||
|
); |
||||||
|
} |
@ -0,0 +1,5 @@ |
|||||||
|
import 'package:flutter/material.dart'; |
||||||
|
|
||||||
|
abstract class AppStatefulWidget extends StatefulWidget { |
||||||
|
const AppStatefulWidget({super.key}); |
||||||
|
} |
@ -0,0 +1,21 @@ |
|||||||
|
import 'package:flutter/material.dart'; |
||||||
|
import 'package:flutter_gen/gen_l10n/app_localizations.dart'; |
||||||
|
|
||||||
|
abstract class AppStatelessWidget extends StatelessWidget { |
||||||
|
const AppStatelessWidget({super.key}); |
||||||
|
|
||||||
|
Widget buildWide( |
||||||
|
BuildContext context, |
||||||
|
MediaQueryData media, |
||||||
|
AppLocalizations l10n, |
||||||
|
); |
||||||
|
|
||||||
|
void onPostFrameCallback() {} |
||||||
|
|
||||||
|
@override |
||||||
|
Widget build(BuildContext context) => buildWide( |
||||||
|
context, |
||||||
|
MediaQuery.of(context), |
||||||
|
AppLocalizations.of(context)!, |
||||||
|
); |
||||||
|
} |
@ -0,0 +1,5 @@ |
|||||||
|
library base; |
||||||
|
|
||||||
|
export 'package:flutter_example_packages/widgets/base/app_state.dart'; |
||||||
|
export 'package:flutter_example_packages/widgets/base/app_stateful_widget.dart'; |
||||||
|
export 'package:flutter_example_packages/widgets/base/app_stateless_widget.dart'; |
@ -0,0 +1,11 @@ |
|||||||
|
library texts; |
||||||
|
|
||||||
|
export 'package:flutter_example_packages/widgets/texts/text_body_large.dart'; |
||||||
|
export 'package:flutter_example_packages/widgets/texts/text_body_medium.dart'; |
||||||
|
export 'package:flutter_example_packages/widgets/texts/text_body_small.dart'; |
||||||
|
export 'package:flutter_example_packages/widgets/texts/text_headline_large.dart'; |
||||||
|
export 'package:flutter_example_packages/widgets/texts/text_headline_medium.dart'; |
||||||
|
export 'package:flutter_example_packages/widgets/texts/text_headline_small.dart'; |
||||||
|
export 'package:flutter_example_packages/widgets/texts/text_title_large.dart'; |
||||||
|
export 'package:flutter_example_packages/widgets/texts/text_title_medium.dart'; |
||||||
|
export 'package:flutter_example_packages/widgets/texts/text_title_small.dart'; |
@ -0,0 +1,27 @@ |
|||||||
|
import 'package:flutter/material.dart'; |
||||||
|
|
||||||
|
class TextBase extends StatelessWidget { |
||||||
|
const TextBase( |
||||||
|
this.data, { |
||||||
|
super.key, |
||||||
|
this.color, |
||||||
|
this.textAlign, |
||||||
|
}); |
||||||
|
|
||||||
|
final String data; |
||||||
|
final Color? color; |
||||||
|
final TextAlign? textAlign; |
||||||
|
|
||||||
|
TextStyle? getStyle(BuildContext context) { |
||||||
|
return Theme.of(context).textTheme.bodyMedium; |
||||||
|
} |
||||||
|
|
||||||
|
@override |
||||||
|
Widget build(BuildContext context) { |
||||||
|
return Text( |
||||||
|
data, |
||||||
|
style: getStyle(context)?.copyWith(color: color ?? Colors.black), |
||||||
|
textAlign: textAlign, |
||||||
|
); |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,15 @@ |
|||||||
|
import 'package:flutter/material.dart'; |
||||||
|
import 'package:flutter_example_packages/widgets/texts/text_base.dart'; |
||||||
|
|
||||||
|
class TextBodyLarge extends TextBase { |
||||||
|
const TextBodyLarge(super.data, { |
||||||
|
super.key, |
||||||
|
super.color, |
||||||
|
super.textAlign, |
||||||
|
}); |
||||||
|
|
||||||
|
@override |
||||||
|
TextStyle? getStyle(BuildContext context) { |
||||||
|
return Theme.of(context).textTheme.bodyLarge; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,15 @@ |
|||||||
|
import 'package:flutter/material.dart'; |
||||||
|
import 'package:flutter_example_packages/widgets/texts/text_base.dart'; |
||||||
|
|
||||||
|
class TextBodyMedium extends TextBase { |
||||||
|
const TextBodyMedium(super.data, { |
||||||
|
super.key, |
||||||
|
super.color, |
||||||
|
super.textAlign, |
||||||
|
}); |
||||||
|
|
||||||
|
@override |
||||||
|
TextStyle? getStyle(BuildContext context) { |
||||||
|
return Theme.of(context).textTheme.bodyMedium; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,15 @@ |
|||||||
|
import 'package:flutter/material.dart'; |
||||||
|
import 'package:flutter_example_packages/widgets/texts/text_base.dart'; |
||||||
|
|
||||||
|
class TextBodySmall extends TextBase { |
||||||
|
const TextBodySmall(super.data, { |
||||||
|
super.key, |
||||||
|
super.color, |
||||||
|
super.textAlign, |
||||||
|
}); |
||||||
|
|
||||||
|
@override |
||||||
|
TextStyle? getStyle(BuildContext context) { |
||||||
|
return Theme.of(context).textTheme.bodySmall; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,15 @@ |
|||||||
|
import 'package:flutter/material.dart'; |
||||||
|
import 'package:flutter_example_packages/widgets/texts/text_base.dart'; |
||||||
|
|
||||||
|
class TextHeadlineLarge extends TextBase { |
||||||
|
const TextHeadlineLarge(super.data, { |
||||||
|
super.key, |
||||||
|
super.color, |
||||||
|
super.textAlign, |
||||||
|
}); |
||||||
|
|
||||||
|
@override |
||||||
|
TextStyle? getStyle(BuildContext context) { |
||||||
|
return Theme.of(context).textTheme.headlineLarge; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,15 @@ |
|||||||
|
import 'package:flutter/material.dart'; |
||||||
|
import 'package:flutter_example_packages/widgets/texts/text_base.dart'; |
||||||
|
|
||||||
|
class TextHeadlineMedium extends TextBase { |
||||||
|
const TextHeadlineMedium(super.data, { |
||||||
|
super.key, |
||||||
|
super.color, |
||||||
|
super.textAlign, |
||||||
|
}); |
||||||
|
|
||||||
|
@override |
||||||
|
TextStyle? getStyle(BuildContext context) { |
||||||
|
return Theme.of(context).textTheme.headlineMedium; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,15 @@ |
|||||||
|
import 'package:flutter/material.dart'; |
||||||
|
import 'package:flutter_example_packages/widgets/texts/text_base.dart'; |
||||||
|
|
||||||
|
class TextHeadlineSmall extends TextBase { |
||||||
|
const TextHeadlineSmall(super.data, { |
||||||
|
super.key, |
||||||
|
super.color, |
||||||
|
super.textAlign, |
||||||
|
}); |
||||||
|
|
||||||
|
@override |
||||||
|
TextStyle? getStyle(BuildContext context) { |
||||||
|
return Theme.of(context).textTheme.headlineSmall; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,15 @@ |
|||||||
|
import 'package:flutter/material.dart'; |
||||||
|
import 'package:flutter_example_packages/widgets/texts/text_base.dart'; |
||||||
|
|
||||||
|
class TextTitleLarge extends TextBase { |
||||||
|
const TextTitleLarge(super.data, { |
||||||
|
super.key, |
||||||
|
super.color, |
||||||
|
super.textAlign, |
||||||
|
}); |
||||||
|
|
||||||
|
@override |
||||||
|
TextStyle? getStyle(BuildContext context) { |
||||||
|
return Theme.of(context).textTheme.titleLarge; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,15 @@ |
|||||||
|
import 'package:flutter/material.dart'; |
||||||
|
import 'package:flutter_example_packages/widgets/texts/text_base.dart'; |
||||||
|
|
||||||
|
class TextTitleMedium extends TextBase { |
||||||
|
const TextTitleMedium(super.data, { |
||||||
|
super.key, |
||||||
|
super.color, |
||||||
|
super.textAlign, |
||||||
|
}); |
||||||
|
|
||||||
|
@override |
||||||
|
TextStyle? getStyle(BuildContext context) { |
||||||
|
return Theme.of(context).textTheme.titleMedium; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,15 @@ |
|||||||
|
import 'package:flutter/material.dart'; |
||||||
|
import 'package:flutter_example_packages/widgets/texts/text_base.dart'; |
||||||
|
|
||||||
|
class TextTitleSmall extends TextBase { |
||||||
|
const TextTitleSmall(super.data, { |
||||||
|
super.key, |
||||||
|
super.color, |
||||||
|
super.textAlign, |
||||||
|
}); |
||||||
|
|
||||||
|
@override |
||||||
|
TextStyle? getStyle(BuildContext context) { |
||||||
|
return Theme.of(context).textTheme.titleSmall; |
||||||
|
} |
||||||
|
} |