chore: Move emote settings button to chat popup menu
parent
0a23dca11e
commit
524a63e1d6
@ -0,0 +1,100 @@
|
|||||||
|
import 'package:flutter/material.dart';
|
||||||
|
|
||||||
|
import 'package:fluffychat/config/themes.dart';
|
||||||
|
|
||||||
|
class AvatarPageHeader extends StatelessWidget {
|
||||||
|
final Widget avatar;
|
||||||
|
final void Function()? onAvatarEdit;
|
||||||
|
final Widget? textButtonLeft, textButtonRight;
|
||||||
|
final List<Widget> iconButtons;
|
||||||
|
|
||||||
|
const AvatarPageHeader({
|
||||||
|
super.key,
|
||||||
|
required this.avatar,
|
||||||
|
this.onAvatarEdit,
|
||||||
|
this.iconButtons = const [],
|
||||||
|
this.textButtonLeft,
|
||||||
|
this.textButtonRight,
|
||||||
|
});
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
final theme = Theme.of(context);
|
||||||
|
final onAvatarEdit = this.onAvatarEdit;
|
||||||
|
return Center(
|
||||||
|
child: ConstrainedBox(
|
||||||
|
constraints: const BoxConstraints(maxWidth: FluffyThemes.columnWidth),
|
||||||
|
child: Column(
|
||||||
|
mainAxisSize: MainAxisSize.min,
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.center,
|
||||||
|
spacing: 8.0,
|
||||||
|
children: [
|
||||||
|
Stack(
|
||||||
|
children: [
|
||||||
|
avatar,
|
||||||
|
if (onAvatarEdit != null)
|
||||||
|
Positioned(
|
||||||
|
bottom: 0,
|
||||||
|
right: 0,
|
||||||
|
child: FloatingActionButton.small(
|
||||||
|
elevation: 2,
|
||||||
|
onPressed: onAvatarEdit,
|
||||||
|
heroTag: null,
|
||||||
|
child: const Icon(Icons.camera_alt_outlined),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
TextButtonTheme(
|
||||||
|
data: TextButtonThemeData(
|
||||||
|
style: TextButton.styleFrom(
|
||||||
|
disabledForegroundColor: theme.colorScheme.onSurface,
|
||||||
|
foregroundColor: theme.colorScheme.onSurface,
|
||||||
|
textStyle: const TextStyle(fontWeight: FontWeight.normal),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
child: Padding(
|
||||||
|
padding: const EdgeInsets.symmetric(horizontal: 16.0),
|
||||||
|
child: LayoutBuilder(
|
||||||
|
builder: (context, constraints) {
|
||||||
|
return Row(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.center,
|
||||||
|
children: [
|
||||||
|
ConstrainedBox(
|
||||||
|
constraints: BoxConstraints(
|
||||||
|
maxWidth: constraints.maxWidth / 2,
|
||||||
|
),
|
||||||
|
child: textButtonLeft,
|
||||||
|
),
|
||||||
|
ConstrainedBox(
|
||||||
|
constraints: BoxConstraints(
|
||||||
|
maxWidth: constraints.maxWidth / 2,
|
||||||
|
),
|
||||||
|
child: textButtonRight,
|
||||||
|
),
|
||||||
|
],
|
||||||
|
);
|
||||||
|
},
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
IconButtonTheme(
|
||||||
|
data: IconButtonThemeData(
|
||||||
|
style: IconButton.styleFrom(
|
||||||
|
backgroundColor: theme.colorScheme.surfaceContainer,
|
||||||
|
iconSize: 24,
|
||||||
|
padding: const EdgeInsets.all(16),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
child: Row(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
|
||||||
|
children: iconButtons,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
const SizedBox(height: 0.0),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue