mirror of
https://github.com/haorendashu/nowser.git
synced 2025-12-17 09:54:19 +01:00
add bookmark and bookmark page
This commit is contained in:
@@ -8,4 +8,5 @@ class RouterPath {
|
|||||||
static const String ADD_REMOTE_APP = "/addRemoteApp";
|
static const String ADD_REMOTE_APP = "/addRemoteApp";
|
||||||
static const String APP_DETAIL = "/appDetail";
|
static const String APP_DETAIL = "/appDetail";
|
||||||
static const String HISTORY = "/history";
|
static const String HISTORY = "/history";
|
||||||
|
static const String BOOKMARK = "/bookmark";
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,4 +14,17 @@ class BookmarkDB {
|
|||||||
var sql = "select count(1) from bookmark";
|
var sql = "select count(1) from bookmark";
|
||||||
return Sqflite.firstIntValue(await db.rawQuery(sql));
|
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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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/app_detail/app_detail_router.dart';
|
||||||
import 'package:nowser/router/apps/add_remote_app_router.dart';
|
import 'package:nowser/router/apps/add_remote_app_router.dart';
|
||||||
import 'package:nowser/router/apps/apps_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/history/history_router.dart';
|
||||||
import 'package:nowser/router/index/index_router.dart';
|
import 'package:nowser/router/index/index_router.dart';
|
||||||
import 'package:nowser/router/keys/keys_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.ADD_REMOTE_APP: (context) => AddRemoteAppRouter(),
|
||||||
RouterPath.APP_DETAIL: (context) => AppDetailRouter(),
|
RouterPath.APP_DETAIL: (context) => AppDetailRouter(),
|
||||||
RouterPath.HISTORY: (context) => HistoryRouter(),
|
RouterPath.HISTORY: (context) => HistoryRouter(),
|
||||||
|
RouterPath.BOOKMARK: (context) => BookmarkRouter(),
|
||||||
};
|
};
|
||||||
|
|
||||||
return MultiProvider(
|
return MultiProvider(
|
||||||
|
|||||||
79
lib/router/bookmark/bookmark_router.dart
Normal file
79
lib/router/bookmark/bookmark_router.dart
Normal 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,
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -4,6 +4,7 @@ import 'package:nowser/component/cust_state.dart';
|
|||||||
import 'package:nowser/main.dart';
|
import 'package:nowser/main.dart';
|
||||||
import 'package:nowser/provider/web_provider.dart';
|
import 'package:nowser/provider/web_provider.dart';
|
||||||
import 'package:nowser/router/index/index_web_component.dart';
|
import 'package:nowser/router/index/index_web_component.dart';
|
||||||
|
import 'package:nowser/util/router_util.dart';
|
||||||
import 'package:provider/provider.dart';
|
import 'package:provider/provider.dart';
|
||||||
|
|
||||||
import '../../component/webview/webview_component.dart';
|
import '../../component/webview/webview_component.dart';
|
||||||
@@ -84,16 +85,22 @@ class _IndexRouter extends CustState<IndexRouter>
|
|||||||
enableDrag: true,
|
enableDrag: true,
|
||||||
showDragHandle: true,
|
showDragHandle: true,
|
||||||
);
|
);
|
||||||
|
bottomSheetController!.closed.then((v) {
|
||||||
|
bottomSheetController = null;
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
bool closeControl() {
|
bool closeControl() {
|
||||||
bool closeAble = false;
|
bool closeAble = false;
|
||||||
try {
|
try {
|
||||||
if (bottomSheetController != null) {
|
if (bottomSheetController != null) {
|
||||||
bottomSheetController!.close();
|
// bottomSheetController!.close();
|
||||||
closeAble = true;
|
closeAble = true;
|
||||||
|
RouterUtil.back(context);
|
||||||
}
|
}
|
||||||
} catch (e) {}
|
} catch (e) {
|
||||||
|
print(e);
|
||||||
|
}
|
||||||
bottomSheetController = null;
|
bottomSheetController = null;
|
||||||
return closeAble;
|
return closeAble;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +1,9 @@
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:nowser/const/base.dart';
|
import 'package:nowser/const/base.dart';
|
||||||
|
import 'package:nowser/const/router_path.dart';
|
||||||
import 'package:nowser/provider/web_provider.dart';
|
import 'package:nowser/provider/web_provider.dart';
|
||||||
import 'package:nowser/router/index/web_control_btn_component.dart';
|
import 'package:nowser/router/index/web_control_btn_component.dart';
|
||||||
|
import 'package:nowser/util/router_util.dart';
|
||||||
import 'package:provider/provider.dart';
|
import 'package:provider/provider.dart';
|
||||||
|
|
||||||
class WebControlComponent extends StatefulWidget {
|
class WebControlComponent extends StatefulWidget {
|
||||||
@@ -87,6 +89,13 @@ class _WebControlComponent extends State<WebControlComponent> {
|
|||||||
Icons.bookmark_border,
|
Icons.bookmark_border,
|
||||||
size: 30,
|
size: 30,
|
||||||
),
|
),
|
||||||
|
onTap: () async {
|
||||||
|
var url =
|
||||||
|
await RouterUtil.router(context, RouterPath.BOOKMARK);
|
||||||
|
if (webProvider.currentGoTo(url)) {
|
||||||
|
RouterUtil.back(context);
|
||||||
|
}
|
||||||
|
},
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
Expanded(
|
Expanded(
|
||||||
@@ -96,6 +105,13 @@ class _WebControlComponent extends State<WebControlComponent> {
|
|||||||
Icons.bookmark_add_outlined,
|
Icons.bookmark_add_outlined,
|
||||||
size: 30,
|
size: 30,
|
||||||
),
|
),
|
||||||
|
onTap: () {
|
||||||
|
var webInfo = webProvider.currentWebInfo();
|
||||||
|
if (webInfo != null) {
|
||||||
|
webProvider.addBookmark(webInfo);
|
||||||
|
RouterUtil.back(context);
|
||||||
|
}
|
||||||
|
},
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
Expanded(
|
Expanded(
|
||||||
@@ -105,6 +121,13 @@ class _WebControlComponent extends State<WebControlComponent> {
|
|||||||
Icons.history,
|
Icons.history,
|
||||||
size: 30,
|
size: 30,
|
||||||
),
|
),
|
||||||
|
onTap: () async {
|
||||||
|
var url =
|
||||||
|
await RouterUtil.router(context, RouterPath.HISTORY);
|
||||||
|
if (webProvider.currentGoTo(url)) {
|
||||||
|
RouterUtil.back(context);
|
||||||
|
}
|
||||||
|
},
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
Expanded(
|
Expanded(
|
||||||
|
|||||||
@@ -153,6 +153,12 @@ class _MeRouter extends CustState<MeRouter> {
|
|||||||
num: bookmarkNum,
|
num: bookmarkNum,
|
||||||
name: "Bookmark",
|
name: "Bookmark",
|
||||||
iconData: Icons.bookmark,
|
iconData: Icons.bookmark,
|
||||||
|
onTap: () async {
|
||||||
|
var url = await RouterUtil.router(context, RouterPath.BOOKMARK);
|
||||||
|
if (webProvider.currentGoTo(url)) {
|
||||||
|
RouterUtil.back(context);
|
||||||
|
}
|
||||||
|
},
|
||||||
));
|
));
|
||||||
webItemList.add(MeRouterWebItemComponent(
|
webItemList.add(MeRouterWebItemComponent(
|
||||||
num: historyNum,
|
num: historyNum,
|
||||||
@@ -160,7 +166,6 @@ class _MeRouter extends CustState<MeRouter> {
|
|||||||
iconData: Icons.history,
|
iconData: Icons.history,
|
||||||
onTap: () async {
|
onTap: () async {
|
||||||
var url = await RouterUtil.router(context, RouterPath.HISTORY);
|
var url = await RouterUtil.router(context, RouterPath.HISTORY);
|
||||||
print("url $url");
|
|
||||||
if (webProvider.currentGoTo(url)) {
|
if (webProvider.currentGoTo(url)) {
|
||||||
RouterUtil.back(context);
|
RouterUtil.back(context);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user