import 'package:electronic_assistant/base/base_page.dart'; import 'package:electronic_assistant/module/talk/controller.dart'; import 'package:electronic_assistant/module/talk/original/view.dart'; import 'package:electronic_assistant/module/talk/summary/view.dart'; import 'package:electronic_assistant/module/talk/todo/view.dart'; import 'package:electronic_assistant/resource/colors.gen.dart'; import 'package:electronic_assistant/utils/expand.dart'; import 'package:electronic_assistant/utils/fixed_size_tab_indicator.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:get/get.dart'; import 'package:get/get_core/src/get_main.dart'; import '../../data/bean/talks.dart'; import '../../resource/assets.gen.dart'; import '../../resource/string.gen.dart'; import '../../router/app_pages.dart'; import '../../utils/common_style.dart'; class TalkPage extends BasePage { TalkPage({super.key}); static void start(TalkBean item) { Get.toNamed(RoutePath.talkDetail, arguments: item); } @override Widget buildBody(BuildContext context) { return Stack( children: [ buildTopGradient(), Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ AppBar( systemOverlayStyle: SystemUiOverlayStyle.dark, backgroundColor: Colors.transparent, leading: IconButton( icon: SizedBox( width: 24.w, height: 24.w, child: Assets.images.iconBack.image()), // Custom icon onPressed: () { Get.back(); }, ), ), Padding( padding: EdgeInsets.symmetric(horizontal: 12.w), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ SizedBox(height: 8.h), Text(controller.talkBean.value.title.orEmpty, style: TextStyle( fontSize: 22.sp, fontWeight: FontWeight.bold, color: ColorName.primaryTextColor)), SizedBox(height: 4.h), Text(controller.talkBean.value.createTime.orEmpty, style: TextStyle( fontSize: 12.sp, color: ColorName.secondaryTextColor)), SizedBox(height: 14.h), ], ), ), Expanded( child: DefaultTabController( length: controller.tabBeans.length, child: Column( children: [ Container( decoration: const BoxDecoration( color: Colors.white, borderRadius: BorderRadius.only( topLeft: Radius.circular(12), topRight: Radius.circular(12), )), child: TabBar( labelStyle: TextStyle( fontSize: 16.sp, fontWeight: FontWeight.bold), unselectedLabelStyle: TextStyle(fontSize: 14.sp), labelColor: ColorName.primaryTextColor, unselectedLabelColor: ColorName.secondaryTextColor, labelPadding: EdgeInsets.only(top: 4.h), dividerHeight: 0, indicator: FixedSizeTabIndicator( width: 16.w, height: 3.w, radius: 3, color: ColorName.colorPrimary), tabs: controller.tabBeans .map((txt) => Tab(text: txt)) .toList()), ), Divider( height: 1, color: const Color(0xFFf6f6f6), indent: 12.w, endIndent: 12.w), SizedBox(height: 8.h), buildTalkContentView() ], ))) ], ) ], ); } @override bool immersive() { return true; } Container buildTopGradient() { return Container( width: 1.sw, height: 180.h, decoration: BoxDecoration( gradient: LinearGradient( colors: ['#E1E9FF'.toColor(), '#F9FAFE'.toColor()], begin: Alignment.topCenter, end: Alignment.bottomCenter, stops: const [0.3, 1.0], ), )); } Widget buildTalkContentView() { return Obx(() { if (controller.analyseStatus.value == TalkStatus.notAnalysis) { if (controller.isShowElectricLow.value) { return buildElectricLowView(); } else { return buildNotAnalysisView(); } } else { return Expanded( child: TabBarView( children: controller.pages, ), ); } }); } Widget buildNotAnalysisView() { return SizedBox( width: double.infinity, child: Column( children: [ SizedBox(height: 119.h), SizedBox( width: 100.w, height: 100.w, child: Assets.images.iconTalkSummaryUnanalyzed.image()), SizedBox(height: 4.h), Text(StringName.talkUnAnalyzed.tr, style: TextStyle( fontSize: 15.sp, color: ColorName.primaryTextColor)), SizedBox(height: 2.h), Text(StringName.talkUnAnalyzedTips.tr, style: TextStyle( fontSize: 12.sp, color: ColorName.secondaryTextColor)), SizedBox(height: 24.h), GestureDetector( onTap: () { controller.checkCanAnalyze(); }, child: Container( decoration: getPrimaryBtnDecoration(8), width: 240.w, height: 48.w, child: Center( child: Text( StringName.talkAnalyzedBtnTxt.tr, style: TextStyle(fontSize: 16.sp, color: ColorName.white), ), ), ), ) ], ), ); } Widget buildElectricLowView() { return Container( color: const Color(0xFFDFE4FC), padding: EdgeInsets.only(left: 16.w, right: 12.w, top: 8.h, bottom: 8.h), child: Row( children: [ SizedBox( width: 46.w, height: 56.w, child: Assets.images.iconTalkElectricLow.image()), SizedBox(width: 10.w), IntrinsicHeight( child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ SizedBox( width: 90.w, height: 21.w, child: Assets.images.iconTalkElectricLowTxt.image()), SizedBox(width: 1.w), Text(StringName.talkElectricLow.tr, style: TextStyle( fontSize: 12.sp, color: ColorName.secondaryTextColor)), ], ), ), const Spacer(), GestureDetector( onTap: () { controller.goElectricStore(); }, child: Container( decoration: getPrimaryBtnDecoration(8), width: 100.w, height: 36.w, child: Center( child: Text(StringName.talkGoStore.tr, style: TextStyle(fontSize: 16.sp, color: ColorName.white)), )), ) ], ), ); } }