feat:演员功能
BIN
assets/coin_big_bg.png
Normal file
After Width: | Height: | Size: 37 KiB |
BIN
assets/coin_small_bg.png
Normal file
After Width: | Height: | Size: 44 KiB |
BIN
assets/full_access.png
Normal file
After Width: | Height: | Size: 631 B |
BIN
assets/ic_coin.png
Normal file
After Width: | Height: | Size: 7.0 KiB |
BIN
assets/ic_hd.png
Normal file
After Width: | Height: | Size: 701 B |
BIN
assets/mine_vip_bg.png
Normal file
After Width: | Height: | Size: 112 KiB |
BIN
assets/no_ad.png
Normal file
After Width: | Height: | Size: 1.1 KiB |
BIN
assets/vip_month_bg.png
Normal file
After Width: | Height: | Size: 239 KiB |
BIN
assets/vip_quarter_bg.png
Normal file
After Width: | Height: | Size: 238 KiB |
BIN
assets/vip_week_bg.png
Normal file
After Width: | Height: | Size: 259 KiB |
BIN
assets/vip_year_bg.png
Normal file
After Width: | Height: | Size: 266 KiB |
@ -489,14 +489,14 @@
|
||||
CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES = YES;
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
|
||||
DEVELOPMENT_TEAM = 38X8FL2527;
|
||||
DEVELOPMENT_TEAM = R2HNUU3JZL;
|
||||
ENABLE_BITCODE = NO;
|
||||
INFOPLIST_FILE = Runner/Info.plist;
|
||||
LD_RUNPATH_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
"@executable_path/Frameworks",
|
||||
);
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.kinetra.adehok.app.flutterKinetra;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.kinetra.adehok.app;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
|
||||
SUPPORTS_MACCATALYST = NO;
|
||||
@ -678,14 +678,14 @@
|
||||
CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES = YES;
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
|
||||
DEVELOPMENT_TEAM = 38X8FL2527;
|
||||
DEVELOPMENT_TEAM = R2HNUU3JZL;
|
||||
ENABLE_BITCODE = NO;
|
||||
INFOPLIST_FILE = Runner/Info.plist;
|
||||
LD_RUNPATH_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
"@executable_path/Frameworks",
|
||||
);
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.kinetra.adehok.app.flutterKinetra;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.kinetra.adehok.app;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
|
||||
SUPPORTS_MACCATALYST = NO;
|
||||
@ -707,14 +707,14 @@
|
||||
CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES = YES;
|
||||
CLANG_ENABLE_MODULES = YES;
|
||||
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
|
||||
DEVELOPMENT_TEAM = 38X8FL2527;
|
||||
DEVELOPMENT_TEAM = R2HNUU3JZL;
|
||||
ENABLE_BITCODE = NO;
|
||||
INFOPLIST_FILE = Runner/Info.plist;
|
||||
LD_RUNPATH_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
"@executable_path/Frameworks",
|
||||
);
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.kinetra.adehok.app.flutterKinetra;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = com.kinetra.adehok.app;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
|
||||
SUPPORTS_MACCATALYST = NO;
|
||||
|
@ -7,7 +7,7 @@
|
||||
<key>CFBundleDevelopmentRegion</key>
|
||||
<string>$(DEVELOPMENT_LANGUAGE)</string>
|
||||
<key>CFBundleDisplayName</key>
|
||||
<string>Flutter Kinetra</string>
|
||||
<string>Kinetra</string>
|
||||
<key>CFBundleExecutable</key>
|
||||
<string>$(EXECUTABLE_NAME)</string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
@ -15,7 +15,7 @@
|
||||
<key>CFBundleInfoDictionaryVersion</key>
|
||||
<string>6.0</string>
|
||||
<key>CFBundleName</key>
|
||||
<string>flutter_kinetra</string>
|
||||
<string>Kinetra</string>
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>APPL</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
|
309
lib/kt_pages/kt_actor/kt_actor_detail_page.dart
Normal file
@ -0,0 +1,309 @@
|
||||
import 'dart:math';
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_kinetra/kt_utils/kt_string_extend.dart';
|
||||
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:pull_to_refresh/pull_to_refresh.dart';
|
||||
|
||||
import '../../dio_cilent/kt_apis.dart';
|
||||
import '../../dio_cilent/kt_request.dart';
|
||||
import '../../kt_model/kt_short_video_bean.dart';
|
||||
import '../../kt_widgets/kt_network_image.dart';
|
||||
import '../kt_routes.dart';
|
||||
|
||||
class KtActorDetailPage extends StatefulWidget {
|
||||
final Map actor;
|
||||
const KtActorDetailPage({super.key, required this.actor});
|
||||
|
||||
@override
|
||||
State<KtActorDetailPage> createState() => _KtActorDetailPageState();
|
||||
}
|
||||
|
||||
class _KtActorDetailPageState extends State<KtActorDetailPage> {
|
||||
int pageNo = 1;
|
||||
int pageSize = 10;
|
||||
final refreshCtrl = RefreshController();
|
||||
List<KtShortVideoBean> videoList = [];
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Container(
|
||||
width: ScreenUtil().screenWidth,
|
||||
height: ScreenUtil().screenHeight,
|
||||
padding: EdgeInsets.only(top: kToolbarHeight, left: 15.w, right: 15.w),
|
||||
decoration: BoxDecoration(
|
||||
image: DecorationImage(
|
||||
image: AssetImage('bg1.png'.ktIcon),
|
||||
fit: BoxFit.fill,
|
||||
),
|
||||
),
|
||||
child: Column(
|
||||
children: [
|
||||
Row(
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
GestureDetector(
|
||||
onTap: () => Navigator.of(context).maybePop(),
|
||||
child: Image.asset('ic_back.png'.ktIcon, width: 10.w),
|
||||
),
|
||||
Text(
|
||||
'Actor Details',
|
||||
style: TextStyle(
|
||||
fontSize: 16.sp,
|
||||
fontWeight: FontWeight.w700,
|
||||
color: Colors.black,
|
||||
),
|
||||
),
|
||||
Container(width: 24.w),
|
||||
],
|
||||
),
|
||||
SizedBox(height: 20.w),
|
||||
Expanded(
|
||||
child: SmartRefresher(
|
||||
controller: refreshCtrl,
|
||||
enablePullUp: false,
|
||||
enablePullDown: true,
|
||||
onRefresh: fetchData,
|
||||
child: SingleChildScrollView(
|
||||
child: Column(
|
||||
children: [
|
||||
actorInfoView(),
|
||||
SizedBox(height: 10.w),
|
||||
ListView.separated(
|
||||
padding: EdgeInsets.only(bottom: kBottomNavigationBarHeight),
|
||||
shrinkWrap: true,
|
||||
physics: NeverScrollableScrollPhysics(),
|
||||
itemCount: videoList.length,
|
||||
itemBuilder: (BuildContext context, int index) {
|
||||
KtShortVideoBean video = videoList[index];
|
||||
return GestureDetector(
|
||||
onTap: () => Get.toNamed(
|
||||
KtRoutes.shortVideo,
|
||||
arguments: {
|
||||
'shortPlayId': video.shortPlayId,
|
||||
'imageUrl': video.imageUrl ?? '',
|
||||
},
|
||||
),
|
||||
child: Container(
|
||||
width: ScreenUtil().screenWidth - 30.w,
|
||||
padding: EdgeInsets.all(10.w),
|
||||
decoration: BoxDecoration(
|
||||
color: Colors.white,
|
||||
borderRadius: BorderRadius.circular(14.w),
|
||||
),
|
||||
child: Row(
|
||||
children: [
|
||||
KtNetworkImage(
|
||||
imageUrl: video.imageUrl ?? '',
|
||||
width: 100.w,
|
||||
height: 127.w,
|
||||
borderRadius: BorderRadius.circular(12.w),
|
||||
),
|
||||
SizedBox(width: 12.w),
|
||||
SizedBox(
|
||||
width: 200.w,
|
||||
height: 127.w,
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
mainAxisAlignment: MainAxisAlignment.spaceBetween,
|
||||
children: [
|
||||
Text(
|
||||
video.name ?? '',
|
||||
maxLines: 1,
|
||||
overflow: TextOverflow.ellipsis,
|
||||
style: TextStyle(
|
||||
fontSize: 14.sp,
|
||||
fontWeight: FontWeight.w500,
|
||||
color: Color(0xFF1E1E20),
|
||||
),
|
||||
),
|
||||
Text(
|
||||
video.categoryList?.first.name ?? '',
|
||||
maxLines: 1,
|
||||
overflow: TextOverflow.ellipsis,
|
||||
style: TextStyle(
|
||||
fontSize: 12.sp,
|
||||
fontWeight: FontWeight.w400,
|
||||
color: Color(0xFF79C900),
|
||||
),
|
||||
),
|
||||
Text(
|
||||
video.description ?? '',
|
||||
maxLines: 2,
|
||||
overflow: TextOverflow.ellipsis,
|
||||
style: TextStyle(
|
||||
fontSize: 10.sp,
|
||||
fontWeight: FontWeight.w400,
|
||||
color: Color(0xFF5E5E5E),
|
||||
),
|
||||
),
|
||||
|
||||
Row(
|
||||
children: [
|
||||
Container(
|
||||
padding: EdgeInsets.symmetric(
|
||||
horizontal: 14.w,
|
||||
vertical: 7.w,
|
||||
),
|
||||
decoration: BoxDecoration(
|
||||
color: Color(0xFF1E1E20),
|
||||
borderRadius: BorderRadius.circular(
|
||||
100,
|
||||
),
|
||||
),
|
||||
child: Row(
|
||||
children: [
|
||||
Image.asset(
|
||||
'ic_top_play.png'.ktIcon,
|
||||
width: 16.w,
|
||||
),
|
||||
SizedBox(width: 4.w),
|
||||
Text(
|
||||
'Play',
|
||||
style: TextStyle(
|
||||
fontSize: 12.sp,
|
||||
fontWeight: FontWeight.w500,
|
||||
color: Color(0xFFA7F62F),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
);
|
||||
},
|
||||
separatorBuilder: (_, __) => SizedBox(height: 10.w),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
actorInfoView() {
|
||||
return Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Row(
|
||||
children: [
|
||||
KtNetworkImage(
|
||||
imageUrl: widget.actor['avatar'],
|
||||
width: 60.w,
|
||||
height: 60.w,
|
||||
borderRadius: BorderRadius.circular(100.w),
|
||||
),
|
||||
SizedBox(width: 10.w),
|
||||
SizedBox(
|
||||
height: 60.w,
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: [
|
||||
Text(
|
||||
widget.actor['name'],
|
||||
maxLines: 1,
|
||||
overflow: TextOverflow.ellipsis,
|
||||
style: TextStyle(
|
||||
fontSize: 18.sp,
|
||||
color: Color(0xFF1E1E20),
|
||||
fontWeight: FontWeight.w500,
|
||||
),
|
||||
),
|
||||
widget.actor['gender'] == 'male'
|
||||
? Icon(Icons.male_sharp, size: 20.w, color: Colors.blue)
|
||||
: Icon(
|
||||
Icons.female_sharp,
|
||||
size: 20.w,
|
||||
color: Colors.pink,
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
SizedBox(height: 8.w),
|
||||
Text(
|
||||
'Information',
|
||||
style: TextStyle(
|
||||
fontSize: 16.sp,
|
||||
color: Color(0xFF1E1E20),
|
||||
fontWeight: FontWeight.w600,
|
||||
),
|
||||
),
|
||||
SizedBox(height: 8.w),
|
||||
Container(
|
||||
padding: EdgeInsets.all(8.w),
|
||||
decoration: BoxDecoration(
|
||||
color: Colors.white,
|
||||
borderRadius: BorderRadius.circular(12.w)
|
||||
),
|
||||
child: Text(
|
||||
widget.actor['intro'],
|
||||
style: TextStyle(
|
||||
fontSize: 12.sp,
|
||||
color: Color(0xFF1E1E20),
|
||||
fontWeight: FontWeight.w400,
|
||||
),
|
||||
),
|
||||
),
|
||||
SizedBox(height: 20.w),
|
||||
Text(
|
||||
'Dramas',
|
||||
style: TextStyle(
|
||||
fontSize: 16.sp,
|
||||
color: Color(0xFF1E1E20),
|
||||
fontWeight: FontWeight.w600,
|
||||
),
|
||||
),
|
||||
],
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();Random random = Random();
|
||||
pageNo = random.nextInt(3);
|
||||
pageSize = random.nextInt(5) + 10;
|
||||
fetchData();
|
||||
}
|
||||
|
||||
fetchData() async {
|
||||
videoList.clear();
|
||||
|
||||
Map<String, dynamic> params = {
|
||||
'current_page': pageNo,
|
||||
'page_size': pageSize
|
||||
};
|
||||
|
||||
ApiResponse res = await KtHttpClient().request(
|
||||
KtApis.homeVideoList,
|
||||
method: HttpMethod.get,
|
||||
queryParameters: params,
|
||||
);
|
||||
refreshCtrl.refreshCompleted();
|
||||
if (res.success) {
|
||||
List<KtShortVideoBean> list = [
|
||||
...res.data['list']
|
||||
.map(
|
||||
(item) => KtShortVideoBean.fromJson(item as Map<String, dynamic>),
|
||||
)
|
||||
.toList(),
|
||||
];
|
||||
|
||||
videoList.addAll(list);
|
||||
setState(() {});
|
||||
}
|
||||
}
|
||||
}
|
@ -1,4 +1,11 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_kinetra/kt_pages/kt_actor/kt_actor_detail_page.dart';
|
||||
import 'package:flutter_kinetra/kt_utils/kt_string_extend.dart';
|
||||
import 'package:flutter_screenutil/flutter_screenutil.dart';
|
||||
import 'package:get/get.dart';
|
||||
import 'package:pull_to_refresh/pull_to_refresh.dart';
|
||||
|
||||
import '../../kt_widgets/kt_network_image.dart';
|
||||
|
||||
class KtActorPage extends StatefulWidget {
|
||||
const KtActorPage({super.key});
|
||||
@ -8,86 +15,480 @@ class KtActorPage extends StatefulWidget {
|
||||
}
|
||||
|
||||
class _KtActorPageState extends State<KtActorPage> {
|
||||
List actorList = [
|
||||
final refreshCtrl = RefreshController();
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Container(
|
||||
width: ScreenUtil().screenWidth,
|
||||
height: ScreenUtil().screenHeight,
|
||||
padding: EdgeInsets.only(top: kToolbarHeight, left: 15.w, right: 15.w),
|
||||
decoration: BoxDecoration(
|
||||
image: DecorationImage(
|
||||
image: AssetImage('bg1.png'.ktIcon),
|
||||
fit: BoxFit.fill,
|
||||
),
|
||||
),
|
||||
child: Column(
|
||||
children: [
|
||||
Text(
|
||||
'Actor',
|
||||
style: TextStyle(
|
||||
fontSize: 18.sp,
|
||||
color: Colors.black,
|
||||
fontWeight: FontWeight.w800,
|
||||
fontStyle: FontStyle.italic,
|
||||
),
|
||||
),
|
||||
SizedBox(height: 10.w),
|
||||
rankView(),
|
||||
SizedBox(height: 10.w),
|
||||
Expanded(
|
||||
child: SmartRefresher(
|
||||
controller: refreshCtrl,
|
||||
enablePullUp: false,
|
||||
enablePullDown: true,
|
||||
onRefresh: fetchData,
|
||||
child: ListView.separated(
|
||||
padding:EdgeInsets.only(bottom: kBottomNavigationBarHeight),
|
||||
shrinkWrap: true,
|
||||
physics: ClampingScrollPhysics(),
|
||||
itemBuilder: (context, index) => actorItem(index + 3),
|
||||
separatorBuilder: (_, __) => SizedBox(height: 15.w),
|
||||
itemCount: actorList.length - 3,
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
Widget rankView() {
|
||||
return Row(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
crossAxisAlignment: CrossAxisAlignment.end,
|
||||
children: [
|
||||
GestureDetector(
|
||||
onTap: () => Get.to(KtActorDetailPage(actor: actorList[1])),
|
||||
child: Column(
|
||||
children: [
|
||||
Container(
|
||||
width: 90.w,
|
||||
height: 90.w,
|
||||
decoration: BoxDecoration(
|
||||
border: Border.all(width: 2.w, color: Color(0xFFCDC5BF)),
|
||||
borderRadius: BorderRadius.circular(100),
|
||||
),
|
||||
child: KtNetworkImage(
|
||||
imageUrl: actorList[1]['avatar'],
|
||||
borderRadius: BorderRadius.circular(100.w),
|
||||
),
|
||||
),
|
||||
Container(
|
||||
width: 90.w,
|
||||
height: 58.w,
|
||||
margin: EdgeInsets.only(top: 6.w),
|
||||
alignment: Alignment.center,
|
||||
decoration: BoxDecoration(
|
||||
gradient: LinearGradient(
|
||||
begin: Alignment.topCenter,
|
||||
end: Alignment.bottomCenter,
|
||||
colors: [
|
||||
Color(0xFFCDC5BF),
|
||||
Color(0xFFCDC5BF).withValues(alpha: 0),
|
||||
],
|
||||
),
|
||||
borderRadius: BorderRadius.vertical(
|
||||
top: Radius.circular(12.w),
|
||||
),
|
||||
),
|
||||
child: Container(
|
||||
width: 33.w,
|
||||
height: 33.w,
|
||||
alignment: Alignment.center,
|
||||
decoration: BoxDecoration(
|
||||
image: DecorationImage(
|
||||
image: AssetImage('top_2.png'.ktIcon),
|
||||
fit: BoxFit.fill,
|
||||
),
|
||||
),
|
||||
child: Text(
|
||||
'2',
|
||||
style: TextStyle(
|
||||
fontSize: 16.sp,
|
||||
color: Colors.black,
|
||||
fontStyle: FontStyle.italic,
|
||||
fontWeight: FontWeight.bold,
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
SizedBox(
|
||||
width: 90.w,
|
||||
child: Text(
|
||||
actorList[1]['name'],
|
||||
textAlign: TextAlign.center,
|
||||
maxLines: 1,
|
||||
overflow: TextOverflow.ellipsis,
|
||||
style: TextStyle(
|
||||
fontSize: 12.sp,
|
||||
color: Colors.black,
|
||||
fontWeight: FontWeight.w600,
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
SizedBox(width: 10.w),
|
||||
GestureDetector(
|
||||
onTap: () => Get.to(KtActorDetailPage(actor: actorList[0])),
|
||||
child: Column(
|
||||
children: [
|
||||
Container(
|
||||
width: 100.w,
|
||||
height: 100.w,
|
||||
decoration: BoxDecoration(
|
||||
border: Border.all(width: 2.w, color: Color(0xFFFFC125)),
|
||||
borderRadius: BorderRadius.circular(100),
|
||||
),
|
||||
child: KtNetworkImage(
|
||||
imageUrl: actorList[0]['avatar'],
|
||||
borderRadius: BorderRadius.circular(100.w),
|
||||
),
|
||||
),
|
||||
Container(
|
||||
width: 100.w,
|
||||
height: 78.w,
|
||||
margin: EdgeInsets.only(top: 6.w),
|
||||
alignment: Alignment.center,
|
||||
decoration: BoxDecoration(
|
||||
gradient: LinearGradient(
|
||||
begin: Alignment.topCenter,
|
||||
end: Alignment.bottomCenter,
|
||||
colors: [
|
||||
Color(0xFFFFC125),
|
||||
Color(0xFFFFC125).withValues(alpha: 0),
|
||||
],
|
||||
),
|
||||
borderRadius: BorderRadius.vertical(
|
||||
top: Radius.circular(12.w),
|
||||
),
|
||||
),
|
||||
child: Container(
|
||||
width: 44.w,
|
||||
height: 44.w,
|
||||
alignment: Alignment.center,
|
||||
decoration: BoxDecoration(
|
||||
image: DecorationImage(
|
||||
image: AssetImage('top_1.png'.ktIcon),
|
||||
fit: BoxFit.fill,
|
||||
),
|
||||
),
|
||||
child: Text(
|
||||
'1',
|
||||
style: TextStyle(
|
||||
fontSize: 18.sp,
|
||||
color: Colors.black,
|
||||
fontStyle: FontStyle.italic,
|
||||
fontWeight: FontWeight.bold,
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
SizedBox(
|
||||
width: 100.w,
|
||||
child: Text(
|
||||
actorList[0]['name'],
|
||||
textAlign: TextAlign.center,
|
||||
maxLines: 1,
|
||||
overflow: TextOverflow.ellipsis,
|
||||
style: TextStyle(
|
||||
fontSize: 12.sp,
|
||||
color: Colors.black,
|
||||
fontWeight: FontWeight.w600,
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
SizedBox(width: 10.w),
|
||||
GestureDetector(
|
||||
onTap: () => Get.to(KtActorDetailPage(actor: actorList[2])),
|
||||
child: Column(
|
||||
children: [
|
||||
Container(
|
||||
width: 80.w,
|
||||
height: 80.w,
|
||||
decoration: BoxDecoration(
|
||||
border: Border.all(width: 2.w, color: Color(0xFF79C900)),
|
||||
borderRadius: BorderRadius.circular(100),
|
||||
),
|
||||
child: KtNetworkImage(
|
||||
imageUrl: actorList[2]['avatar'],
|
||||
borderRadius: BorderRadius.circular(100.w),
|
||||
),
|
||||
),
|
||||
Container(
|
||||
width: 80.w,
|
||||
height: 48.w,
|
||||
margin: EdgeInsets.only(top: 6.w),
|
||||
alignment: Alignment.center,
|
||||
decoration: BoxDecoration(
|
||||
gradient: LinearGradient(
|
||||
begin: Alignment.topCenter,
|
||||
end: Alignment.bottomCenter,
|
||||
colors: [
|
||||
Color(0xFF79C900),
|
||||
Color(0xFF79C900).withValues(alpha: 0),
|
||||
],
|
||||
),
|
||||
borderRadius: BorderRadius.vertical(
|
||||
top: Radius.circular(12.w),
|
||||
),
|
||||
),
|
||||
child: Container(
|
||||
width: 33.w,
|
||||
height: 33.w,
|
||||
alignment: Alignment.center,
|
||||
decoration: BoxDecoration(
|
||||
image: DecorationImage(
|
||||
image: AssetImage('top_3.png'.ktIcon),
|
||||
fit: BoxFit.fill,
|
||||
),
|
||||
),
|
||||
child: Text(
|
||||
'3',
|
||||
style: TextStyle(
|
||||
fontSize: 14.sp,
|
||||
color: Colors.black,
|
||||
fontStyle: FontStyle.italic,
|
||||
fontWeight: FontWeight.bold,
|
||||
),
|
||||
),
|
||||
),
|
||||
),
|
||||
SizedBox(
|
||||
width: 70.w,
|
||||
child: Text(
|
||||
actorList[2]['name'],
|
||||
textAlign: TextAlign.center,
|
||||
maxLines: 1,
|
||||
overflow: TextOverflow.ellipsis,
|
||||
style: TextStyle(
|
||||
fontSize: 12.sp,
|
||||
color: Colors.black,
|
||||
fontWeight: FontWeight.w600,
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
],
|
||||
);
|
||||
}
|
||||
|
||||
Widget actorItem(int index) {
|
||||
Map actor = actorList[index];
|
||||
return GestureDetector(
|
||||
onTap: () => Get.to(KtActorDetailPage(actor: actor)),
|
||||
child: Container(
|
||||
width: ScreenUtil().screenWidth - 30.w,
|
||||
padding: EdgeInsets.symmetric(horizontal: 8.w, vertical: 6.w),
|
||||
decoration: BoxDecoration(
|
||||
color: Colors.white,
|
||||
borderRadius: BorderRadius.circular(12.w),
|
||||
),
|
||||
child: Row(
|
||||
children: [
|
||||
Stack(
|
||||
children: [
|
||||
KtNetworkImage(
|
||||
imageUrl: actor['avatar'],
|
||||
width: 100.w,
|
||||
height: 133.w,
|
||||
borderRadius: BorderRadius.circular(12.w),
|
||||
),
|
||||
Container(
|
||||
width: 24.w,
|
||||
height: 24.w,
|
||||
margin: EdgeInsets.only(left: 4.w, top: 4.w),
|
||||
alignment: Alignment.center,
|
||||
decoration: BoxDecoration(
|
||||
image: DecorationImage(
|
||||
image: AssetImage('top_other.png'.ktIcon),
|
||||
fit: BoxFit.fill,
|
||||
),
|
||||
),
|
||||
child: Text(
|
||||
'${index + 1}',
|
||||
style: TextStyle(
|
||||
fontSize: 12.sp,
|
||||
color: Colors.black,
|
||||
fontWeight: FontWeight.w800,
|
||||
fontStyle: FontStyle.italic,
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
SizedBox(width: 10.w),
|
||||
SizedBox(
|
||||
height: 133.w,
|
||||
width: 200.w,
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
mainAxisAlignment: MainAxisAlignment.start,
|
||||
children: [
|
||||
Text(
|
||||
actor['name'],
|
||||
maxLines: 1,
|
||||
overflow: TextOverflow.ellipsis,
|
||||
style: TextStyle(
|
||||
fontSize: 14.sp,
|
||||
color: Color(0xFF1E1E20),
|
||||
fontWeight: FontWeight.w500,
|
||||
),
|
||||
),
|
||||
SizedBox(height: 10.w),
|
||||
Text(
|
||||
actor['intro'].toString().replaceAll('\n', ','),
|
||||
maxLines: 2,
|
||||
overflow: TextOverflow.ellipsis,
|
||||
style: TextStyle(
|
||||
fontSize: 12.sp,
|
||||
color: Color(0xFF1E1E20),
|
||||
fontWeight: FontWeight.w400,
|
||||
),
|
||||
),
|
||||
const Spacer(),
|
||||
Container(
|
||||
margin: EdgeInsets.only(bottom: 10.w),
|
||||
padding: EdgeInsets.symmetric(
|
||||
horizontal: 14.w,
|
||||
vertical: 7.w,
|
||||
),
|
||||
decoration: BoxDecoration(
|
||||
color: Color(0xFF1E1E20),
|
||||
borderRadius: BorderRadius.circular(100),
|
||||
),
|
||||
child: Text(
|
||||
'To Detail',
|
||||
style: TextStyle(
|
||||
fontSize: 12.sp,
|
||||
fontWeight: FontWeight.w500,
|
||||
color: Color(0xFFA7F62F),
|
||||
),
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
],
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
fetchData() {
|
||||
Future.delayed(Duration(seconds: 1));
|
||||
refreshCtrl.refreshCompleted();
|
||||
}
|
||||
|
||||
List<Map<String, dynamic>> actorList = [
|
||||
{
|
||||
"id": 6,
|
||||
"name": "Zhao Shuai",
|
||||
"gender": "female",
|
||||
"intro":
|
||||
"Female Lead: Zhao Shuai as Luo Shuyou\nHometown: Heilongjiang Province\nBirthday: March 15\nHeight: 165 cm\nWeight: 42 kg\nZodiac: Pisces\nTV Series: 'Spring Sunshine' — Played: Yao Meizi, Directed by Wang Shenghua\n'Bottom Line' — Played: Wu Hua, Directed by Liu Guotong\nWeb Drama: 'It's Fine, It's Youth' — Played: Ren Keying (Female Lead), Directed by Huo Suiqiang\n'Classroom's That Room' — Played: Hu Anqi, Directed by Jia Bingqi\n'With You for Ten Years, Give Me Half a Lifetime' — Played: Sun Dayu, Directed by Jiang Tianhang\nCinema Films: 'The Legend of the Condor Heroes: Hero of the Great' — Played: Xiao He, Directed by Xu Ke\n'Life is Like a Play' — Played: Tang Xiaolu, Directed by Deba/Meng Lingqing\nWeb Drama: 'Great Flood' — Played: Yao Yao (Female Lead), Directed by Yan Jia\n'Yellow River Strange Stories' — Played: Xiao Di (Female Lead), Directed by Chen Julin\n'Exorcism Bureau: Four Shadows Demons' — Played: Xiao Ling (Female Lead), Directed by Huo Suiqiang\n'Exorcism Bureau: Awakening of the Azure Dragon' — Played: Xiao Ling (Female Lead), Directed by Huo Suiqiang\nShort Drama: 'Women's Choices' — Played: Su Yuning (Female Lead), Directed by Liu Shu\n'Call Me Queen' — Played: Shang Yingying (Female Lead), Directed by Wang Ya",
|
||||
"avatar":
|
||||
"https://videomgr.qinjiu8.com/static/0bf28fa5b897d1d30a6cec5c4aea0b1b?_ext=png",
|
||||
},
|
||||
{
|
||||
"id": 5,
|
||||
"name": "Hou Weijie",
|
||||
"gender": "male",
|
||||
"intro":
|
||||
"Height: 185 cm\nWeight: 73 kg\nGraduated from Sichuan Media College, Acting Department\nCurrently based in Hefei\nInterests: Basketball, Badminton, Ping Pong, Swimming, Driving, Shooting, Boxing, Archery\nWorks:\nWeb Drama 'God's Second-hand Trading Group' — Played: Xu Haixing (Male Lead)\nWeb Drama '90s Rebirth' — Played: Jiang Yan (Male Second)\nShort Drama 'Little White Boss' — Played: Lin Jiaxu (Male Lead)\nShort Drama 'Master Feng's Little Temptress' — Played: Si Fengxing\nShort Drama 'My Double-faced Sweet Wife' — Played: Feng Sixing (Male Second)\nShort Drama 'Lucky Pet Wife: War Master, Good Night' — Played: Zhan Hanjue (Male Lead)\nTV Drama 'Into Your Memory' — Played: Manager\nTV Drama 'Exclusive Memory' — Played: Reporter\nFilm 'Meet God' — Played: Wang Yi (Co-star with Wen Zhang)\nFilm 'Corridor Pavilion' — Played: Du Yu (Co-star with Liu Mintao)\nSichuan Government Propaganda Video\nChina Minsheng Bank Commercial\nChengdu 2021 World University Games Propaganda Video\nXiao Lang Jiu Commercial\nLenovo Tablet Commercial\nHuawei, Apple, Xiaomi Phone Commercials.",
|
||||
"avatar":
|
||||
"https://videomgr.qinjiu8.com/static/6b92a80413cbfd5c83cb59047e76534e?_ext=png",
|
||||
},
|
||||
{
|
||||
"id": 1,
|
||||
"name": "瑞锋",
|
||||
"intro": "出生于2000年,中国内地男演员,毕业于上海戏剧学院,曾在多部爆款短剧、网剧中担任男主。",
|
||||
"name": "Rui Feng",
|
||||
"gender": "male",
|
||||
"intro":
|
||||
"Born in 2000, a male actor from mainland China, graduated from Shanghai Theatre Academy, has played leading roles in several popular short dramas and web series.",
|
||||
"avatar":
|
||||
"https://videomgr.qinjiu8.com/static/06b0ae972754ca3e2a1efd2262a1d4a5?_ext=png",
|
||||
},
|
||||
{
|
||||
"id": 2,
|
||||
"name": "叶苗苗",
|
||||
"intro": "出生于2004年,中国内地女演员,毕业于浙江传媒学院,曾在多部爆款短剧、网剧中担任女主。",
|
||||
"name": "Ye Miaomiao",
|
||||
"gender": "female",
|
||||
"intro":
|
||||
"Born in 2004, a female actor from mainland China, graduated from Zhejiang Media College, has played leading roles in several popular short dramas and web series.",
|
||||
"avatar":
|
||||
"https://videomgr.qinjiu8.com/static/7a8d60a4284c3a5b068fa0ad8cd14462?_ext=png",
|
||||
},
|
||||
{
|
||||
"id": 3,
|
||||
"name": "范大森",
|
||||
"name": "Fan Daisen",
|
||||
"gender": "female",
|
||||
"intro":
|
||||
"姓名:范大森\n身高:180厘米\n体重:69公斤\n年龄:30岁\n院校:江西师范大学\n专业:音乐表演\n短剧作品:\n《范总天上掉老婆了》——饰演:范大森\n《护世龙君》——饰演:皇甫云\n《九点》——饰演:肖笑\n《大将军的贴身兵王》——饰演:游将",
|
||||
"Name: Fan Daisen\nHeight: 180 cm\nWeight: 69 kg\nAge: 30\nMajor: Music Performance\nShort Drama Works:\n'Fan Zong, The Wife Fell From the Sky' — Played: Fan Daisen\n'Guardian Dragon Lord' — Played: Huangfu Yun\n'Nine O'Clock' — Played: Xiao Xiao\n'General's Personal Bodyguard' — Played: You Jiang",
|
||||
"avatar":
|
||||
"https://videomgr.qinjiu8.com/static/e82fc5711f9889258e42d3c21a8956bc?_ext=png",
|
||||
},
|
||||
{
|
||||
"id": 4,
|
||||
"name": "夏凯璐",
|
||||
"name": "Xia Kailu",
|
||||
"gender": "female",
|
||||
"intro":
|
||||
"姓名:夏凯璐\n身高:169厘米\n体重:49公斤\n年龄:23岁\n院校:江西师范大学\n专业:音乐表演\n短剧作品:\n《范总天上掉老婆了》——饰演:苏婉清",
|
||||
"Name: Xia Kailu\nHeight: 169 cm\nWeight: 49 kg\nAge: 23\nMajor: Music Performance\nShort Drama Works:\n'Fan Zong, The Wife Fell From the Sky' — Played: Su Wanqing",
|
||||
"avatar":
|
||||
"https://videomgr.qinjiu8.com/static/6d6c8be4a63f2cae2922a460518bb340?_ext=png",
|
||||
},
|
||||
{
|
||||
"id": 5,
|
||||
"name": "侯伟杰",
|
||||
"intro":
|
||||
"身高:185cm\n体重:73kg\n毕业于四川传媒学院表演系\n目前常驻地:合肥\n兴趣爱好:篮球 羽毛球 乒乓球 游泳 开车 射击 拳击 射箭\n 作品:网剧《神仙二手交易群》饰演男一徐海星\n网剧《九零重生》饰演男二蒋延\n短剧《小白老板》饰演男一林嘉许\n短剧《封爷的小撩精不好惹》饰演司封行\n短剧《我的双面甜妻》饰演男二封司行\n短剧《幸运宠妻·战爷,晚安》饰演男一战寒爵\n电视剧《走进你的记忆》饰演经理\n电视剧《独家记忆》饰演记者\n电影《遇神》饰演王益与文章对手戏\n电影《回廊亭》饰演杜宇与刘敏涛对手戏\n四川政府宣传片\n中国民生银行宣传片\n成都2021世界大运会宣传片\n小郎酒宣传片\n联想平板电脑新品宣传片\n富锦月饼TVC \n魔域手游NORTHLAND宣传片\n华为苹果小米手机宣传。",
|
||||
"avatar":
|
||||
"https://videomgr.qinjiu8.com/static/6b92a80413cbfd5c83cb59047e76534e?_ext=png",
|
||||
},
|
||||
{
|
||||
"id": 6,
|
||||
"name": "赵帅",
|
||||
"intro":
|
||||
"女主:赵帅饰洛书瑶\n籍贯: 黑龙江省\n生日: 3月15号\n身高: 165 cm\n体重: 42kg\n星座: 双鱼座\n电 视 剧:《春晖》饰演:瑶妹子导演:万盛华\n《底线》饰演:吴 华导演:刘国彤\n网 剧 作 品:《没关系,是青春啊》饰演:任可盈(女一)导演:霍穗强\n《教室的那一间》饰演:胡安琪导演:贾炳祺\n《与你十年,予我半生》饰演:孙大宇导演:姜天航\n院 线 电 影:《射雕英雄传·侠之大者》饰演:小 禾导演:徐 克\n《戏如人生》饰演:唐小璐导演:德柏/孟令青\n网 大 作 品:《大洪水》饰演:姚 尧(女一)导演: 严 嘉\n《黄河诡事》饰演:小 笛(女一)导演: 陈聚力\n《镇魔司: 四像伏魔》饰演:萧 玲(女一 )导演: 霍穗强 \n《镇魔司: 苍龙觉醒》饰演:萧 玲(女一 )导演: 霍穗强\n 短 剧 作 品:《女人的抉择》饰演:苏雨宁(女一)导演: 柳 澍\n《叫我女王大人》饰演:尚盈盈 (女一)导演: 王 亚",
|
||||
"avatar":
|
||||
"https://videomgr.qinjiu8.com/static/0bf28fa5b897d1d30a6cec5c4aea0b1b?_ext=png",
|
||||
},
|
||||
|
||||
{
|
||||
"id": 7,
|
||||
"name": "卡戎",
|
||||
"name": "Karong",
|
||||
"gender": "male",
|
||||
"intro":
|
||||
"00后男演员,热爱影视、喜欢戏剧。凭借作品《胡小路成长记》获全国心理情景剧一等奖,《冬至夏来》全国微电影大赛二等奖,参演国防部微电影《火种》,以及众多影视、戏剧作品的参演",
|
||||
"A male actor born after 2000, passionate about film and drama. Won the National Psychological Drama First Prize for 'The Growth of Hu Xiaolu', the National Micro Film Festival Second Prize for 'Winter Comes Summer', participated in the Ministry of Defense's micro-film 'Fire Seed', and appeared in many other films, dramas, and plays.",
|
||||
"avatar":
|
||||
"https://videomgr.qinjiu8.com/static/fd9d48e2ec95b0f06260333d126654a5?_ext=jpg",
|
||||
},
|
||||
{
|
||||
"id": 8,
|
||||
"name": "雷铠昀",
|
||||
"intro": "90后女演员,饰第30届大学生电影节公益片一等奖《回响》 女主,第十届亚洲微电影艺术节好作品奖女主",
|
||||
"name": "Lei Kaiyun",
|
||||
"gender": "female",
|
||||
"intro":
|
||||
"A female actor born in the 90s, played the female lead in the first-place winner of the 30th University Film Festival Public Welfare Film 'Echo', and the female lead in the 10th Asia Micro Film Art Festival's Good Works Award.",
|
||||
"avatar":
|
||||
"https://videomgr.qinjiu8.com/static/1d5cd0c34b24310c903fc4d7f7da6e57?_ext=jpg",
|
||||
},
|
||||
{
|
||||
"id": 9,
|
||||
"name": "陆楚",
|
||||
"name": "Lu Chu",
|
||||
"gender": "male",
|
||||
"intro":
|
||||
"年龄:24岁;所在地:北京;\r\n作品:《枫月俏佳人》男一 许枫\r\n《寒门枭士》饰演金锋(男一)爆;\r\n《伯虎闯花都》饰演唐伯虎(男一)爆\r\n《当我穿越成女儿国当先知》饰演 苏灿(男一)爆\r\n《骏马无敌》饰演 林风(男一);\r\n《陛下,我真的只想花钱啊》饰演 叶辰(男一);\r\n《回到民国当少帅》饰演周成(男一)",
|
||||
"Age: 24; Location: Beijing;\nWorks: 'Maple Moon Beauty' (Male Lead: Xu Feng)\n'Cold Gate Hero' as Jin Feng (Male Lead)\n'Bai Hu Breaks Into Flower City' as Tang Bohu (Male Lead)\n'When I Became a Prophet in the Kingdom of Women' as Su Can (Male Lead)\n'Invincible Steed' as Lin Feng (Male Lead)\n'Your Majesty, I Just Want to Spend Money' as Ye Chen (Male Lead)\n'Returning to the Republic of China as a Young Master' as Zhou Cheng (Male Lead)",
|
||||
"avatar":
|
||||
"https://videomgr.qinjiu8.com/static/e11be3feb0e84a9dfe92edb9472668a2?_ext=png",
|
||||
},
|
||||
{
|
||||
"id": 10,
|
||||
"name": "代代",
|
||||
"intro": "年龄:23岁;所在地:郑州;\n作品:《枫月俏佳人》诗夏月 (女主)\n《逆天赘婿》",
|
||||
"name": "Dai Dai",
|
||||
"gender": "female",
|
||||
"intro":
|
||||
"Age: 23; Location: Zhengzhou;\nWorks: 'Maple Moon Beauty' as Shi Xiamoon (Female Lead)\n'Reverse Heavenly Son-in-law'",
|
||||
"avatar":
|
||||
"https://videomgr.qinjiu8.com/static/ebd45f3c89b2e88134b22171f09ed7dd?_ext=png",
|
||||
},
|
||||
];
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Scaffold();
|
||||
}
|
||||
}
|
||||
|