Added auto close slidable
This commit is contained in:
@@ -1,3 +1,4 @@
|
|||||||
class ConfigOptions {
|
class ConfigOptions {
|
||||||
static const int listLimit = 20;
|
static const int listLimit = 20;
|
||||||
|
static const String slidableGroupTag = "bookmarksSlidable";
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ import 'package:flutter_svg/flutter_svg.dart';
|
|||||||
|
|
||||||
import 'package:linkdy/screens/bookmarks/provider/favicon_loader.provider.dart';
|
import 'package:linkdy/screens/bookmarks/provider/favicon_loader.provider.dart';
|
||||||
|
|
||||||
|
import 'package:linkdy/config/options.dart';
|
||||||
import 'package:linkdy/i18n/strings.g.dart';
|
import 'package:linkdy/i18n/strings.g.dart';
|
||||||
import 'package:linkdy/models/data/bookmarks.dart';
|
import 'package:linkdy/models/data/bookmarks.dart';
|
||||||
import 'package:linkdy/providers/app_status.provider.dart';
|
import 'package:linkdy/providers/app_status.provider.dart';
|
||||||
@@ -40,6 +41,8 @@ class BookmarkItem extends ConsumerWidget {
|
|||||||
}
|
}
|
||||||
|
|
||||||
return Slidable(
|
return Slidable(
|
||||||
|
key: ValueKey(bookmark.id!),
|
||||||
|
groupTag: ConfigOptions.slidableGroupTag,
|
||||||
startActionPane: ActionPane(
|
startActionPane: ActionPane(
|
||||||
motion: const DrawerMotion(),
|
motion: const DrawerMotion(),
|
||||||
extentRatio: 0.5,
|
extentRatio: 0.5,
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ import 'dart:io';
|
|||||||
|
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||||
|
import 'package:flutter_slidable/flutter_slidable.dart';
|
||||||
import 'package:linkdy/constants/enums.dart';
|
import 'package:linkdy/constants/enums.dart';
|
||||||
|
|
||||||
import 'package:linkdy/screens/bookmarks/provider/bookmarks.provider.dart';
|
import 'package:linkdy/screens/bookmarks/provider/bookmarks.provider.dart';
|
||||||
@@ -106,34 +107,36 @@ class BookmarksScreen extends ConsumerWidget {
|
|||||||
),
|
),
|
||||||
),
|
),
|
||||||
if (bookmarks.bookmarks.isNotEmpty)
|
if (bookmarks.bookmarks.isNotEmpty)
|
||||||
SliverList.builder(
|
SlidableAutoCloseBehavior(
|
||||||
itemCount: bookmarks.bookmarks.length + 1,
|
child: SliverList.builder(
|
||||||
itemBuilder: (context, index) {
|
itemCount: bookmarks.bookmarks.length + 1,
|
||||||
// index == bookmarks.value!.content!.results!.length -> itemCount + 1
|
itemBuilder: (context, index) {
|
||||||
if (index == bookmarks.bookmarks.length) {
|
// index == bookmarks.value!.content!.results!.length -> itemCount + 1
|
||||||
if (bookmarks.loadingMore) {
|
if (index == bookmarks.bookmarks.length) {
|
||||||
return const SizedBox(
|
if (bookmarks.loadingMore) {
|
||||||
height: 80,
|
return const SizedBox(
|
||||||
child: Center(
|
height: 80,
|
||||||
child: CircularProgressIndicator(),
|
child: Center(
|
||||||
),
|
child: CircularProgressIndicator(),
|
||||||
);
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
// Bottom gap for FAB
|
||||||
|
return const SizedBox(height: 80);
|
||||||
}
|
}
|
||||||
// Bottom gap for FAB
|
return BookmarkItem(
|
||||||
return const SizedBox(height: 80);
|
bookmark: bookmarks.bookmarks[index],
|
||||||
}
|
onReadUnread: ref.read(bookmarksProvider.notifier).markAsReadUnread,
|
||||||
return BookmarkItem(
|
onDelete: (bookmark) => showDialog(
|
||||||
bookmark: bookmarks.bookmarks[index],
|
context: context,
|
||||||
onReadUnread: ref.read(bookmarksProvider.notifier).markAsReadUnread,
|
builder: (context) => DeleteBookmarkModal(
|
||||||
onDelete: (bookmark) => showDialog(
|
bookmark: bookmark,
|
||||||
context: context,
|
onDelete: ref.read(bookmarksProvider.notifier).deleteBookmark,
|
||||||
builder: (context) => DeleteBookmarkModal(
|
),
|
||||||
bookmark: bookmark,
|
|
||||||
onDelete: ref.read(bookmarksProvider.notifier).deleteBookmark,
|
|
||||||
),
|
),
|
||||||
),
|
);
|
||||||
);
|
},
|
||||||
},
|
),
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||||
|
import 'package:flutter_slidable/flutter_slidable.dart';
|
||||||
|
|
||||||
import 'package:linkdy/screens/bookmarks/provider/search_bookmarks.provider.dart';
|
import 'package:linkdy/screens/bookmarks/provider/search_bookmarks.provider.dart';
|
||||||
import 'package:linkdy/screens/bookmarks/ui/bookmark_item.dart';
|
import 'package:linkdy/screens/bookmarks/ui/bookmark_item.dart';
|
||||||
@@ -101,29 +102,31 @@ class SearchBookmarksScreen extends ConsumerWidget {
|
|||||||
|
|
||||||
return NotificationListener(
|
return NotificationListener(
|
||||||
onNotification: scrollListener,
|
onNotification: scrollListener,
|
||||||
child: ListView.builder(
|
child: SlidableAutoCloseBehavior(
|
||||||
itemCount: provider.loadingMore ? provider.bookmarks.length + 1 : provider.bookmarks.length,
|
child: ListView.builder(
|
||||||
itemBuilder: (context, index) {
|
itemCount: provider.loadingMore ? provider.bookmarks.length + 1 : provider.bookmarks.length,
|
||||||
if (provider.loadingMore == true && index == provider.bookmarks.length) {
|
itemBuilder: (context, index) {
|
||||||
return const Padding(
|
if (provider.loadingMore == true && index == provider.bookmarks.length) {
|
||||||
padding: EdgeInsets.all(16),
|
return const Padding(
|
||||||
child: Center(
|
padding: EdgeInsets.all(16),
|
||||||
child: CircularProgressIndicator(),
|
child: Center(
|
||||||
|
child: CircularProgressIndicator(),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
return BookmarkItem(
|
||||||
|
bookmark: provider.bookmarks[index],
|
||||||
|
onReadUnread: ref.read(searchBookmarksProvider.notifier).markAsReadUnread,
|
||||||
|
onDelete: (bookmark) => showDialog(
|
||||||
|
context: context,
|
||||||
|
builder: (context) => DeleteBookmarkModal(
|
||||||
|
bookmark: bookmark,
|
||||||
|
onDelete: ref.read(searchBookmarksProvider.notifier).deleteBookmark,
|
||||||
|
),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
}
|
},
|
||||||
return BookmarkItem(
|
),
|
||||||
bookmark: provider.bookmarks[index],
|
|
||||||
onReadUnread: ref.read(searchBookmarksProvider.notifier).markAsReadUnread,
|
|
||||||
onDelete: (bookmark) => showDialog(
|
|
||||||
context: context,
|
|
||||||
builder: (context) => DeleteBookmarkModal(
|
|
||||||
bookmark: bookmark,
|
|
||||||
onDelete: ref.read(searchBookmarksProvider.notifier).deleteBookmark,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
);
|
|
||||||
},
|
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||||
|
import 'package:flutter_slidable/flutter_slidable.dart';
|
||||||
|
|
||||||
import 'package:linkdy/screens/bookmarks/ui/bookmark_item.dart';
|
import 'package:linkdy/screens/bookmarks/ui/bookmark_item.dart';
|
||||||
import 'package:linkdy/screens/bookmarks/ui/delete_bookmark_modal.dart';
|
import 'package:linkdy/screens/bookmarks/ui/delete_bookmark_modal.dart';
|
||||||
@@ -115,30 +116,32 @@ class TagBookmarksScreenState extends ConsumerState<TagBookmarksScreen> {
|
|||||||
),
|
),
|
||||||
),
|
),
|
||||||
if (provider.bookmarks.isNotEmpty)
|
if (provider.bookmarks.isNotEmpty)
|
||||||
SliverList.builder(
|
SlidableAutoCloseBehavior(
|
||||||
itemCount:
|
child: SliverList.builder(
|
||||||
provider.loadingMore == true ? provider.bookmarks.length + 1 : provider.bookmarks.length,
|
itemCount:
|
||||||
itemBuilder: (context, index) {
|
provider.loadingMore == true ? provider.bookmarks.length + 1 : provider.bookmarks.length,
|
||||||
if (provider.loadingMore == true && index == provider.bookmarks.length) {
|
itemBuilder: (context, index) {
|
||||||
return const Padding(
|
if (provider.loadingMore == true && index == provider.bookmarks.length) {
|
||||||
padding: EdgeInsets.all(16),
|
return const Padding(
|
||||||
child: Center(
|
padding: EdgeInsets.all(16),
|
||||||
child: CircularProgressIndicator(),
|
child: Center(
|
||||||
|
child: CircularProgressIndicator(),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
return BookmarkItem(
|
||||||
|
bookmark: provider.bookmarks[index],
|
||||||
|
onReadUnread: ref.read(tagBookmarksProvider.notifier).markAsReadUnread,
|
||||||
|
onDelete: (bookmark) => showDialog(
|
||||||
|
context: context,
|
||||||
|
builder: (context) => DeleteBookmarkModal(
|
||||||
|
bookmark: bookmark,
|
||||||
|
onDelete: ref.read(tagBookmarksProvider.notifier).deleteBookmark,
|
||||||
|
),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
}
|
},
|
||||||
return BookmarkItem(
|
),
|
||||||
bookmark: provider.bookmarks[index],
|
|
||||||
onReadUnread: ref.read(tagBookmarksProvider.notifier).markAsReadUnread,
|
|
||||||
onDelete: (bookmark) => showDialog(
|
|
||||||
context: context,
|
|
||||||
builder: (context) => DeleteBookmarkModal(
|
|
||||||
bookmark: bookmark,
|
|
||||||
onDelete: ref.read(tagBookmarksProvider.notifier).deleteBookmark,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
);
|
|
||||||
},
|
|
||||||
),
|
),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
|
|||||||
Reference in New Issue
Block a user