add bookmark and bookmark page

This commit is contained in:
DASHU
2024-09-18 10:18:28 +08:00
parent 75016492c1
commit c1866a1a8b
7 changed files with 133 additions and 3 deletions

View File

@@ -8,4 +8,5 @@ class RouterPath {
static const String ADD_REMOTE_APP = "/addRemoteApp";
static const String APP_DETAIL = "/appDetail";
static const String HISTORY = "/history";
static const String BOOKMARK = "/bookmark";
}

View File

@@ -14,4 +14,17 @@ class BookmarkDB {
var sql = "select count(1) from bookmark";
return Sqflite.firstIntValue(await db.rawQuery(sql));
}
static Future<List<Bookmark>> all({DatabaseExecutor? db}) async {
List<Bookmark> objs = [];
List<Object?>? arguments = [];
db = await DB.getDB(db);
var sql = "select * from bookmark order by created_at desc";
List<Map<String, dynamic>> list = await db.rawQuery(sql, arguments);
for (var i = 0; i < list.length; i++) {
var json = list[i];
objs.add(Bookmark.fromJson(json));
}
return objs;
}
}

View File

@@ -16,6 +16,7 @@ import 'package:nowser/provider/web_provider.dart';
import 'package:nowser/router/app_detail/app_detail_router.dart';
import 'package:nowser/router/apps/add_remote_app_router.dart';
import 'package:nowser/router/apps/apps_router.dart';
import 'package:nowser/router/bookmark/bookmark_router.dart';
import 'package:nowser/router/history/history_router.dart';
import 'package:nowser/router/index/index_router.dart';
import 'package:nowser/router/keys/keys_router.dart';
@@ -104,6 +105,7 @@ class _MyApp extends State<MyApp> {
RouterPath.ADD_REMOTE_APP: (context) => AddRemoteAppRouter(),
RouterPath.APP_DETAIL: (context) => AppDetailRouter(),
RouterPath.HISTORY: (context) => HistoryRouter(),
RouterPath.BOOKMARK: (context) => BookmarkRouter(),
};
return MultiProvider(

View File

@@ -0,0 +1,79 @@
import 'package:flutter/material.dart';
import 'package:nowser/component/cust_state.dart';
import 'package:nowser/component/url_list_item_componnet.dart';
import 'package:nowser/data/browser_history_db.dart';
import 'package:nowser/util/router_util.dart';
import '../../component/appbar_back_btn_component.dart';
import '../../const/base.dart';
import '../../data/bookmark.dart';
import '../../data/bookmark_db.dart';
class BookmarkRouter extends StatefulWidget {
@override
State<StatefulWidget> createState() {
return _BookmarkRouter();
}
}
class _BookmarkRouter extends CustState<BookmarkRouter> {
List<Bookmark> bookmarks = [];
@override
Future<void> onReady(BuildContext context) async {
bookmarks = await BookmarkDB.all();
setState(() {});
}
@override
Widget doBuild(BuildContext context) {
var themeData = Theme.of(context);
return Scaffold(
appBar: AppBar(
leading: AppbarBackBtnComponent(),
title: Text(
"Bookmarks",
style: TextStyle(
fontWeight: FontWeight.bold,
fontSize: themeData.textTheme.bodyLarge!.fontSize,
),
),
actions: [
// GestureDetector(
// onTap: () {},
// child: Container(
// padding: const EdgeInsets.all(Base.BASE_PADDING),
// child: Icon(Icons.delete_sweep_outlined),
// ),
// ),
],
),
body: ListView.builder(
itemBuilder: (context, index) {
if (index >= bookmarks.length) {
return null;
}
var bookmark = bookmarks[index];
var main = Container(
child: GestureDetector(
onTap: () {
RouterUtil.back(context, bookmark.url);
},
child: UrlListItemComponnet(
image: bookmark.favicon,
title: bookmark.title ?? "",
url: bookmark.url ?? "",
),
),
);
return main;
},
itemCount: bookmarks.length,
),
);
}
}

View File

@@ -4,6 +4,7 @@ import 'package:nowser/component/cust_state.dart';
import 'package:nowser/main.dart';
import 'package:nowser/provider/web_provider.dart';
import 'package:nowser/router/index/index_web_component.dart';
import 'package:nowser/util/router_util.dart';
import 'package:provider/provider.dart';
import '../../component/webview/webview_component.dart';
@@ -84,16 +85,22 @@ class _IndexRouter extends CustState<IndexRouter>
enableDrag: true,
showDragHandle: true,
);
bottomSheetController!.closed.then((v) {
bottomSheetController = null;
});
}
bool closeControl() {
bool closeAble = false;
try {
if (bottomSheetController != null) {
bottomSheetController!.close();
// bottomSheetController!.close();
closeAble = true;
RouterUtil.back(context);
}
} catch (e) {
print(e);
}
} catch (e) {}
bottomSheetController = null;
return closeAble;
}

View File

@@ -1,7 +1,9 @@
import 'package:flutter/material.dart';
import 'package:nowser/const/base.dart';
import 'package:nowser/const/router_path.dart';
import 'package:nowser/provider/web_provider.dart';
import 'package:nowser/router/index/web_control_btn_component.dart';
import 'package:nowser/util/router_util.dart';
import 'package:provider/provider.dart';
class WebControlComponent extends StatefulWidget {
@@ -87,6 +89,13 @@ class _WebControlComponent extends State<WebControlComponent> {
Icons.bookmark_border,
size: 30,
),
onTap: () async {
var url =
await RouterUtil.router(context, RouterPath.BOOKMARK);
if (webProvider.currentGoTo(url)) {
RouterUtil.back(context);
}
},
),
),
Expanded(
@@ -96,6 +105,13 @@ class _WebControlComponent extends State<WebControlComponent> {
Icons.bookmark_add_outlined,
size: 30,
),
onTap: () {
var webInfo = webProvider.currentWebInfo();
if (webInfo != null) {
webProvider.addBookmark(webInfo);
RouterUtil.back(context);
}
},
),
),
Expanded(
@@ -105,6 +121,13 @@ class _WebControlComponent extends State<WebControlComponent> {
Icons.history,
size: 30,
),
onTap: () async {
var url =
await RouterUtil.router(context, RouterPath.HISTORY);
if (webProvider.currentGoTo(url)) {
RouterUtil.back(context);
}
},
),
),
Expanded(

View File

@@ -153,6 +153,12 @@ class _MeRouter extends CustState<MeRouter> {
num: bookmarkNum,
name: "Bookmark",
iconData: Icons.bookmark,
onTap: () async {
var url = await RouterUtil.router(context, RouterPath.BOOKMARK);
if (webProvider.currentGoTo(url)) {
RouterUtil.back(context);
}
},
));
webItemList.add(MeRouterWebItemComponent(
num: historyNum,
@@ -160,7 +166,6 @@ class _MeRouter extends CustState<MeRouter> {
iconData: Icons.history,
onTap: () async {
var url = await RouterUtil.router(context, RouterPath.HISTORY);
print("url $url");
if (webProvider.currentGoTo(url)) {
RouterUtil.back(context);
}