| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289 |
- import 'package:electronic_assistant/base/base_page.dart';
- import 'package:electronic_assistant/data/bean/talks.dart';
- import 'package:electronic_assistant/data/consts/constants.dart';
- import 'package:electronic_assistant/module/files/controller.dart';
- import 'package:electronic_assistant/module/talk/view.dart';
- import 'package:electronic_assistant/resource/colors.gen.dart';
- import 'package:electronic_assistant/resource/string.gen.dart';
- import 'package:electronic_assistant/utils/expand.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/repositories/account_repository.dart';
- import '../../dialog/rename_dialog.dart';
- import '../../dialog/talk_delete_dialog.dart';
- import '../../popup/talk_popup.dart';
- import '../../resource/assets.gen.dart';
- class FilesPage extends BasePage<FilesController> {
- const FilesPage({super.key});
- @override
- bool immersive() {
- return true;
- }
- @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,
- // actions: [
- // IconButton(
- // onPressed: () {},
- // icon: ImageIcon(Assets.images.iconFilesNewDir.provider()),
- // ),
- // IconButton(
- // onPressed: () {},
- // icon: ImageIcon(Assets.images.iconMore.provider()),
- // ),
- // ],
- ),
- body: Column(
- children: [
- // Column(
- // children: [
- // GestureDetector(
- // onTap: () {
- // Get.toNamed(RoutePath.fileSearch);
- // },
- // child: Container(
- // margin: EdgeInsets.symmetric(horizontal: 12.w),
- // padding:
- // EdgeInsets.symmetric(horizontal: 10.w, vertical: 8.w),
- // height: 36.w,
- // decoration: BoxDecoration(
- // color: Colors.white,
- // borderRadius: BorderRadius.circular(8.w),
- // ),
- // child: TextField(
- // maxLines: 1,
- // textAlignVertical: TextAlignVertical.center,
- // textInputAction: TextInputAction.search,
- // decoration: InputDecoration(
- // hintText: '搜索所有文件标题 / 内容',
- // border: InputBorder.none,
- // icon: ImageIcon(Assets.images.iconSearch.provider()),
- // iconColor: const Color.fromRGBO(95, 95, 97, 1),
- // enabled: false),
- // style: TextStyle(fontSize: 14.sp),
- // ),
- // ),
- // ),
- // ],
- // ),
- Expanded(
- child: Padding(
- // padding: EdgeInsets.only(top: 16.w, left: 12.w, right: 12.w),
- padding: EdgeInsets.only(left: 12.w, right: 12.w),
- child: SmartRefresher(
- enablePullUp: true,
- enablePullDown: true,
- controller: controller.refreshController,
- onRefresh: controller.onRefreshData,
- onLoading: controller.onLoadMoreTalkData,
- footer: ClassicFooter(
- height: Constants.bottomBarHeight + 80,
- outerBuilder: (child) {
- return Padding(
- padding: EdgeInsets.only(bottom: Constants.bottomBarHeight),
- child: child,
- );
- },
- canLoadingText: StringName.loadingMore.tr,
- idleText: StringName.loadPullUp.tr,
- loadingText: StringName.loadingTxt.tr,
- noDataText: StringName.loadNoData.tr,
- failedText: StringName.loadFailed.tr,
- ),
- child: CustomScrollView(
- slivers: [
- // SliverAnimatedGrid(
- // itemBuilder: _buildDirItem,
- // gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
- // crossAxisCount: 2,
- // crossAxisSpacing: 8.w,
- // mainAxisSpacing: 8.w,
- // childAspectRatio: 164 / 65,
- // ),
- // initialItemCount: 10,
- // ),
- // SliverToBoxAdapter(
- // child: Padding(
- // padding: EdgeInsets.only(top: 20.w, bottom: 12.w),
- // child: Text(StringName.talkAll.tr,
- // style: TextStyle(
- // fontSize: 14.sp,
- // color: ColorName.secondaryTextColor,
- // fontWeight: FontWeight.bold))),
- // ),
- Obx(() {
- return SliverList.builder(
- itemBuilder: _buildFileItem,
- itemCount: controller.talkList.length);
- }),
- ],
- ),
- ),
- ))
- ],
- ),
- );
- }
- Widget _buildDirItem(
- BuildContext context, int index, Animation<double> animation) {
- return Container(
- decoration: BoxDecoration(
- color: Colors.white,
- borderRadius: BorderRadius.circular(8.w),
- ),
- padding: EdgeInsets.only(left: 8.w),
- child: Row(
- crossAxisAlignment: CrossAxisAlignment.center,
- children: [
- Image(
- image: Assets.images.iconFilesDir.provider(),
- width: 32.w,
- height: 32.w),
- Expanded(
- child: Padding(
- padding: EdgeInsets.symmetric(horizontal: 8.w),
- child: Column(
- mainAxisAlignment: MainAxisAlignment.center,
- crossAxisAlignment: CrossAxisAlignment.start,
- children: [
- Text('文件夹',
- maxLines: 1,
- overflow: TextOverflow.ellipsis,
- style: TextStyle(
- fontSize: 14.sp,
- color: ColorName.primaryTextColor,
- fontWeight: FontWeight.bold)),
- Text('2021-09-09 12:00:00',
- maxLines: 1,
- overflow: TextOverflow.ellipsis,
- style: TextStyle(
- fontSize: 12.sp, color: ColorName.secondaryTextColor)),
- ],
- ),
- ))
- ],
- ),
- );
- }
- Widget _buildFileItem(BuildContext context, int index) {
- TalkBean talkBean = controller.talkList[index];
- return Obx(() {
- return buildFileTalkItem(talkBean, onTap: () {
- TalkPage.start(talkBean);
- }, onLongPressStart: (details) {
- if (!accountRepository.isLogin.value) {
- return;
- }
- showTalkPopup(details.globalPosition, Alignment.bottomRight,
- onRename: () {
- showRenameTalkDialog(talkBean);
- }, onDelete: () {
- showDeleteTalkDialog(talkBean);
- });
- });
- });
- }
- void showRenameTalkDialog(TalkBean item) {
- reNameDialog(StringName.talkRenameTitle.tr, item.title.value,
- hintTxt: StringName.talkRenameTitleHint.tr,
- maxLength: 15, returnBuilder: (newName) {
- controller.requestName(newName, item);
- });
- }
- void showDeleteTalkDialog(TalkBean item) {
- talkDeleteDialog(item.id, item.title.value, returnBuilder: () {
- controller.requestDelete(item);
- });
- }
- }
- Widget buildFileTalkItem(TalkBean talkBean,
- {GestureTapCallback? onTap,
- GestureLongPressStartCallback? onLongPressStart}) {
- return Padding(
- padding: EdgeInsets.only(bottom: 8.w),
- child: GestureDetector(
- onLongPressStart: onLongPressStart,
- onTap: onTap,
- 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.value == TalkStatus.analysing ||
- talkBean.status.value == 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.value == 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)),
- ],
- ),
- )
- ],
- ),
- )),
- ],
- ),
- ),
- ));
- }
|