From e99a09861a3883f30e1760c43aece4a967536baa Mon Sep 17 00:00:00 2001 From: Jonas Sander <29028262+Jonas-Sander@users.noreply.github.com> Date: Mon, 22 Apr 2024 17:30:06 +0200 Subject: [PATCH] Add TOS and update privacy policy in website. (#1503) --- .../lib/src/theme_settings.dart | 25 +- licenses_config.yaml | 1 + website/lib/footer.dart | 6 +- website/lib/legal/privacy_policy.dart | 291 ----------------- website/lib/main.dart | 39 ++- website/pubspec.lock | 292 ++++++++++++++++++ website/pubspec.yaml | 3 + 7 files changed, 339 insertions(+), 318 deletions(-) delete mode 100644 website/lib/legal/privacy_policy.dart diff --git a/lib/sharezone_widgets/lib/src/theme_settings.dart b/lib/sharezone_widgets/lib/src/theme_settings.dart index f746a22bd..2c9941900 100644 --- a/lib/sharezone_widgets/lib/src/theme_settings.dart +++ b/lib/sharezone_widgets/lib/src/theme_settings.dart @@ -12,7 +12,9 @@ import 'dart:convert'; // ignore: import_of_legacy_library_into_null_safe import 'package:analytics/analytics.dart'; +import 'package:analytics/null_analytics_backend.dart'; import 'package:flutter/material.dart'; +import 'package:key_value_store/in_memory_key_value_store.dart'; import 'package:key_value_store/key_value_store.dart'; /// [ThemeBrightness] adds a "system" value that is missing in the Flutter @@ -79,29 +81,30 @@ class ThemeSettings extends ChangeNotifier { static const currentBrightnessCacheKey = 'currentBrightnessCacheKey'; ThemeSettings({ - required KeyValueStore keyValueStore, - required Analytics analytics, + KeyValueStore? keyValueStore, + Analytics? analytics, /// The value assigned to [textScalingFactor] if no other value is cached. - required double defaultTextScalingFactor, + double defaultTextScalingFactor = 1.0, /// The value assigned to [visualDensity] if no other value is cached. - required VisualDensitySetting defaultVisualDensity, + VisualDensitySetting? defaultVisualDensity, /// The value assigned to [themeBrightness] if no other value is cached. - required ThemeBrightness defaultThemeBrightness, - }) : _keyValueStore = keyValueStore, - _analytics = analytics { + ThemeBrightness defaultThemeBrightness = ThemeBrightness.system, + }) : _keyValueStore = keyValueStore ?? InMemoryKeyValueStore(), + _analytics = analytics ?? Analytics(NullAnalyticsBackend()) { _textScalingFactor = - keyValueStore.tryGetDouble(currentTextScalingFactorCacheKey) ?? + _keyValueStore.tryGetDouble(currentTextScalingFactorCacheKey) ?? defaultTextScalingFactor; - _visualDensitySetting = keyValueStore + _visualDensitySetting = _keyValueStore .tryGetString(currentVisualDensityCacheKey) .toVisualDensity() ?? - defaultVisualDensity; + defaultVisualDensity ?? + VisualDensitySetting.adaptivePlatformDensity(); - _themeBrightness = keyValueStore + _themeBrightness = _keyValueStore .tryGetString(currentBrightnessCacheKey) .toThemeBrightness() ?? defaultThemeBrightness; diff --git a/licenses_config.yaml b/licenses_config.yaml index 0bd8ddf55..30a645e18 100644 --- a/licenses_config.yaml +++ b/licenses_config.yaml @@ -80,6 +80,7 @@ packageLicenseOverride: sharezone_utils: EUPL-1.2-or-later sharezone_widgets: EUPL-1.2-or-later stripe_checkout_session: EUPL-1.2-or-later + legal: EUPL-1.2-or-later time: EUPL-1.2-or-later url_launcher_extended: EUPL-1.2-or-later user: EUPL-1.2-or-later diff --git a/website/lib/footer.dart b/website/lib/footer.dart index 5b7875e0d..b598fff38 100644 --- a/website/lib/footer.dart +++ b/website/lib/footer.dart @@ -9,8 +9,8 @@ import 'package:flutter/material.dart'; import 'package:flutter_svg/svg.dart'; import 'package:go_router/go_router.dart'; +import 'package:legal/legal.dart'; import 'package:sharezone_website/legal/imprint_page.dart'; -import 'package:sharezone_website/legal/privacy_policy.dart'; import 'package:sharezone_website/support_page.dart'; import 'package:sharezone_website/utils.dart'; @@ -205,7 +205,9 @@ class _FooterLegal extends StatelessWidget { title: "Rechtliches", links: [ _FooterAction("Impressum", tag: ImprintPage.tag), - _FooterAction("Datenschutz", tag: PrivacyPolicyPage.tag), + _FooterAction("Allgemeine Nutzungsbedingungen (ANB)", + tag: TermsOfServicePage.tag), + _FooterAction("Datenschutzerklärung", tag: PrivacyPolicyPage.tag), ], ); } diff --git a/website/lib/legal/privacy_policy.dart b/website/lib/legal/privacy_policy.dart deleted file mode 100644 index 50e816e23..000000000 --- a/website/lib/legal/privacy_policy.dart +++ /dev/null @@ -1,291 +0,0 @@ -// Copyright (c) 2023 Sharezone UG (haftungsbeschränkt) -// Licensed under the EUPL-1.2-or-later. -// -// You may obtain a copy of the Licence at: -// https://joinup.ec.europa.eu/software/page/eupl -// -// SPDX-License-Identifier: EUPL-1.2 - -import 'package:flutter/material.dart'; -import 'package:sharezone_website/page.dart'; -import 'package:sharezone_website/widgets/headline.dart'; -import 'package:sharezone_widgets/sharezone_widgets.dart' hide Headline; - -class PrivacyPolicyPage extends StatelessWidget { - const PrivacyPolicyPage({super.key}); - - static const tag = "privacy-policy"; - - @override - Widget build(BuildContext context) { - return const PageTemplate( - children: [ - Headline("Datenschutzerklärung"), - PrivacyPolicyContent(), - ], - ); - } -} - -class PrivacyPolicyContent extends StatelessWidget { - const PrivacyPolicyContent({super.key}); - - @override - Widget build(BuildContext context) { - return Hero( - tag: 'privacy-policy-content', - child: SingleChildScrollView( - padding: const EdgeInsets.all(12), - child: SafeArea( - child: MaxWidthConstraintBox( - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - _Introduction(), - _ContactInformation(), - _ImportantTerms(), - _WhichInformationAreCollected(), - _WhoWillGetTheData(), - _HowLongAreSavedTheData(), - _WhichRightsDoYouHave(), - _YouDidIt(), - ], - ), - ), - ), - ), - ); - } -} - -class _Introduction extends StatelessWidget { - @override - Widget build(BuildContext context) { - return const _Topic( - title: _Title("1. Einführung"), - texts: [ - Text( - "Hey! Das ist unsere Datenschutzerklärung! Bitte nimm dir die Zeit und lies dir die Datenschutzerklärung gründlich durch, damit du genau Bescheid weißt, was mit deinen persönlichen Daten passiert und wer auf diese Daten Zugriff hat.") - ], - ); - } -} - -class _ContactInformation extends StatelessWidget { - @override - Widget build(BuildContext context) { - return const _Topic( - title: _Title("2. Kontaktinformationen"), - texts: [ - Text("Hier findest du unsere Kontaktdaten:"), - SizedBox(height: 10), - Text( - "Sander, Jonas; Reichardt, Nils u. Weuthen, Felix “Sharezone” GbR\nBlücherstraße 34\n57072 Siegen\nDeutschland"), - SizedBox(height: 10), - Text("E-Mail: support@sharezone.net"), - ], - ); - } -} - -class _ImportantTerms extends StatelessWidget { - @override - Widget build(BuildContext context) { - return const _Topic( - title: _Title("3. Wichtige Begriffe, die du kennen solltest"), - texts: [ - Text( - "Unter diesem Link findest du offizielle Erklärung der Datenschutzerklärung (DSGVO) unter diesem " - "Link (https://dejure.org/gesetze/DSGVO/4.html). Solltest du einmal ein Wort nicht verstehen, " - "kannst du es unter diesem Link einfach nachlesen.") - ], - ); - } -} - -class _WhichInformationAreCollected extends StatelessWidget { - @override - Widget build(BuildContext context) { - return const _Topic( - title: _Title("4. Welche Informationen erfassen wir grundsätzlich?"), - texts: [ - Text( - "Wir erklären dir nun, welche Daten von uns erfasst werden. Solltest du etwas nicht verstehen, dann schreibe einfach eine E-Mail an unseren Support. Wir werden dir schnellstmöglich antworten!\n\n" - "Um unsere App zu benutzen, musst du dir ein Nutzerkonto anlegen. Dieses Nutzerkonto ist erforderlich, damit die Funktionen in der App, wie z.B. Hausaufgaben verwenden kannst. \n\n" - "Wenn du ein neues Nutzerkonto erstellst, kannst du dies auf drei verschiedenen Wege machen."), - SizedBox(height: 15), - _Subtitle("1) Registrierung per E-Mail"), - Text( - "Bei der Registrierung per E-Mail erheben wir folgende Daten:\n" - "- Name (Der Name kann auch ein Pseudonym sein)\n" - "- E-Mail\n" - "- Bundesland (optional - es kann auch der Wert \"anonym bleiben\" ausgewählt haben\n" - "- Art des Accounts (Schüler, Lehrkraft und Elternteil)", - ), - SizedBox(height: 15), - _Subtitle("2) Registrierung via Google (Google Sign-In)"), - Text("Bei der Registrierung via Google erheben wir folgende Daten:"), - _Absatz(), - Text("""- Name & E-Mail deines Google Profils -- Bundesland (optional - es kann auch der Wert "anonym bleiben" ausgewählt werden) -- Art des Accounts (Schüler, Lehrkraft oder Elternteil"""), - _Absatz(), - Text( - "Bei der Registierung und der Verwendung unserer App muss die IP-Adresse von dir verarbeitet werden, um eine Verbindung zu den Firebase-Servern aufzubauen. Diese wird temporär gespeichert."), - _Absatz(), - Text( - "Weitere Informationen zu Google Sign-In und den Privatsphäre-Einstellungen findest du in den Datenschutzhinweisen (https://policies.google.com/privacy?hl=de&gl=de) und den Nutzungsbedingungen (https://policies.google.com/terms?hl=de&gl=de) der Google LLC."), - SizedBox(height: 15), - _Subtitle("3) Registrierung als anonymer User"), - Text("Bei der Registrierung erheben wir folgende Daten:"), - _Absatz(), - Text( - """- Bundesland (optional - es kann auch der Wert "anonym bleiben" ausgewählt werden) -- Art des Accounts (Schüler, Lehrkraft oder Elternteil)"""), - _Absatz(), - _Absatz(), - Text( - "Wenn du ein Nutzerkonto erstellt hast, kannst du unsere App kostenlos benutzen. (Wenn du dich für die Rechtsgrundlage dazu interessierst, findest du das in der DSGVO unter Art. 6 Abs. 1 lit. a und Art. 6 Abs. 1 lit. b.)."), - SizedBox(height: 20), - _Subtitle("Warum erheben wir diesen Daten?"), - Text( - "Nun, dein Name benötigen die anderen Nutzer in deinem Kurs, um dich zu identifizieren. Solltest du dich mit einem Anonymen User anmelden, wird dir ein zufälliger Tiername zugewiesen. Die E-Mail benötigst du, um dein Passwort zurückzusetzen (bei einer anonymen Registrierung nicht möglich). Hast du dies einmal vergessen, schicken wir an diese E-Mail einen Link, mit dem du dir ein neues Passwort setzen kannst."), - ], - ); - } -} - -class _WhoWillGetTheData extends StatelessWidget { - @override - Widget build(BuildContext context) { - return const _Topic( - title: _Title("5. An wen geben wir deine Daten weiter?"), - texts: [ - Text( - "Wir geben deine Daten nur an einen einzigen externen Dienstleister (Google Firebase) weiter, den wir zur Speicherung der Daten brauchen. Google Firebase ermöglicht es uns sichere und einfache Anmeldevorgänge und Datenspeicherung vorzunehmen."), - _Absatz(), - Text( - "Bei Google Firebase verwenden wir folgende Dienste (+ Zertifizierung):"), - Text("""- Firebase Authentication (ISO 27001) -- Cloud Firestore (ISO 27018) -- Cloud Functions (ISO 27018) -- Firebase Cloud Messaging (ISO 27001)"""), - _Absatz(), - _Subtitle("Firebase Authentication:"), - Text( - "Benötigt deine E-Mail Adresse, dein Passwort und deine IP-Adresse (für mehr Sicherheit). Die IP-Adresse bleibt für ein paar Wochen gespeichert. Speicherort: USA (Firebase ist nach dem EU-US Privacy Shield zertifiziert)"), - _Absatz(), - _Subtitle("Cloud Firestore:"), - Text( - "Firestore ist unsere Datenbank, in der wir z.B. deinen Namen, deine Kurse und deine Hausaufgaben abspeichern. Der Speicherort von Firestore ist Frankfurt/Main (Deutschland)."), - _Absatz(), - _Subtitle("Cloud Functions:"), - Text( - "Mit Cloud Funtioncs können wir Skripte auf dem Server ablaufen lassen. Dabei wird temporär deine IP-Adresse gespeichert. Der Speicherort der Cloud Functions ist ebenfalls Frankfurt/Main (Deutschland)."), - _Absatz(), - _Subtitle("Firebase Cloud Messaging"), - Text( - "Damit wir dich über wichtige Neuigkeiten und offene Hausaufgaben erinnern können, verwenden wir von Firebase den Dienst Firebase Messaging. Dabei wird temporär die Instance ID (https://developers.google.com/instance-id/) verarbeitet. Die Instance ID wird dazu verwendet, um einen speziellen Gerät eine Push-Notification zu schicken. So werden nur an deine Geräte auch deine Notifications geschickt."), - _Absatz(), - _Absatz(), - Text( - "Weitere Informationen findest du in der Datenschutzerklärung von Google Firebase: https://firebase.google.com/support/privacy/"), - ], - ); - } -} - -class _HowLongAreSavedTheData extends StatelessWidget { - @override - Widget build(BuildContext context) { - return const _Topic( - title: _Title("6. Wie lange speichern wir deine Daten?"), - texts: [ - Text( - "Die Dauer der Speicherung von personenbezogenen Daten bemisst sich anhand der gesetzlichen Aufbewahrungsrechte und -Pflichten (z.B. aus dem Handels- oder Steuerrecht). Läuft die Frist ab, werden die Daten bis zum Ende des Monats gelöscht, sofern sie nicht für die Anbahnung, Durchführung und Beendigung eines Vertrags erforderlich sind und/oder kein berechtigtes Interesse unsererseits an der Verarbeitung besteht."), - ], - ); - } -} - -class _WhichRightsDoYouHave extends StatelessWidget { - @override - Widget build(BuildContext context) { - return const _Topic( - title: _Title("7. Welche Rechte hast du?"), - texts: [ - Text( - "Die Dauer der Speicherung von personenbezogenen Daten bemisst sich anhand der gesetzlichen Aufbewahrungsrechte und -Pflichten (z.B. aus dem Handels- oder Steuerrecht). Läuft die Frist ab, werden die Daten bis zum Ende des Monats gelöscht, sofern sie nicht für die Anbahnung, Durchführung und Beendigung eines Vertrags erforderlich sind und/oder kein berechtigtes Interesse unsererseits an der Verarbeitung besteht."), - _Absatz(), - Text( - """1) Das Recht, gemäß Art. 15 DSGVO Auskunft über deine von uns verarbeiteten personenbezogenen Daten zu verlangen. Insbesondere kannst du Auskunft über die Verarbeitungszwecke, die Kategorie der personenbezogenen Daten, die Kategorien von Empfängern, gegenüber denen deine Daten offengelegt wurden oder werden, die geplante Speicherdauer, das Bestehen eines Rechts auf Berichtigung, Löschung, Einschränkung der Verarbeitung oder Widerspruch, das Bestehen eines Beschwerderechts, die Herkunft deiner Daten, sofern diese nicht bei uns erhoben wurden, sowie über das Bestehen einer automatisierten Entscheidungsfindung einschließlich Profiling und ggf. aussagekräftigen Informationen zu deren Einzelheiten verlangen. -2) Das Recht, gemäß Art. 16 DSGVO unverzüglich die Berichtigung unrichtiger oder Vervollständigung deiner bei uns gespeicherten personenbezogenen Daten zu verlangen. -3) Das Recht, gemäß Art. 17 DSGVO die Löschung deiner bei uns gespeicherten personenbezogenen Daten zu verlangen, soweit nicht die Verarbeitung zur Ausübung des Rechts auf freie Meinungsäußerung und Information, zur Erfüllung einer rechtlichen Verpflichtung, aus Gründen des öffentlichen Interesses oder zur Geltendmachung, Ausübung oder Verteidigung von Rechtsansprüchen erforderlich ist. -4) Das Recht, gemäß Art. 18 DSGVO die Einschränkung der Verarbeitung deiner personenbezogenen Daten zu verlangen, soweit die Richtigkeit der Daten von dir bestritten wird, die Verarbeitung unrechtmäßig ist, du aber deren Löschung ablehnst und wir die Daten nicht mehr benötigen, du jedoch diese zur Geltendmachung, Ausübung oder Verteidigung von Rechtsansprüchen benötigst oder du gemäß Art. 21 DSGVO Widerspruch gegen die Verarbeitung eingelegt hast. -5) Das Recht, gemäß Art. 20 DSGVO deine personenbezogenen Daten, die du uns bereitgestellt hast, in einem strukturierten, gängigen und maschinenlesebaren Format zu erhalten oder die Übermittlung an einen anderen Verantwortlichen zu verlangen. -6) Das Recht, sich gemäß Art. 77 DSGVO bei einer Aufsichtsbehörde zu beschweren. In der Regel kannst du dich hierfür an die Aufsichtsbehörde des Bundeslandes unseres oben angegebenen Sitzes oder ggf. die deines üblichen Aufenthaltsortes oder Arbeitsplatzes wenden.""") - ], - ); - } -} - -class _YouDidIt extends StatelessWidget { - @override - Widget build(BuildContext context) { - return const _Topic( - title: _Title("Glückwunsch, du hast es geschafft"), - texts: [ - Text( - "Sehr gut! Du hast unsere Datenschutzerklärung nun durchgelesen, wodurch du bestens informiert bist, wie wir deine Daten speichern, an wen wir diese weitergeben, wie lange wir deine Daten speichern und vieles mehr."), - _Absatz(), - Text( - "Sollten immer noch irgendwelche Fragen aufkommen, dann schreib uns einfach eine E-Mail an: support@sharezone.net"), - _Absatz(), - Text("Beste Grüße,\nDein Sharezone Team"), - ], - ); - } -} - -class _Absatz extends StatelessWidget { - const _Absatz(); - @override - Widget build(BuildContext context) => const SizedBox(height: 6); -} - -class _Title extends StatelessWidget { - const _Title(this.title); - - final String title; - - @override - Widget build(BuildContext context) { - return Text(title, style: const TextStyle(fontSize: 22)); - } -} - -class _Subtitle extends StatelessWidget { - const _Subtitle(this.subtitle); - - final String subtitle; - - @override - Widget build(BuildContext context) { - return Text(subtitle, style: const TextStyle(fontWeight: FontWeight.w500)); - } -} - -class _Topic extends StatelessWidget { - const _Topic({required this.title, required this.texts}); - - final Widget title; - final List texts; - - @override - Widget build(BuildContext context) { - return Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [title, ...texts, const SizedBox(height: 20)], - ); - } -} diff --git a/website/lib/main.dart b/website/lib/main.dart index 2ea865c24..7ba5da8d9 100644 --- a/website/lib/main.dart +++ b/website/lib/main.dart @@ -8,14 +8,16 @@ import 'package:flutter/material.dart'; import 'package:go_router/go_router.dart'; +import 'package:legal/legal.dart'; +import 'package:provider/provider.dart'; import 'package:sharezone_website/sharezone_plus/sharezone_plus_page.dart'; import 'package:sharezone_website/support_page.dart'; // ignore: depend_on_referenced_packages import 'package:flutter_web_plugins/url_strategy.dart'; +import 'package:sharezone_widgets/sharezone_widgets.dart'; import 'home/home_page.dart'; import 'legal/imprint_page.dart'; -import 'legal/privacy_policy.dart'; void main() { usePathUrlStrategy(); @@ -49,7 +51,13 @@ final GoRouter _router = GoRouter( GoRoute( path: PrivacyPolicyPage.tag, builder: (BuildContext context, GoRouterState state) { - return const PrivacyPolicyPage(); + return PrivacyPolicyPage(); + }, + ), + GoRoute( + path: TermsOfServicePage.tag, + builder: (BuildContext context, GoRouterState state) { + return const TermsOfServicePage(); }, ), if (isSharezonePlusPageEnabledFlag) @@ -69,18 +77,21 @@ class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { - return MaterialApp.router( - routerConfig: _router, - title: 'Sharezone - Vernetzter Schulplaner', - theme: ThemeData( - useMaterial3: false, - primaryColor: SharezoneStyle.primaryColor, - fontFamily: SharezoneStyle.font, - scaffoldBackgroundColor: Colors.white, - pageTransitionsTheme: const PageTransitionsTheme( - builders: { - TargetPlatform.macOS: FadeTransiationsBuilder(), - }, + return ChangeNotifierProvider( + create: (BuildContext context) => ThemeSettings(), + child: MaterialApp.router( + routerConfig: _router, + title: 'Sharezone - Vernetzter Schulplaner', + theme: ThemeData( + useMaterial3: false, + primaryColor: SharezoneStyle.primaryColor, + fontFamily: SharezoneStyle.font, + scaffoldBackgroundColor: Colors.white, + pageTransitionsTheme: const PageTransitionsTheme( + builders: { + TargetPlatform.macOS: FadeTransiationsBuilder(), + }, + ), ), ), ); diff --git a/website/pubspec.lock b/website/pubspec.lock index d8dd465cc..c515110ac 100644 --- a/website/pubspec.lock +++ b/website/pubspec.lock @@ -1,6 +1,14 @@ # Generated by pub # See https://dart.dev/tools/pub/glossary#lockfile packages: + _fe_analyzer_shared: + dependency: transitive + description: + name: _fe_analyzer_shared + sha256: "0b2f2bd91ba804e53a61d757b986f89f1f9eaed5b11e4b2f5a2468d86d6c9fc7" + url: "https://pub.dev" + source: hosted + version: "67.0.0" _flutterfire_internals: dependency: transitive description: @@ -16,6 +24,14 @@ packages: relative: true source: path version: "0.0.1" + analyzer: + dependency: transitive + description: + name: analyzer + sha256: "37577842a27e4338429a1cbc32679d508836510b056f1eedf0c8d20e39c1383d" + url: "https://pub.dev" + source: hosted + version: "6.4.1" args: dependency: transitive description: @@ -24,6 +40,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.4.2" + asn1lib: + dependency: transitive + description: + name: asn1lib + sha256: c9c85fedbe2188b95133cbe960e16f5f448860f7133330e272edbbca5893ddc6 + url: "https://pub.dev" + source: hosted + version: "1.5.2" async: dependency: transitive description: @@ -40,6 +64,14 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.1" + build: + dependency: transitive + description: + name: build + sha256: "80184af8b6cb3e5c1c4ec6d8544d27711700bc3e6d2efad04238c7b5290889f0" + url: "https://pub.dev" + source: hosted + version: "2.4.1" build_context: dependency: transitive description: @@ -47,6 +79,22 @@ packages: relative: true source: path version: "0.0.1" + built_collection: + dependency: transitive + description: + name: built_collection + sha256: "376e3dd27b51ea877c28d525560790aee2e6fbb5f20e2f85d5081027d94e2100" + url: "https://pub.dev" + source: hosted + version: "5.1.1" + built_value: + dependency: transitive + description: + name: built_value + sha256: c7913a9737ee4007efedaffc968c049fd0f3d0e49109e778edc10de9426005cb + url: "https://pub.dev" + source: hosted + version: "8.9.2" characters: dependency: transitive description: @@ -63,6 +111,14 @@ packages: url: "https://pub.dev" source: hosted version: "1.1.1" + code_builder: + dependency: transitive + description: + name: code_builder + sha256: f692079e25e7869c14132d39f223f8eec9830eb76131925143b2129c4bb01b37 + url: "https://pub.dev" + source: hosted + version: "4.10.0" collection: dependency: transitive description: @@ -71,6 +127,21 @@ packages: url: "https://pub.dev" source: hosted version: "1.18.0" + common_domain_models: + dependency: transitive + description: + path: "../lib/common_domain_models" + relative: true + source: path + version: "0.0.0" + convert: + dependency: transitive + description: + name: convert + sha256: "0f08b14755d163f6e2134cb58222dd25ea2a2ee8a195e53983d57c075324d592" + url: "https://pub.dev" + source: hosted + version: "3.1.1" crash_analytics: dependency: transitive description: @@ -78,6 +149,46 @@ packages: relative: true source: path version: "0.0.1" + crypto: + dependency: transitive + description: + name: crypto + sha256: ff625774173754681d66daaf4a448684fb04b78f902da9cb3d308c19cc5e8bab + url: "https://pub.dev" + source: hosted + version: "3.0.3" + dart_style: + dependency: transitive + description: + name: dart_style + sha256: "99e066ce75c89d6b29903d788a7bb9369cf754f7b24bf70bf4b6d6d6b26853b9" + url: "https://pub.dev" + source: hosted + version: "2.3.6" + device_info_plus: + dependency: transitive + description: + name: device_info_plus + sha256: "77f757b789ff68e4eaf9c56d1752309bd9f7ad557cb105b938a7f8eb89e59110" + url: "https://pub.dev" + source: hosted + version: "9.1.2" + device_info_plus_platform_interface: + dependency: transitive + description: + name: device_info_plus_platform_interface + sha256: d3b01d5868b50ae571cd1dc6e502fc94d956b665756180f7b16ead09e836fd64 + url: "https://pub.dev" + source: hosted + version: "7.0.0" + diacritic: + dependency: transitive + description: + name: diacritic + sha256: "96db5db6149cbe4aa3cfcbfd170aca9b7648639be7e48025f9d458517f807fe4" + url: "https://pub.dev" + source: hosted + version: "0.1.5" dio: dependency: "direct main" description: @@ -86,6 +197,22 @@ packages: url: "https://pub.dev" source: hosted version: "5.4.1" + encrypt: + dependency: transitive + description: + name: encrypt + sha256: "62d9aa4670cc2a8798bab89b39fc71b6dfbacf615de6cf5001fb39f7e4a996a2" + url: "https://pub.dev" + source: hosted + version: "5.0.3" + equatable: + dependency: transitive + description: + name: equatable + sha256: c2b87cb7756efdf69892005af546c56c0b5037f54d2a88269b4f347a505e3ca2 + url: "https://pub.dev" + source: hosted + version: "2.0.5" fake_async: dependency: transitive description: @@ -94,6 +221,30 @@ packages: url: "https://pub.dev" source: hosted version: "1.3.1" + fast_immutable_collections: + dependency: transitive + description: + name: fast_immutable_collections + sha256: b910ccdc99bb38a2abbce07c5afb8f81d4e222a892e4d095a548b99814837b0c + url: "https://pub.dev" + source: hosted + version: "9.2.1" + ffi: + dependency: transitive + description: + name: ffi + sha256: "493f37e7df1804778ff3a53bd691d8692ddf69702cf4c1c1096a2e41b4779e21" + url: "https://pub.dev" + source: hosted + version: "2.1.2" + file: + dependency: transitive + description: + name: file + sha256: "5fc22d7c25582e38ad9a8515372cd9a93834027aacf1801cf01164dac0ffa08c" + url: "https://pub.dev" + source: hosted + version: "7.0.0" firebase_analytics: dependency: transitive description: @@ -158,6 +309,14 @@ packages: url: "https://pub.dev" source: hosted version: "3.6.30" + fixnum: + dependency: transitive + description: + name: fixnum + sha256: "25517a4deb0c03aa0f32fd12db525856438902d9c16536311e76cdc57b31d7d1" + url: "https://pub.dev" + source: hosted + version: "1.1.0" flare_flutter: dependency: transitive description: @@ -214,6 +373,14 @@ packages: description: flutter source: sdk version: "0.0.0" + glob: + dependency: transitive + description: + name: glob + sha256: "0e7014b3b7d4dac1ca4d6114f82bf1782ee86745b9b42a92c9289c23d8a0ab63" + url: "https://pub.dev" + source: hosted + version: "2.1.2" go_router: dependency: "direct main" description: @@ -253,6 +420,14 @@ packages: url: "https://pub.dev" source: hosted version: "0.18.1" + js: + dependency: transitive + description: + name: js + sha256: c1b2e9b5ea78c45e1a0788d29606ba27dc5f71f019f32ca5140f61ef071838cf + url: "https://pub.dev" + source: hosted + version: "0.7.1" key_value_store: dependency: transitive description: @@ -284,6 +459,13 @@ packages: url: "https://pub.dev" source: hosted version: "2.0.1" + legal: + dependency: "direct main" + description: + path: "../lib/legal" + relative: true + source: path + version: "1.0.0" lints: dependency: transitive description: @@ -332,6 +514,22 @@ packages: url: "https://pub.dev" source: hosted version: "1.11.0" + mockito: + dependency: transitive + description: + name: mockito + sha256: "6841eed20a7befac0ce07df8116c8b8233ed1f4486a7647c7fc5a02ae6163917" + url: "https://pub.dev" + source: hosted + version: "5.4.4" + nested: + dependency: transitive + description: + name: nested + sha256: "03bac4c528c64c95c722ec99280375a6f2fc708eec17c7b3f07253b626cd2a20" + url: "https://pub.dev" + source: hosted + version: "1.0.0" number_slide_animation: dependency: "direct main" description: @@ -340,6 +538,14 @@ packages: url: "https://pub.dev" source: hosted version: "0.2.1" + package_config: + dependency: transitive + description: + name: package_config + sha256: "1c5b77ccc91e4823a5af61ee74e6b972db1ef98c2ff5a18d3161c982a55448bd" + url: "https://pub.dev" + source: hosted + version: "2.1.0" path: dependency: transitive description: @@ -379,6 +585,38 @@ packages: url: "https://pub.dev" source: hosted version: "2.1.8" + pointycastle: + dependency: transitive + description: + name: pointycastle + sha256: "79fbafed02cfdbe85ef3fd06c7f4bc2cbcba0177e61b765264853d4253b21744" + url: "https://pub.dev" + source: hosted + version: "3.9.0" + provider: + dependency: "direct main" + description: + name: provider + sha256: c8a055ee5ce3fd98d6fc872478b03823ffdb448699c6ebdbbc71d59b596fd48c + url: "https://pub.dev" + source: hosted + version: "6.1.2" + pub_semver: + dependency: transitive + description: + name: pub_semver + sha256: "40d3ab1bbd474c4c2328c91e3a7df8c6dd629b79ece4c4bd04bee496a224fb0c" + url: "https://pub.dev" + source: hosted + version: "2.1.4" + rsa_pkcs: + dependency: transitive + description: + name: rsa_pkcs + sha256: "6e1e03563d2cbd9758d8a562f738b759763d464fd65d32da132153230a0c0395" + url: "https://pub.dev" + source: hosted + version: "2.1.0" rxdart: dependency: transitive description: @@ -409,6 +647,13 @@ packages: relative: true source: path version: "0.0.1" + sharezone_utils: + dependency: transitive + description: + path: "../lib/sharezone_utils" + relative: true + source: path + version: "0.0.1" sharezone_widgets: dependency: "direct main" description: @@ -429,6 +674,14 @@ packages: description: flutter source: sdk version: "0.0.99" + source_gen: + dependency: transitive + description: + name: source_gen + sha256: "14658ba5f669685cd3d63701d01b31ea748310f7ab854e471962670abcf57832" + url: "https://pub.dev" + source: hosted + version: "1.5.0" source_span: dependency: transitive description: @@ -549,6 +802,13 @@ packages: url: "https://pub.dev" source: hosted version: "3.1.1" + util: + dependency: transitive + description: + path: "../lib/util" + relative: true + source: path + version: "0.0.1" vector_graphics: dependency: transitive description: @@ -589,6 +849,14 @@ packages: url: "https://pub.dev" source: hosted version: "13.0.0" + watcher: + dependency: transitive + description: + name: watcher + sha256: "3d2ad6751b3c16cf07c7fca317a1413b3f26530319181b37e3b9039b84fc01d8" + url: "https://pub.dev" + source: hosted + version: "1.1.0" web: dependency: transitive description: @@ -597,6 +865,22 @@ packages: url: "https://pub.dev" source: hosted version: "0.5.1" + win32: + dependency: transitive + description: + name: win32 + sha256: "0a989dc7ca2bb51eac91e8fd00851297cfffd641aa7538b165c62637ca0eaa4a" + url: "https://pub.dev" + source: hosted + version: "5.4.0" + win32_registry: + dependency: transitive + description: + name: win32_registry + sha256: "10589e0d7f4e053f2c61023a31c9ce01146656a70b7b7f0828c0b46d7da2a9bb" + url: "https://pub.dev" + source: hosted + version: "1.1.3" xml: dependency: transitive description: @@ -605,6 +889,14 @@ packages: url: "https://pub.dev" source: hosted version: "6.5.0" + yaml: + dependency: transitive + description: + name: yaml + sha256: "75769501ea3489fca56601ff33454fe45507ea3bfb014161abc3b43ae25989d5" + url: "https://pub.dev" + source: hosted + version: "3.1.2" sdks: dart: ">=3.3.0 <4.0.0" flutter: ">=3.19.0" diff --git a/website/pubspec.yaml b/website/pubspec.yaml index 44c66efde..112dd9c48 100644 --- a/website/pubspec.yaml +++ b/website/pubspec.yaml @@ -29,6 +29,9 @@ dependencies: flutter_svg: ^2.0.9 go_router: ^12.1.3 number_slide_animation: ^0.2.1 + provider: ^6.0.3 + legal: + path: ../lib/legal sharezone_plus_page_ui: path: ../lib/sharezone_plus/sharezone_plus_page_ui sharezone_widgets: