mnemo_cards/lib/widgets/items/builder.dart

70 lines
1.7 KiB
Dart
Raw Normal View History

2024-05-22 20:48:44 +00:00
import 'dart:developer';
import 'package:flutter/material.dart';
import 'package:mnemo_cards/theme/themes.dart';
import 'package:mnemo_cards/utils/string_helper.dart';
import 'package:mnemo_cards_common/mnemo_cards_common.dart';
class ItemBuilder {
static Widget build(Item item) {
switch (item.type) {
case ItemType.text:
return TextItemBuilder(item as TextItem);
default:
log('Undefined item type ${item.type} ${item.id}');
return SizedBox.shrink();
}
}
}
extension ItemExt on Item {
Widget build() => ItemBuilder.build(this);
}
extension ItemIterableExt on Iterable<Item> {
Iterable<Widget> build() => map((e) => e.build());
}
class TextItemBuilder extends StatelessWidget {
final TextItem item;
TextItemBuilder(this.item);
@override
Widget build(BuildContext context) {
return Container(
2024-05-28 21:25:51 +00:00
padding: EdgeInsets.all(8.0),
2024-05-22 20:48:44 +00:00
decoration: BoxDecoration(
border: item.hasBorder
? Border.all(
color: item.color?.asColor ?? borderGray,
)
: null,
),
child: Column(
children: [
if (item.title != null)
Text(
item.title!,
style: TextStyle(
fontWeight: FontWeight.w500,
fontSize: 24,
color: Colors.black,
),
2024-05-28 21:25:51 +00:00
textAlign: TextAlign.center,
2024-05-22 20:48:44 +00:00
),
if (item.subtitle != null)
Text(
item.subtitle!,
style: TextStyle(
fontWeight: FontWeight.w500,
fontSize: 16,
color: Colors.black,
),
)
],
),
);
}
}