@@ -101,7 +101,6 @@ class _FileListScreenState extends State<FileListScreen>
101101 bool _hasWritePermission = false ;
102102 User ? _currentUser;
103103 StreamSubscription ? _userStreamSubscription;
104- StreamSubscription ? _favoriteSubscription;
105104
106105 @override
107106 void initState () {
@@ -137,12 +136,6 @@ class _FileListScreenState extends State<FileListScreen>
137136 }
138137 });
139138 }
140- _favoriteSubscription =
141- _databaseController.favoriteDao.countStream ().listen ((event) {
142- if (_files.isNotEmpty) {
143- _refreshFavoriteState ();
144- }
145- });
146139 Log .d ("initState" , tag: tag);
147140 }
148141
@@ -196,7 +189,7 @@ class _FileListScreenState extends State<FileListScreen>
196189 var fileItemVOs = < FileItemVO > [];
197190 var files = data? .content ?? [];
198191 for (var file in files) {
199- var fileItemVO = await _fileResp2VO (data? .provider ?? "" , file);
192+ var fileItemVO = _fileResp2VO (data? .provider ?? "" , file);
200193 fileItemVOs.add (fileItemVO);
201194 }
202195 _sort (fileItemVOs);
@@ -243,7 +236,6 @@ class _FileListScreenState extends State<FileListScreen>
243236 void dispose () {
244237 super .dispose ();
245238 _userStreamSubscription? .cancel ();
246- _favoriteSubscription? .cancel ();
247239 _cancelToken.cancel ();
248240 Log .d ("dispose" , tag: tag);
249241 }
@@ -379,7 +371,9 @@ class _FileListScreenState extends State<FileListScreen>
379371
380372 AlistScaffold _buildScaffold (BuildContext context) {
381373 return AlistScaffold (
382- appbarTitle: OverflowText (text: _pageName ?? Intl .screenName_fileListRoot.tr,),
374+ appbarTitle: OverflowText (
375+ text: _pageName ?? Intl .screenName_fileListRoot.tr,
376+ ),
383377 appbarActions: [_menuMoreIcon ()],
384378 onLeadingDoubleTap: () =>
385379 Get .until ((route) => route.isFirst, id: stackId),
@@ -610,23 +604,13 @@ class _FileListScreenState extends State<FileListScreen>
610604 });
611605 }
612606
613- Future <FileItemVO > _fileResp2VO (
614- String provider, FileListRespContent resp) async {
607+ FileItemVO _fileResp2VO (String provider, FileListRespContent resp) {
615608 DateTime ? modifyTime = resp.parseModifiedTime ();
616609 String ? modifyTimeStr = resp.getReformatModified (modifyTime);
617610
618- AlistDatabaseController databaseController = Get .find ();
619- FavoriteDao favoriteDao = databaseController.favoriteDao;
620- UserController userController = Get .find ();
621- var user = userController.user.value;
622-
623- String fileRemotePath = resp.getCompletePath (path);
624- Favorite ? favorite = await favoriteDao.findByPath (
625- user.serverUrl, user.username, fileRemotePath);
626-
627611 return FileItemVO (
628612 name: resp.name,
629- path: fileRemotePath ,
613+ path: resp. getCompletePath (path) ,
630614 size: resp.isDir ? null : resp.size,
631615 sizeDesc: resp.formatBytes (),
632616 isDir: resp.isDir,
@@ -637,13 +621,18 @@ class _FileListScreenState extends State<FileListScreen>
637621 sign: resp.sign,
638622 icon: resp.getFileIcon (),
639623 modifiedMilliseconds: modifyTime? .millisecondsSinceEpoch ?? - 1 ,
640- favorite: favorite != null ,
641624 provider: provider,
642625 );
643626 }
644627
645628 _showBottomMenuDialog (
646- BuildContext widgetContext, FileItemVO file, int index) {
629+ BuildContext widgetContext, FileItemVO file, int index) async {
630+ var user = _userController.user.value;
631+ Favorite ? favorite = await _databaseController.favoriteDao
632+ .findByPath (user.serverUrl, user.username, file.path);
633+ if (! mounted) {
634+ return ;
635+ }
647636 showModalBottomSheet (
648637 context: Get .context! ,
649638 isScrollControlled: true ,
@@ -734,24 +723,24 @@ class _FileListScreenState extends State<FileListScreen>
734723 _showRenameDialog (file);
735724 },
736725 ),
737- if (! file. favorite)
726+ if (favorite == null )
738727 ListTile (
739728 leading: const Icon (Icons .favorite_border_rounded),
740729 title: Text (Intl .fileList_menu_favorite.tr),
741730 onTap: () {
742731 Navigator .pop (context);
743- _favorite (file);
732+ _favorite (file, true );
744733 },
745734 ),
746- if (file. favorite)
735+ if (favorite != null )
747736 ListTile (
748737 leading: const Icon (
749738 Icons .favorite_rounded,
750739 ),
751740 title: Text (Intl .fileList_menu_cancel_favorite.tr),
752741 onTap: () {
753742 Navigator .pop (context);
754- _favorite (file);
743+ _favorite (file, false );
755744 },
756745 ),
757746 if (_hasWritePermission)
@@ -861,13 +850,13 @@ class _FileListScreenState extends State<FileListScreen>
861850 _showBottomMenuDialog (context, _files[index], index);
862851 }
863852
864- void _favorite (FileItemVO file) async {
853+ void _favorite (FileItemVO file, bool favorite ) async {
865854 AlistDatabaseController databaseController = Get .find ();
866855 FavoriteDao favoriteDao = databaseController.favoriteDao;
867856 UserController userController = Get .find ();
868857 var user = userController.user.value;
869858
870- if (! file. favorite) {
859+ if (favorite) {
871860 var favoriteId = await favoriteDao.insertRecord (
872861 Favorite (
873862 isDir: file.isDir,
@@ -891,8 +880,6 @@ class _FileListScreenState extends State<FileListScreen>
891880 } else {
892881 favoriteDao.deleteByPath (user.serverUrl, user.username, file.path);
893882 }
894- file.favorite = ! file.favorite;
895- _files.refresh ();
896883 }
897884
898885 void _showRenameDialog (FileItemVO file) {
@@ -1028,28 +1015,6 @@ class _FileListScreenState extends State<FileListScreen>
10281015 );
10291016 });
10301017 }
1031-
1032- void _refreshFavoriteState () async {
1033- AlistDatabaseController databaseController = Get .find ();
1034- FavoriteDao favoriteDao = databaseController.favoriteDao;
1035- UserController userController = Get .find ();
1036- var user = userController.user.value;
1037-
1038- bool refresh = false ;
1039- for (var element in _files) {
1040- Favorite ? favorite = await favoriteDao.findByPath (
1041- user.serverUrl, user.username, element.path);
1042- bool isFavorite = favorite != null ;
1043- if (element.favorite != isFavorite) {
1044- element.favorite = isFavorite;
1045- refresh = true ;
1046- }
1047- }
1048-
1049- if (refresh) {
1050- _files.refresh ();
1051- }
1052- }
10531018}
10541019
10551020class _FileListView extends StatelessWidget {
0 commit comments