Skip to content

Commit 50edde5

Browse files
committed
10: create documents
1 parent 9f1cbf5 commit 50edde5

File tree

7 files changed

+110
-9
lines changed

7 files changed

+110
-9
lines changed

lib/app/constants.dart

+8-1
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,9 @@
11
const appwriteEndpoint = 'http://localhost/v1';
2-
const appwriteProjectId = '6241851fa5fe35076532'; // TODO: modify this
2+
const appwriteProjectId = '6241851fa5fe35076532'; // TODO: modify this
3+
4+
abstract class CollectionNames {
5+
static String get delta => 'delta';
6+
static String get deltaDocumentsPath => 'collections.$delta.documents';
7+
static String get pages => 'pages';
8+
static String get pagesDocumentsPath => 'collections.$pages.documents';
9+
}

lib/app/providers.dart

+2
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ abstract class Dependency {
1313

1414
abstract class Repository {
1515
static Provider<AuthRepository> get auth => AuthRepository.provider;
16+
static Provider<DatabaseRepository> get database =>
17+
DatabaseRepository.provider;
1618
}
1719

1820
abstract class AppState {
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
import 'package:flutter/material.dart';
22
import 'package:flutter_riverpod/flutter_riverpod.dart';
3+
import 'package:google_docs_clone/app/navigation/routes.dart';
34
import 'package:google_docs_clone/app/providers.dart';
5+
import 'package:google_docs_clone/repositories/repository_exception.dart';
6+
import 'package:routemaster/routemaster.dart';
7+
import 'package:uuid/uuid.dart';
48

59
class NewDocumentPage extends ConsumerStatefulWidget {
610
const NewDocumentPage({Key? key}) : super(key: key);
@@ -11,15 +15,40 @@ class NewDocumentPage extends ConsumerStatefulWidget {
1115
}
1216

1317
class _NewDocumentPageState extends ConsumerState<NewDocumentPage> {
18+
final _uuid = const Uuid();
19+
20+
bool showError = false;
21+
22+
@override
23+
void initState() {
24+
super.initState();
25+
_createNewPage();
26+
}
27+
28+
Future<void> _createNewPage() async {
29+
final documentId = _uuid.v4();
30+
try {
31+
await ref.read(Repository.database).createNewPage(
32+
documentId: documentId,
33+
owner: ref.read(AppState.auth).user!.$id,
34+
);
35+
36+
Routemaster.of(context).push('${AppRoutes.document}/$documentId');
37+
} on RepositoryException catch (_) {
38+
setState(() {
39+
showError = true;
40+
});
41+
}
42+
}
43+
1444
@override
1545
Widget build(BuildContext context) {
16-
return Center(
17-
child: TextButton(
18-
onPressed: () {
19-
ref.read(AppState.auth.notifier).signOut();
20-
},
21-
child: const Text('Sign out'),
22-
),
23-
);
46+
if (showError) {
47+
return const Center(
48+
child: Text('An error occured'),
49+
);
50+
} else {
51+
return const SizedBox();
52+
}
2453
}
2554
}
+54
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
import 'package:appwrite/appwrite.dart';
2+
import 'package:flutter_riverpod/flutter_riverpod.dart';
3+
import 'package:google_docs_clone/app/constants.dart';
4+
import 'package:google_docs_clone/app/providers.dart';
5+
import 'package:google_docs_clone/repositories/repository_exception.dart';
6+
7+
final _databaseRepositoryProvider = Provider<DatabaseRepository>((ref) {
8+
return DatabaseRepository(ref.read);
9+
});
10+
11+
class DatabaseRepository with RepositoryExceptionMixin {
12+
DatabaseRepository(this._read);
13+
14+
final Reader _read;
15+
16+
static Provider<DatabaseRepository> get provider =>
17+
_databaseRepositoryProvider;
18+
19+
Database get _database => _read(Dependency.database);
20+
21+
Future<void> createNewPage({
22+
required String documentId,
23+
required String owner,
24+
}) async {
25+
return exceptionHandler(
26+
_createPageAndDelta(owner: owner, documentId: documentId));
27+
}
28+
29+
Future<void> _createPageAndDelta({
30+
required String documentId,
31+
required String owner,
32+
}) async {
33+
Future.wait([
34+
_database.createDocument(
35+
collectionId: CollectionNames.pages,
36+
documentId: documentId,
37+
data: {
38+
'owner': owner,
39+
'title': null,
40+
'content': null,
41+
},
42+
),
43+
_database.createDocument(
44+
collectionId: CollectionNames.delta,
45+
documentId: documentId,
46+
data: {
47+
'delta': null,
48+
'user': null,
49+
'deviceId': null,
50+
},
51+
),
52+
]);
53+
}
54+
}

lib/repositories/repositories.dart

+1
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
export 'auth_repository.dart';
2+
export 'database_repository.dart';
23
export 'repository_exception.dart';

pubspec.lock

+7
Original file line numberDiff line numberDiff line change
@@ -700,6 +700,13 @@ packages:
700700
url: "https://pub.dartlang.org"
701701
source: hosted
702702
version: "3.0.0"
703+
uuid:
704+
dependency: "direct main"
705+
description:
706+
name: uuid
707+
url: "https://pub.dartlang.org"
708+
source: hosted
709+
version: "3.0.6"
703710
vector_math:
704711
dependency: transitive
705712
description:

pubspec.yaml

+1
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ dependencies:
4040
appwrite: ^4.0.1
4141
equatable: ^2.0.3
4242
flutter_quill: ^4.1.0
43+
uuid: ^3.0.6
4344

4445
dev_dependencies:
4546
flutter_test:

0 commit comments

Comments
 (0)