BaseHomeHeaderWidget.dart
4.9 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:wow_english/common/core/app_config_helper.dart';
import 'package:wow_english/common/extension/string_extension.dart';
import 'package:wow_english/utils/audio_player_util.dart';
import '../../../common/core/user_util.dart';
import '../../../models/course_entity.dart';
import '../../../route/route.dart';
import '../../../utils/image_util.dart';
import '../../user/bloc/user_bloc.dart';
typedef HeaderCallback = void Function(dynamic);
class BaseHomeHeaderWidget extends StatelessWidget {
const BaseHomeHeaderWidget({super.key, this.entity, this.callBack});
final CourseEntity? entity;
final HeaderCallback? callBack;
@override
Widget build(BuildContext context) {
return BlocBuilder<UserBloc, UserState>(
builder: (context, state) {
return Container(
height: 45,
width: double.infinity,
decoration: BoxDecoration(
image: DecorationImage(
image: AssetImage('bg_header_sliver'.assetPng),
fit: BoxFit.cover,
),
),
padding: EdgeInsets.symmetric(horizontal: 9.5.w),
child: Row(
children: [
ScreenUtil().bottomBarHeight.horizontalSpace,
GestureDetector(
onTap: () => {onUserClick()},
child: Container(
decoration: BoxDecoration(
border: Border.all(
width: 1.0,
color: const Color(0xFF140C10),
),
borderRadius: BorderRadius.circular(21),
),
child: CircleAvatar(
radius: 21,
backgroundImage: ImageUtil.getImageProviderOnDefault(
UserUtil.getUser()?.avatarUrl),
),
),
),
GestureDetector(
onTap: () => {onUserClick()},
child: Container(
margin: const EdgeInsets.only(left: 7),
padding: const EdgeInsets.all(4.0),
decoration: BoxDecoration(
color: Colors.white,
borderRadius: BorderRadius.circular(2),
border: Border.all(
width: 1.0,
color: const Color(0xFF140C10),
style: BorderStyle.solid),
),
child: Text(
UserUtil.getUser()?.name ?? '未登录',
style: TextStyle(
color: const Color(0xFF333333), fontSize: 16.sp),
),
),
),
20.horizontalSpace,
const Expanded(
child: Text(
"WOW ENGLISH",
textAlign: TextAlign.left,
style: TextStyle(color: Colors.white, fontSize: 30.0),
)),
Offstage(
offstage: AppConfigHelper.shouldHidePay() ||
!UserUtil.isLogined(),
child: GestureDetector(
onTap: () async => {
await AudioPlayerUtil.getInstance().pause(),
pushNamed(AppRouteName.shop).then((value) {
if (value != null) {
if (callBack == null) {
} else {
callBack!(value);
}
}
})
},
child: Row(children: <Widget>[
Image(
width: 20.0.w,
height: 20.0.h,
image: AssetImage('ic_countdown'.assetPng)),
// 替换为你的图片资源路径
const SizedBox(width: 6.0),
// 图片和文本之间的间隔
UserUtil.hasPermission()
? Text('还剩${UserUtil.getRemainingValidity()}天')
: const Text('未购买'),
]),
)),
ScreenUtil().bottomBarHeight.horizontalSpace,
],
));
},
);
}
Future<void> onUserClick() async {
if (UserUtil.isLogined()) {
await AudioPlayerUtil.getInstance().pause();
pushNamed(AppRouteName.user).then((value) {
if (value != null) {
if (callBack == null) {
} else {
callBack!(value);
}
}
});
} else {
pushNamed(AppRouteName.login);
}
}
}