diff --git a/assets/coin_big_bg.png b/assets/coin_big_bg.png
new file mode 100644
index 0000000..672264e
Binary files /dev/null and b/assets/coin_big_bg.png differ
diff --git a/assets/coin_small_bg.png b/assets/coin_small_bg.png
new file mode 100644
index 0000000..989dfcb
Binary files /dev/null and b/assets/coin_small_bg.png differ
diff --git a/assets/full_access.png b/assets/full_access.png
new file mode 100644
index 0000000..d31b0bc
Binary files /dev/null and b/assets/full_access.png differ
diff --git a/assets/ic_coin.png b/assets/ic_coin.png
new file mode 100644
index 0000000..671f34d
Binary files /dev/null and b/assets/ic_coin.png differ
diff --git a/assets/ic_hd.png b/assets/ic_hd.png
new file mode 100644
index 0000000..79b52e6
Binary files /dev/null and b/assets/ic_hd.png differ
diff --git a/assets/mine_vip_bg.png b/assets/mine_vip_bg.png
new file mode 100644
index 0000000..03bc584
Binary files /dev/null and b/assets/mine_vip_bg.png differ
diff --git a/assets/no_ad.png b/assets/no_ad.png
new file mode 100644
index 0000000..4c11890
Binary files /dev/null and b/assets/no_ad.png differ
diff --git a/assets/vip_month_bg.png b/assets/vip_month_bg.png
new file mode 100644
index 0000000..7aa7f0d
Binary files /dev/null and b/assets/vip_month_bg.png differ
diff --git a/assets/vip_quarter_bg.png b/assets/vip_quarter_bg.png
new file mode 100644
index 0000000..11b3327
Binary files /dev/null and b/assets/vip_quarter_bg.png differ
diff --git a/assets/vip_week_bg.png b/assets/vip_week_bg.png
new file mode 100644
index 0000000..3117d16
Binary files /dev/null and b/assets/vip_week_bg.png differ
diff --git a/assets/vip_year_bg.png b/assets/vip_year_bg.png
new file mode 100644
index 0000000..f39ce63
Binary files /dev/null and b/assets/vip_year_bg.png differ
diff --git a/ios/Runner.xcodeproj/project.pbxproj b/ios/Runner.xcodeproj/project.pbxproj
index 46742f7..958332a 100644
--- a/ios/Runner.xcodeproj/project.pbxproj
+++ b/ios/Runner.xcodeproj/project.pbxproj
@@ -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;
diff --git a/ios/Runner/Info.plist b/ios/Runner/Info.plist
index caae079..b5e717a 100644
--- a/ios/Runner/Info.plist
+++ b/ios/Runner/Info.plist
@@ -7,7 +7,7 @@
CFBundleDevelopmentRegion
$(DEVELOPMENT_LANGUAGE)
CFBundleDisplayName
- Flutter Kinetra
+ Kinetra
CFBundleExecutable
$(EXECUTABLE_NAME)
CFBundleIdentifier
@@ -15,7 +15,7 @@
CFBundleInfoDictionaryVersion
6.0
CFBundleName
- flutter_kinetra
+ Kinetra
CFBundlePackageType
APPL
CFBundleShortVersionString
diff --git a/lib/kt_pages/kt_actor/kt_actor_detail_page.dart b/lib/kt_pages/kt_actor/kt_actor_detail_page.dart
new file mode 100644
index 0000000..7af9056
--- /dev/null
+++ b/lib/kt_pages/kt_actor/kt_actor_detail_page.dart
@@ -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 createState() => _KtActorDetailPageState();
+}
+
+class _KtActorDetailPageState extends State {
+ int pageNo = 1;
+ int pageSize = 10;
+ final refreshCtrl = RefreshController();
+ List 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 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 list = [
+ ...res.data['list']
+ .map(
+ (item) => KtShortVideoBean.fromJson(item as Map),
+ )
+ .toList(),
+ ];
+
+ videoList.addAll(list);
+ setState(() {});
+ }
+ }
+}
diff --git a/lib/kt_pages/kt_actor/kt_actor_page.dart b/lib/kt_pages/kt_actor/kt_actor_page.dart
index 4903b19..138b521 100644
--- a/lib/kt_pages/kt_actor/kt_actor_page.dart
+++ b/lib/kt_pages/kt_actor/kt_actor_page.dart
@@ -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 {
- 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