import 'package:electronic_assistant/base/base_page.dart'; import 'package:electronic_assistant/resource/assets.gen.dart'; import 'package:electronic_assistant/resource/colors.gen.dart'; import 'package:electronic_assistant/utils/expand.dart'; import 'package:electronic_assistant/utils/toast_util.dart'; import 'package:flutter/material.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:get/get.dart'; import 'package:pull_to_refresh/pull_to_refresh.dart'; import '../../../data/bean/talks.dart'; import '../../../resource/string.gen.dart'; import 'controller.dart'; class FileSearchPage extends BasePage { const FileSearchPage({super.key}); @override bool immersive() { return true; } Widget _buildFileItem(BuildContext context, int index) { return Obx(() { TalkBean talkBean = controller.talkList[index]; return Padding( padding: EdgeInsets.only(bottom: 8.w), child: GestureDetector( onTap: () { if (talkBean.status == TalkStatus.analysisSuccess) { Get.back(result: talkBean); } else { ToastUtil.showToast("谈话未分析,请选择其他文件"); } }, child: Container( decoration: BoxDecoration( color: Colors.white, borderRadius: BorderRadius.circular(8.w), ), padding: EdgeInsets.symmetric(horizontal: 10.w, vertical: 14.w), child: Row( crossAxisAlignment: CrossAxisAlignment.start, children: [ Image( image: (talkBean.status == TalkStatus.analysing || talkBean.status == TalkStatus.waitAnalysis) ? Assets.images.iconTalkAnalysis.provider() : Assets.images.iconFilesFile.provider(), width: 28.w, height: 32.w), Expanded( child: Padding( padding: EdgeInsets.symmetric(horizontal: 8.w), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text(talkBean.title.value.orEmpty, maxLines: 1, overflow: TextOverflow.ellipsis, style: TextStyle( fontSize: 14.sp, color: ColorName.primaryTextColor, fontWeight: FontWeight.bold)), Text(talkBean.summary.value.orEmpty, maxLines: 2, overflow: TextOverflow.ellipsis, style: TextStyle( fontSize: 12.sp, color: talkBean.status == TalkStatus.analysisFail ? "#F5574E".toColor() : ColorName.secondaryTextColor)), Container( margin: EdgeInsets.only(top: 6.w), child: Row( crossAxisAlignment: CrossAxisAlignment.center, children: [ Text(talkBean.duration.toFormattedDuration(), style: TextStyle( fontSize: 12.sp, color: ColorName.tertiaryTextColor)), Text(" | ", style: TextStyle( fontSize: 12.sp, color: ColorName.tertiaryTextColor, fontWeight: FontWeight.bold)), Text(talkBean.createTime.orEmpty, style: TextStyle( fontSize: 12.sp, color: ColorName.tertiaryTextColor)), ], ), ) ], ), )), ], ), ), )); }); } @override Widget buildBody(BuildContext context) { return Scaffold( backgroundColor: const Color.fromRGBO(246, 245, 248, 1), appBar: AppBar( title: Text(StringName.talkAll.tr), backgroundColor: const Color.fromRGBO(246, 245, 248, 1), scrolledUnderElevation: 0, leading: IconButton( icon: const Icon(Icons.arrow_back_ios_new_rounded), onPressed: () { Get.back(); }, ), ), body: Column( children: [ Expanded( child: Padding( padding: EdgeInsets.only(left: 12.w, right: 12.w), child: SmartRefresher( enablePullUp: true, enablePullDown: true, controller: controller.refreshController, onRefresh: controller.onRefreshData, onLoading: controller.onLoadMoreTalkData, child: CustomScrollView( slivers: [ Obx(() { return SliverList.builder( itemBuilder: _buildFileItem, itemCount: controller.talkList.length); }), ], ), ), )) ], ), ); // return Column(children: [ // Row( // children: [ // Expanded( // child: Padding( // padding: EdgeInsets.only(left: 12.w), // child: CupertinoSearchTextField( // placeholder: '搜索所有文件标题 / 内容', // prefixIcon: // ImageIcon(Assets.images.iconSearch.provider(), size: 20.w), // backgroundColor: const Color(0xFFF6F6F6), // style: // TextStyle(fontSize: 14.w, color: ColorName.primaryTextColor), // placeholderStyle: // TextStyle(fontSize: 14.w, color: const Color(0xFFAFAFAF)), // ), // )), // TextButton( // onPressed: () { // Get.back(); // }, // child: Text('取消', // style: TextStyle( // fontSize: 14.w, color: ColorName.secondaryTextColor))), // ], // ), // Padding( // padding: EdgeInsets.symmetric(horizontal: 12.w, vertical: 12.w), // child: Row(children: [ // Text( // "搜索结果", // style: TextStyle( // fontSize: 15.w, // color: ColorName.primaryTextColor, // fontWeight: FontWeight.bold), // ), // Expanded( // child: Row( // mainAxisAlignment: MainAxisAlignment.end, // children: [ // Text("更新时间排序", // style: TextStyle( // fontSize: 14.w, // fontWeight: FontWeight.bold, // color: ColorName.primaryTextColor)), // Image( // image: Assets.images.iconArrowDown.provider(), // width: 16.w, // height: 16.w) // ], // )) // ]), // ), // Visibility( // visible: true, // child: Expanded( // child: Stack( // fit: StackFit.expand, // children: [ // Padding( // padding: EdgeInsets.symmetric(horizontal: 12.w), // child: CustomScrollView( // slivers: [ // SliverToBoxAdapter( // child: Text("文件夹", // style: TextStyle( // fontSize: 14.w, // color: ColorName.secondaryTextColor))), // SliverAnimatedList( // itemBuilder: _dirItemBuilder, // initialItemCount: 5, // ), // SliverToBoxAdapter( // child: Container( // margin: EdgeInsets.only(top: 8.w), // child: Text("谈话", // style: TextStyle( // fontSize: 14.w, // color: ColorName.secondaryTextColor)), // )), // SliverAnimatedList( // itemBuilder: _fileItemBuilder, // initialItemCount: 5, // ), // ], // ), // ), // Visibility( // visible: false, // child: Stack( // children: [ // Container( // color: ColorName.black55, // ), // Container( // // color: ColorName.white, // width: double.infinity, // decoration: BoxDecoration( // color: ColorName.white, // borderRadius: BorderRadius.only( // bottomLeft: Radius.circular(16.w), // bottomRight: Radius.circular(16.w))), // child: Padding( // padding: // EdgeInsets.symmetric(horizontal: 12.w, vertical: 12 // .w), // child: IntrinsicHeight( // child: Column( // children: [ // Container( // margin: EdgeInsets.only(bottom: 22.w), // child: Row( // children: [ // const Expanded( // child: Text('更新时间排序', // style: TextStyle( // fontSize: 14, // fontWeight: FontWeight.bold, // color: ColorName // .colorPrimary))), // ImageIcon( // Assets.images.iconFilesOrderSelected // .provider(), // size: 20.w, // color: ColorName.colorPrimary) // ], // ), // ), // Container( // margin: EdgeInsets.only(bottom: 6.w), // child: Row( // children: [ // const Expanded( // child: Text('创建时间排序')), // ImageIcon( // Assets.images.iconFilesOrderSelected // .provider(), // size: 20.w) // ], // ), // ) // ], // ), // ), // ), // ) // ], // ), // ) // ], // )), // ) // ]); } Widget _dirItemBuilder( BuildContext context, int index, Animation animation) { return Padding( padding: EdgeInsets.symmetric(vertical: 12.w), child: Row( crossAxisAlignment: CrossAxisAlignment.center, children: [ Image( image: Assets.images.iconFilesDir.provider(), width: 32.w, height: 32.w, ), Expanded( child: Container( margin: EdgeInsets.only(left: 8.w), child: Column( mainAxisAlignment: MainAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.start, children: [ Text('文件夹 $index', maxLines: 1, style: TextStyle( fontSize: 15.w, color: ColorName.primaryTextColor, fontWeight: FontWeight.bold, overflow: TextOverflow.ellipsis)), Text('日期 $index', maxLines: 1, style: TextStyle( fontSize: 12.w, color: ColorName.secondaryTextColor, overflow: TextOverflow.ellipsis)), ], ), ), ) ], ), ); } Widget _fileItemBuilder( BuildContext context, int index, Animation animation) { return Padding( padding: EdgeInsets.symmetric(vertical: 12.w), child: Row( crossAxisAlignment: CrossAxisAlignment.start, children: [ Image( image: Assets.images.iconFilesFile.provider(), width: 32.w, height: 32.w, ), Expanded( child: Container( margin: EdgeInsets.only(left: 8.w), child: Column( mainAxisAlignment: MainAxisAlignment.center, crossAxisAlignment: CrossAxisAlignment.start, children: [ Text('文件夹 $index', maxLines: 1, style: TextStyle( fontSize: 15.w, color: ColorName.primaryTextColor, fontWeight: FontWeight.bold, overflow: TextOverflow.ellipsis)), Text('缩略 $index', maxLines: 1, style: TextStyle( fontSize: 12.w, color: ColorName.secondaryTextColor, overflow: TextOverflow.ellipsis)), Container( margin: EdgeInsets.only(top: 6.w), child: Row( children: [ Text('1m12s', maxLines: 1, style: TextStyle( fontSize: 12.w, color: ColorName.tertiaryTextColor)), Text(' | ', maxLines: 1, style: TextStyle( fontSize: 12.w, color: ColorName.tertiaryTextColor)), Text('2024-04-15 10:04', maxLines: 1, style: TextStyle( fontSize: 12.w, color: ColorName.tertiaryTextColor)), ], ), ) ], ), ), ) ], ), ); } }