add saving system with sqlite
This commit is contained in:
parent
4c54265f89
commit
8ea4dc281e
@ -8,6 +8,8 @@ class Stroke {
|
|||||||
double _miny = double.infinity;
|
double _miny = double.infinity;
|
||||||
double _maxy = double.negativeInfinity;
|
double _maxy = double.negativeInfinity;
|
||||||
|
|
||||||
|
final int id;
|
||||||
|
|
||||||
@override
|
@override
|
||||||
String toString() {
|
String toString() {
|
||||||
return 'Stroke{points: $points}';
|
return 'Stroke{points: $points}';
|
||||||
@ -17,18 +19,22 @@ class Stroke {
|
|||||||
points.add(point);
|
points.add(point);
|
||||||
|
|
||||||
// update bounding rect
|
// update bounding rect
|
||||||
if (point.point.dx < _minx) _minx = point.point.dx;
|
_updateBoundingRect(point);
|
||||||
if (point.point.dx > _maxx) _maxx = point.point.dx;
|
}
|
||||||
if (point.point.dy < _miny) _miny = point.point.dy;
|
|
||||||
if (point.point.dy > _maxy) _maxy = point.point.dy;
|
void _updateBoundingRect(Point p) {
|
||||||
|
if (p.point.dx < _minx) _minx = p.point.dx;
|
||||||
|
if (p.point.dx > _maxx) _maxx = p.point.dx;
|
||||||
|
if (p.point.dy < _miny) _miny = p.point.dy;
|
||||||
|
if (p.point.dy > _maxy) _maxy = p.point.dy;
|
||||||
}
|
}
|
||||||
|
|
||||||
Rect getBoundingRect() {
|
Rect getBoundingRect() {
|
||||||
return Rect.fromPoints(Offset(_minx, _miny), Offset(_maxx, _maxy));
|
return Rect.fromPoints(Offset(_minx, _miny), Offset(_maxx, _maxy));
|
||||||
}
|
}
|
||||||
|
|
||||||
Stroke.fromPoints(this.points);
|
Stroke.fromPoints(this.points, this.id);
|
||||||
Stroke();
|
Stroke(this.id);
|
||||||
}
|
}
|
||||||
|
|
||||||
class Point {
|
class Point {
|
||||||
|
@ -2,6 +2,7 @@ import 'dart:math';
|
|||||||
import 'dart:ui';
|
import 'dart:ui';
|
||||||
import 'package:fluentui_system_icons/fluentui_system_icons.dart';
|
import 'package:fluentui_system_icons/fluentui_system_icons.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:notes/savesystem/note_file.dart';
|
||||||
import 'my_painter.dart';
|
import 'my_painter.dart';
|
||||||
import 'paint_controller.dart';
|
import 'paint_controller.dart';
|
||||||
import 'screen_document_mapping.dart';
|
import 'screen_document_mapping.dart';
|
||||||
@ -11,7 +12,10 @@ import '../tool_bar.dart';
|
|||||||
|
|
||||||
/// Handles input events and draws canvas element
|
/// Handles input events and draws canvas element
|
||||||
class DrawingPage extends StatefulWidget {
|
class DrawingPage extends StatefulWidget {
|
||||||
const DrawingPage({Key? key}) : super(key: key);
|
// path to the .dbnote file
|
||||||
|
final String filePath;
|
||||||
|
|
||||||
|
const DrawingPage({Key? key, required this.filePath}) : super(key: key);
|
||||||
|
|
||||||
@override
|
@override
|
||||||
State<DrawingPage> createState() => _DrawingPageState();
|
State<DrawingPage> createState() => _DrawingPageState();
|
||||||
@ -22,18 +26,29 @@ class _DrawingPageState extends State<DrawingPage> {
|
|||||||
double basezoom = 1.0;
|
double basezoom = 1.0;
|
||||||
Offset offset = const Offset(.0, .0);
|
Offset offset = const Offset(.0, .0);
|
||||||
|
|
||||||
PaintController controller = PaintController();
|
late PaintController controller;
|
||||||
|
late NoteFile noteFile = NoteFile(widget.filePath);
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void initState() {
|
void initState() {
|
||||||
super.initState();
|
super.initState();
|
||||||
|
|
||||||
|
controller = PaintController(noteFile);
|
||||||
|
noteFile.init().then((value) => controller.loadStrokesFromFile());
|
||||||
|
|
||||||
// todo might be weird behaviour if used with short side
|
// todo might be weird behaviour if used with short side
|
||||||
final screenWidth =
|
final screenWidth =
|
||||||
(window.physicalSize.longestSide / window.devicePixelRatio);
|
(window.physicalSize.longestSide / window.devicePixelRatio);
|
||||||
_calcNewPageOffset(const Offset(.0, .0), screenWidth - 45);
|
_calcNewPageOffset(const Offset(.0, .0), screenWidth - 45);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
void dispose() {
|
||||||
|
super.dispose();
|
||||||
|
|
||||||
|
noteFile.close();
|
||||||
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
return Scaffold(
|
return Scaffold(
|
||||||
|
@ -2,7 +2,9 @@ import 'dart:math';
|
|||||||
import 'dart:ui';
|
import 'dart:ui';
|
||||||
|
|
||||||
import 'package:flutter/foundation.dart';
|
import 'package:flutter/foundation.dart';
|
||||||
|
import 'package:notes/savesystem/line_loader.dart';
|
||||||
|
|
||||||
|
import '../savesystem/note_file.dart';
|
||||||
import 'document_types.dart';
|
import 'document_types.dart';
|
||||||
import 'my_painter.dart';
|
import 'my_painter.dart';
|
||||||
|
|
||||||
@ -13,6 +15,10 @@ class PaintController extends ChangeNotifier {
|
|||||||
List<Stroke> strokes = [];
|
List<Stroke> strokes = [];
|
||||||
final bool _allowDrawWithFinger = false;
|
final bool _allowDrawWithFinger = false;
|
||||||
|
|
||||||
|
PaintController(this.file);
|
||||||
|
|
||||||
|
final NoteFile file;
|
||||||
|
|
||||||
void changePen(Pen pen) {
|
void changePen(Pen pen) {
|
||||||
activePen = pen;
|
activePen = pen;
|
||||||
notifyListeners();
|
notifyListeners();
|
||||||
@ -40,7 +46,8 @@ class PaintController extends ChangeNotifier {
|
|||||||
return thickness;
|
return thickness;
|
||||||
}
|
}
|
||||||
|
|
||||||
void pointDownEvent(Offset offset, PointerDeviceKind pointer, double tilt) {
|
void pointDownEvent(
|
||||||
|
Offset offset, PointerDeviceKind pointer, double tilt) async {
|
||||||
if (_allowDrawWithFinger || pointer != PointerDeviceKind.touch) {
|
if (_allowDrawWithFinger || pointer != PointerDeviceKind.touch) {
|
||||||
// todo line drawn on edge where line left page
|
// todo line drawn on edge where line left page
|
||||||
if (!a4Page.contains(offset)) return;
|
if (!a4Page.contains(offset)) return;
|
||||||
@ -48,8 +55,12 @@ class PaintController extends ChangeNotifier {
|
|||||||
// todo handle other pens
|
// todo handle other pens
|
||||||
if (activePen != Pen.pen) return;
|
if (activePen != Pen.pen) return;
|
||||||
|
|
||||||
strokes
|
int strokeid = strokes.isNotEmpty ? strokes.last.id + 1 : 0;
|
||||||
.add(Stroke.fromPoints([Point(offset, _calcTiltedWidth(3.0, tilt))]));
|
strokes.add(Stroke.fromPoints(
|
||||||
|
[Point(offset, _calcTiltedWidth(3.0, tilt))],
|
||||||
|
strokes.isNotEmpty ? strokes.last.id + 1 : 0));
|
||||||
|
file.addStroke(strokeid);
|
||||||
|
|
||||||
notifyListeners();
|
notifyListeners();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -58,10 +69,11 @@ class PaintController extends ChangeNotifier {
|
|||||||
if (activePen == Pen.eraser) return;
|
if (activePen == Pen.eraser) return;
|
||||||
|
|
||||||
if (_allowDrawWithFinger || pointer != PointerDeviceKind.touch) {
|
if (_allowDrawWithFinger || pointer != PointerDeviceKind.touch) {
|
||||||
if (strokes.last.points.length <= 1) {
|
final lastStroke = strokes.last;
|
||||||
|
if (lastStroke.points.length <= 1) {
|
||||||
// if the line consists only of one point (point) add endpoint as the same to allow drawing a line
|
// if the line consists only of one point (point) add endpoint as the same to allow drawing a line
|
||||||
// todo maybe solve this in custompainter in future
|
lastStroke.points.add(lastStroke.points.last);
|
||||||
strokes.last.points.add(strokes.last.points.last);
|
file.addPoint(lastStroke.id, lastStroke.points.last);
|
||||||
notifyListeners();
|
notifyListeners();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -83,6 +95,7 @@ class PaintController extends ChangeNotifier {
|
|||||||
// check if eraser hit an point within its range
|
// check if eraser hit an point within its range
|
||||||
for (final pt in stroke.points) {
|
for (final pt in stroke.points) {
|
||||||
if (eraserrect.contains(pt.point)) {
|
if (eraserrect.contains(pt.point)) {
|
||||||
|
file.removeStroke(stroke.id);
|
||||||
strokes.remove(stroke);
|
strokes.remove(stroke);
|
||||||
notifyListeners();
|
notifyListeners();
|
||||||
return;
|
return;
|
||||||
@ -101,7 +114,9 @@ class PaintController extends ChangeNotifier {
|
|||||||
pts.last, pts[pts.length - 2], newWidth);
|
pts.last, pts[pts.length - 2], newWidth);
|
||||||
}
|
}
|
||||||
|
|
||||||
strokes.last.addPoint(Point(offset, newWidth));
|
Point p = Point(offset, newWidth);
|
||||||
|
strokes.last.addPoint(p);
|
||||||
|
file.addPoint(strokes.last.id, p);
|
||||||
break;
|
break;
|
||||||
case Pen.highlighter:
|
case Pen.highlighter:
|
||||||
// TODO: Handle this case.
|
// TODO: Handle this case.
|
||||||
@ -113,4 +128,9 @@ class PaintController extends ChangeNotifier {
|
|||||||
notifyListeners();
|
notifyListeners();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Future<void> loadStrokesFromFile() async {
|
||||||
|
strokes = await file.loadStrokes();
|
||||||
|
notifyListeners();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import 'package:flutter/cupertino.dart';
|
import 'package:fluentui_system_icons/fluentui_system_icons.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:notes/drawer_item.dart';
|
import 'package:notes/drawer_item.dart';
|
||||||
|
|
||||||
@ -110,7 +110,8 @@ class _CollapseDrawerState extends State<CollapseDrawer>
|
|||||||
active: widget.activePage == View.shared,
|
active: widget.activePage == View.shared,
|
||||||
onTap: () => widget.onPageChange(View.shared)),
|
onTap: () => widget.onPageChange(View.shared)),
|
||||||
DrawerItem(
|
DrawerItem(
|
||||||
dta: ItemData('Recycle bin', CupertinoIcons.trash),
|
dta: ItemData(
|
||||||
|
'Recycle bin', FluentIcons.delete_20_filled),
|
||||||
collapsed: collapsed,
|
collapsed: collapsed,
|
||||||
active: widget.activePage == View.recycle,
|
active: widget.activePage == View.recycle,
|
||||||
onTap: () => widget.onPageChange(View.recycle)),
|
onTap: () => widget.onPageChange(View.recycle)),
|
||||||
|
@ -1,9 +1,15 @@
|
|||||||
|
import 'package:flutter/foundation.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:notes/collapse_drawer.dart';
|
import 'package:notes/collapse_drawer.dart';
|
||||||
import 'package:notes/all_notes_page.dart';
|
import 'package:notes/all_notes_page.dart';
|
||||||
import 'package:notes/canvas/drawing_page.dart';
|
import 'package:notes/canvas/drawing_page.dart';
|
||||||
|
import 'package:sqflite_common_ffi/sqflite_ffi.dart';
|
||||||
|
|
||||||
void main() {
|
void main() {
|
||||||
|
if (defaultTargetPlatform != TargetPlatform.android &&
|
||||||
|
defaultTargetPlatform != TargetPlatform.iOS) {
|
||||||
|
sqfliteFfiInit();
|
||||||
|
}
|
||||||
runApp(const MyApp());
|
runApp(const MyApp());
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -63,10 +69,13 @@ class _MyHomePageState extends State<MyHomePage> {
|
|||||||
case View.folders:
|
case View.folders:
|
||||||
return FloatingActionButton(
|
return FloatingActionButton(
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
|
//final now = DateTime.now();
|
||||||
|
//String filename = 'note-${now.year}_${now.month}_${now.day}-${now.hour}_${now.minute}.dbnote';
|
||||||
|
String filename = 'test.dbnote';
|
||||||
Navigator.push(
|
Navigator.push(
|
||||||
context,
|
context,
|
||||||
MaterialPageRoute(
|
MaterialPageRoute(
|
||||||
builder: (context) => const DrawingPage(),
|
builder: (context) => DrawingPage(filePath: filename),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
},
|
},
|
||||||
|
47
lib/savesystem/line_loader.dart
Normal file
47
lib/savesystem/line_loader.dart
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
import 'dart:ui';
|
||||||
|
|
||||||
|
import 'note_file.dart';
|
||||||
|
import '../canvas/document_types.dart';
|
||||||
|
|
||||||
|
extension LineLoading on NoteFile {
|
||||||
|
Future<List<Stroke>> loadStrokes() async {
|
||||||
|
final query = await db().query('points',
|
||||||
|
orderBy: 'strokeid',
|
||||||
|
columns: ['x', 'y', 'thickness', 'strokeid', 'id']);
|
||||||
|
int strokeid = -1;
|
||||||
|
List<Stroke> strokes = [];
|
||||||
|
|
||||||
|
for (final i in query) {
|
||||||
|
final int csid = i['strokeid'] as int;
|
||||||
|
if (csid != strokeid) {
|
||||||
|
strokeid = csid;
|
||||||
|
strokes.add(Stroke(strokeid));
|
||||||
|
}
|
||||||
|
final Point p = Point(
|
||||||
|
Offset(i['x'] as double, i['y'] as double), i['thickness'] as double);
|
||||||
|
strokes.last.points.add(p);
|
||||||
|
}
|
||||||
|
|
||||||
|
return strokes;
|
||||||
|
}
|
||||||
|
|
||||||
|
// create new stroke in file and return strokeid
|
||||||
|
Future<void> addStroke(int newStrokeId) async {
|
||||||
|
await db().insert(
|
||||||
|
'strokes', {'color': 0xffffff, 'elevation': 0, 'id': newStrokeId});
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<void> addPoint(int strokeid, Point p) async {
|
||||||
|
await db().insert('points', {
|
||||||
|
'x': p.point.dx,
|
||||||
|
'y': p.point.dy,
|
||||||
|
'thickness': p.thickness,
|
||||||
|
'strokeid': strokeid
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<void> removeStroke(int id) async {
|
||||||
|
await db().delete('strokes', where: 'id = $id');
|
||||||
|
await db().delete('points', where: 'strokeid = $id');
|
||||||
|
}
|
||||||
|
}
|
48
lib/savesystem/note_file.dart
Normal file
48
lib/savesystem/note_file.dart
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
import 'package:flutter/foundation.dart';
|
||||||
|
import 'package:sqflite/sqflite.dart';
|
||||||
|
import 'package:sqflite_common_ffi/sqflite_ffi.dart';
|
||||||
|
|
||||||
|
class NoteFile {
|
||||||
|
late Database _db;
|
||||||
|
String filename;
|
||||||
|
|
||||||
|
Database db() {
|
||||||
|
return _db;
|
||||||
|
}
|
||||||
|
|
||||||
|
NoteFile(this.filename);
|
||||||
|
|
||||||
|
Future<void> init() async {
|
||||||
|
String dbpath = filename;
|
||||||
|
if (defaultTargetPlatform == TargetPlatform.android ||
|
||||||
|
defaultTargetPlatform == TargetPlatform.iOS) {
|
||||||
|
dbpath = '${await getDatabasesPath()}/$filename';
|
||||||
|
} else {
|
||||||
|
// Change the default factory
|
||||||
|
databaseFactory = databaseFactoryFfi;
|
||||||
|
}
|
||||||
|
|
||||||
|
_db = await openDatabase(
|
||||||
|
dbpath,
|
||||||
|
onCreate: (db, version) {
|
||||||
|
return db.execute(
|
||||||
|
'CREATE TABLE strokes(id integer primary key autoincrement, color INTEGER, elevation INTEGER);'
|
||||||
|
'CREATE TABLE points(id integer primary key autoincrement, x INTEGER, y INTEGER, thickness REAL, strokeid INTEGER)',
|
||||||
|
);
|
||||||
|
},
|
||||||
|
// Set the version. This executes the onCreate function and provides a
|
||||||
|
// path to perform database upgrades and downgrades.
|
||||||
|
version: 1,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
void delete() {
|
||||||
|
// todo remove db file
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<void> close() async {
|
||||||
|
// shrink the db file size
|
||||||
|
await _db.execute('VACUUM');
|
||||||
|
_db.close();
|
||||||
|
}
|
||||||
|
}
|
149
pubspec.lock
149
pubspec.lock
@ -50,13 +50,6 @@ packages:
|
|||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.0.3"
|
version: "0.0.3"
|
||||||
cupertino_icons:
|
|
||||||
dependency: "direct main"
|
|
||||||
description:
|
|
||||||
name: cupertino_icons
|
|
||||||
url: "https://pub.dartlang.org"
|
|
||||||
source: hosted
|
|
||||||
version: "1.0.5"
|
|
||||||
fake_async:
|
fake_async:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@ -64,6 +57,20 @@ packages:
|
|||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.3.1"
|
version: "1.3.1"
|
||||||
|
ffi:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: ffi
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "2.0.1"
|
||||||
|
file:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: file
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "6.1.4"
|
||||||
fluentui_system_icons:
|
fluentui_system_icons:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
@ -102,6 +109,13 @@ packages:
|
|||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.0.5"
|
version: "0.0.5"
|
||||||
|
js:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: js
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "0.6.5"
|
||||||
lints:
|
lints:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@ -151,6 +165,55 @@ packages:
|
|||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.0.1"
|
version: "1.0.1"
|
||||||
|
path_provider:
|
||||||
|
dependency: "direct main"
|
||||||
|
description:
|
||||||
|
name: path_provider
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "2.0.11"
|
||||||
|
path_provider_android:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: path_provider_android
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "2.0.20"
|
||||||
|
path_provider_ios:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: path_provider_ios
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "2.0.11"
|
||||||
|
path_provider_linux:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: path_provider_linux
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "2.1.7"
|
||||||
|
path_provider_macos:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: path_provider_macos
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "2.0.6"
|
||||||
|
path_provider_platform_interface:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: path_provider_platform_interface
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "2.0.5"
|
||||||
|
path_provider_windows:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: path_provider_windows
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "2.1.3"
|
||||||
petitparser:
|
petitparser:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@ -158,6 +221,27 @@ packages:
|
|||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "5.1.0"
|
version: "5.1.0"
|
||||||
|
platform:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: platform
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "3.1.0"
|
||||||
|
plugin_platform_interface:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: plugin_platform_interface
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "2.1.3"
|
||||||
|
process:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: process
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "4.2.4"
|
||||||
sky_engine:
|
sky_engine:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description: flutter
|
description: flutter
|
||||||
@ -170,6 +254,34 @@ packages:
|
|||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.9.0"
|
version: "1.9.0"
|
||||||
|
sqflite:
|
||||||
|
dependency: "direct main"
|
||||||
|
description:
|
||||||
|
name: sqflite
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "2.2.0+2"
|
||||||
|
sqflite_common:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: sqflite_common
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "2.4.0+2"
|
||||||
|
sqflite_common_ffi:
|
||||||
|
dependency: "direct main"
|
||||||
|
description:
|
||||||
|
name: sqflite_common_ffi
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "2.2.0+1"
|
||||||
|
sqlite3:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: sqlite3
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "1.9.1"
|
||||||
stack_trace:
|
stack_trace:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@ -191,6 +303,13 @@ packages:
|
|||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.1.1"
|
version: "1.1.1"
|
||||||
|
synchronized:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: synchronized
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "3.0.0+3"
|
||||||
term_glyph:
|
term_glyph:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@ -212,6 +331,20 @@ packages:
|
|||||||
url: "https://pub.dartlang.org"
|
url: "https://pub.dartlang.org"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.1.2"
|
version: "2.1.2"
|
||||||
|
win32:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: win32
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "3.0.1"
|
||||||
|
xdg_directories:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: xdg_directories
|
||||||
|
url: "https://pub.dartlang.org"
|
||||||
|
source: hosted
|
||||||
|
version: "0.2.0+2"
|
||||||
xml:
|
xml:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@ -221,4 +354,4 @@ packages:
|
|||||||
version: "6.1.0"
|
version: "6.1.0"
|
||||||
sdks:
|
sdks:
|
||||||
dart: ">=2.18.2 <3.0.0"
|
dart: ">=2.18.2 <3.0.0"
|
||||||
flutter: ">=3.0.0"
|
flutter: ">=3.3.0"
|
||||||
|
11
pubspec.yaml
11
pubspec.yaml
@ -1,9 +1,6 @@
|
|||||||
name: notes
|
name: notes
|
||||||
description: A new Flutter project.
|
description: A new Flutter project.
|
||||||
|
publish_to: 'none'
|
||||||
# The following line prevents the package from being accidentally published to
|
|
||||||
# pub.dev using `flutter pub publish`. This is preferred for private packages.
|
|
||||||
publish_to: 'none' # Remove this line if you wish to publish to pub.dev
|
|
||||||
|
|
||||||
# The following defines the version and build number for your application.
|
# The following defines the version and build number for your application.
|
||||||
# A version number is three numbers separated by dots, like 1.2.43
|
# A version number is three numbers separated by dots, like 1.2.43
|
||||||
@ -32,12 +29,12 @@ dependencies:
|
|||||||
flutter:
|
flutter:
|
||||||
sdk: flutter
|
sdk: flutter
|
||||||
|
|
||||||
# The following adds the Cupertino Icons font to your application.
|
|
||||||
# Use with the CupertinoIcons class for iOS style icons.
|
|
||||||
cupertino_icons: ^1.0.2
|
|
||||||
adwaita_icons: ^0.2.1
|
adwaita_icons: ^0.2.1
|
||||||
iconify_flutter: ^0.0.5
|
iconify_flutter: ^0.0.5
|
||||||
fluentui_system_icons: ^1.1.185
|
fluentui_system_icons: ^1.1.185
|
||||||
|
sqflite: ^2.2.0+2
|
||||||
|
sqflite_common_ffi: ^2.2.0+1
|
||||||
|
path_provider: ^2.0.11
|
||||||
|
|
||||||
dev_dependencies:
|
dev_dependencies:
|
||||||
flutter_test:
|
flutter_test:
|
||||||
|
Loading…
Reference in New Issue
Block a user