chatapp3-flutter/lib/ui_kit/components/appbar/socialchat_appbar.dart
2026-04-09 21:32:23 +08:00

174 lines
5.5 KiB
Dart

import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:yumi/app/constants/sc_global_config.dart';
import 'package:yumi/app/constants/sc_screen.dart';
class SocialChatAppBar extends StatefulWidget implements PreferredSizeWidget {
final Widget child;
final double height;
final backgroundColor;
//LinearGradient gradient;
@override
State<StatefulWidget> createState() {
return SocialChatAppBarState();
}
SocialChatAppBar({
required this.child,
this.height = kToolbarHeight,
this.backgroundColor = Colors.white,
//this.gradient = const LinearGradient(colors: [Colors.white, Colors.white] , begin: Alignment.topLeft, end: Alignment.bottomRight)
});
@override
Size get preferredSize => Size.fromHeight(height);
}
class SocialChatAppBarState extends State<SocialChatAppBar> {
@override
Widget build(BuildContext context) {
// SystemUiOverlayStyle style = SystemUiOverlayStyle(
// statusBarColor: Colors.white,
// ///这是设置状态栏的图标和字体的颜色
// ///Brightness.light 一般都是显示为白色
// ///Brightness.dark 一般都是显示为黑色
// statusBarIconBrightness: Brightness.dark
// );
// SystemChrome.setSystemUIOverlayStyle(style);
return Container(
color: widget.backgroundColor,
//decoration: BoxDecoration(gradient: widget.gradient),
child: SafeArea(
top: true,
child: Container(height: widget.height, child: widget.child),
),
);
}
}
class SocialChatStandardAppBar extends StatelessWidget
implements PreferredSizeWidget {
final String title;
final Widget? titleWidget;
final Widget? leading;
final List<Widget> actions;
final Color backgroundColor;
final Color? backButtonColor;
final Gradient gradient;
final Function? onTag;
final bool showBackButton;
SocialChatStandardAppBar({
this.title = "",
required this.actions,
this.backgroundColor = Colors.white,
this.backButtonColor,
this.titleWidget,
this.showBackButton = true,
this.leading,
this.onTag,
this.gradient = const LinearGradient(
colors: [Colors.transparent, Colors.transparent],
),
});
@override
Widget build(BuildContext context) {
var leadingWidget = Container(
width: titleWidget == null ? 38 : null,
alignment: AlignmentDirectional.centerStart,
child:
!showBackButton
? Container()
: leading ??
GestureDetector(
behavior: HitTestBehavior.opaque,
onTap: () {
if (onTag != null) {
onTag!();
} else {
Navigator.pop(context);
}
},
child: Container(
width: width(50),
height: height(30),
alignment: AlignmentDirectional.centerStart,
padding: EdgeInsetsDirectional.only(start: width(15)),
child: Icon(
SCGlobalConfig.lang == "ar"
? Icons.keyboard_arrow_right
: Icons.keyboard_arrow_left,
size: 28.w,
color: backButtonColor ?? Color(0xffffffff),
),
),
),
);
var titleBody =
titleWidget ??
Align(
alignment: Alignment.center,
child: Text(
title,
textAlign: TextAlign.center,
style: TextStyle(
fontSize: ScreenUtil().setSp(18),
color: backButtonColor ?? Color(0xffffffff),
fontWeight: FontWeight.w500,
),
),
);
var body;
if (titleWidget != null) {
body = Container(
margin: EdgeInsets.only(top: ScreenUtil().statusBarHeight),
child: Row(
children: <Widget>[
leadingWidget,
Expanded(child: titleBody),
if (actions != null)
Row(mainAxisAlignment: MainAxisAlignment.end, children: actions),
],
),
);
}
return Container(
decoration: BoxDecoration(
gradient:
gradient ??
LinearGradient(colors: [Color(0xffffffff), Color(0xffffffff)]),
),
child:
body ??
Container(
margin: EdgeInsets.only(top: ScreenUtil().statusBarHeight),
child: Stack(
alignment: AlignmentDirectional.centerStart,
children: <Widget>[
leadingWidget,
titleBody,
if (actions != null)
Align(
alignment: AlignmentDirectional.centerEnd,
child: Row(
mainAxisSize: MainAxisSize.min,
mainAxisAlignment: MainAxisAlignment.end,
crossAxisAlignment: CrossAxisAlignment.center,
children: actions,
),
),
],
),
),
);
}
@override
// TODO: implement preferredSize
Size get preferredSize => Size.fromHeight(kToolbarHeight);
}