Tweak bible font and avatar image layout

This commit is contained in:
kihong.kim
2026-01-24 23:15:54 +09:00
parent b758ef00a0
commit 2944b6d9b5
4 changed files with 81 additions and 27 deletions

View File

@@ -6,6 +6,8 @@ services:
context: ./backend
ports:
- "4000:4000"
volumes:
- backend-uploads:/app/uploads
environment:
PORT: "4000"
MONGODB_URI: "mongodb://mongo:27017/google-tv-dashboard"
@@ -25,3 +27,4 @@ services:
volumes:
mongo-data:
backend-uploads:

View File

@@ -114,17 +114,27 @@ class _FamilyManagerTabState extends State<FamilyManagerTab> {
return ListTile(
leading: CircleAvatar(
backgroundColor: memberColor,
backgroundImage: member.iconUrl.isNotEmpty
? NetworkImage(member.iconUrl)
: null,
child: member.iconUrl.isEmpty
? Text(
child: member.iconUrl.isNotEmpty
? ClipOval(
child: Image.network(
member.iconUrl,
width: 40,
height: 40,
fit: BoxFit.cover,
errorBuilder: (context, error, stackTrace) => Text(
member.name.isNotEmpty
? member.name[0].toUpperCase()
: '?',
style: const TextStyle(fontSize: 20),
),
),
)
: Text(
member.name.isNotEmpty
? member.name[0].toUpperCase()
: '?',
style: const TextStyle(fontSize: 20),
)
: null,
),
),
title: Text(member.name),
subtitle: Text('Order: ${member.order}'),
@@ -185,12 +195,16 @@ class _FamilyManagerTabState extends State<FamilyManagerTab> {
children: [
CircleAvatar(
backgroundColor: selectedColor,
backgroundImage: selectedIconBytes != null
? MemoryImage(selectedIconBytes!)
: null,
child: selectedIconBytes == null
? const Icon(Icons.person, color: Colors.white)
: null,
child: selectedIconBytes != null
? ClipOval(
child: Image.memory(
selectedIconBytes!,
width: 40,
height: 40,
fit: BoxFit.cover,
),
)
: const Icon(Icons.person, color: Colors.white),
),
const SizedBox(width: 16),
ElevatedButton.icon(
@@ -377,12 +391,33 @@ class _FamilyManagerTabState extends State<FamilyManagerTab> {
children: [
CircleAvatar(
backgroundColor: selectedColor,
backgroundImage: selectedIconBytes != null
? MemoryImage(selectedIconBytes!)
: previewImage,
child: (selectedIconBytes == null && previewImage == null)
? Text(member.name.isNotEmpty ? member.name[0] : '?')
: null,
child: selectedIconBytes != null
? ClipOval(
child: Image.memory(
selectedIconBytes!,
width: 40,
height: 40,
fit: BoxFit.cover,
),
)
: (previewImage != null
? ClipOval(
child: Image(
image: previewImage!,
width: 40,
height: 40,
fit: BoxFit.cover,
errorBuilder:
(context, error, stackTrace) => Text(
member.name.isNotEmpty
? member.name[0]
: '?',
),
),
)
: Text(member.name.isNotEmpty
? member.name[0]
: '?')),
),
const SizedBox(width: 16),
ElevatedButton.icon(

View File

@@ -60,7 +60,7 @@ class BibleVerseWidget extends StatelessWidget {
Text(
verse.text,
textAlign: TextAlign.center,
style: Theme.of(context).textTheme.bodyLarge?.copyWith(
style: Theme.of(context).textTheme.bodyMedium?.copyWith(
color: Colors.white,
height: 1.5,
fontStyle: FontStyle.italic,

View File

@@ -129,11 +129,28 @@ class TodoListWidget extends StatelessWidget {
contentPadding: EdgeInsets.zero,
leading: CircleAvatar(
backgroundColor: memberColor.withOpacity(0.2),
backgroundImage: member.iconUrl.isNotEmpty
? NetworkImage(member.iconUrl)
: null,
child: member.iconUrl.isEmpty
? (member.name.isNotEmpty
child: member.iconUrl.isNotEmpty
? ClipOval(
child: Image.network(
member.iconUrl,
width: 40,
height: 40,
fit: BoxFit.cover,
errorBuilder: (context, error, stackTrace) {
return Text(
member.name.isNotEmpty
? member.name[0].toUpperCase()
: '?',
style: TextStyle(
color: memberColor,
fontWeight: FontWeight.bold,
fontSize: 20,
),
);
},
),
)
: (member.name.isNotEmpty
? Text(
member.name[0].toUpperCase(),
style: TextStyle(
@@ -145,8 +162,7 @@ class TodoListWidget extends StatelessWidget {
: Icon(
Icons.person,
color: memberColor,
))
: null,
)),
),
title: Text(
todo.title,