diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..fc57b2b --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +wien_talks/wien_talks_flutter/pubspec.lock diff --git a/wien_talks/wien_talks_client/.idea/.gitignore b/wien_talks/wien_talks_client/.idea/.gitignore new file mode 100644 index 0000000..26d3352 --- /dev/null +++ b/wien_talks/wien_talks_client/.idea/.gitignore @@ -0,0 +1,3 @@ +# Default ignored files +/shelf/ +/workspace.xml diff --git a/wien_talks/wien_talks_client/.idea/caches/deviceStreaming.xml b/wien_talks/wien_talks_client/.idea/caches/deviceStreaming.xml new file mode 100644 index 0000000..9aaec77 --- /dev/null +++ b/wien_talks/wien_talks_client/.idea/caches/deviceStreaming.xml @@ -0,0 +1,835 @@ + + + + + + \ No newline at end of file diff --git a/wien_talks/wien_talks_client/.idea/misc.xml b/wien_talks/wien_talks_client/.idea/misc.xml new file mode 100644 index 0000000..1945ce5 --- /dev/null +++ b/wien_talks/wien_talks_client/.idea/misc.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/wien_talks/wien_talks_client/.idea/modules.xml b/wien_talks/wien_talks_client/.idea/modules.xml new file mode 100644 index 0000000..317fd21 --- /dev/null +++ b/wien_talks/wien_talks_client/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/wien_talks/wien_talks_client/.idea/vcs.xml b/wien_talks/wien_talks_client/.idea/vcs.xml new file mode 100644 index 0000000..b2bdec2 --- /dev/null +++ b/wien_talks/wien_talks_client/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/wien_talks/wien_talks_client/.idea/wien_talks_client.iml b/wien_talks/wien_talks_client/.idea/wien_talks_client.iml new file mode 100644 index 0000000..0cf94bd --- /dev/null +++ b/wien_talks/wien_talks_client/.idea/wien_talks_client.iml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/wien_talks/wien_talks_client/pubspec.yaml b/wien_talks/wien_talks_client/pubspec.yaml index a438c4f..453c07a 100644 --- a/wien_talks/wien_talks_client/pubspec.yaml +++ b/wien_talks/wien_talks_client/pubspec.yaml @@ -5,5 +5,6 @@ environment: sdk: '>=3.5.0 <4.0.0' dependencies: + serverpod_client: 2.9.1 serverpod_auth_server: ^2.9.1 diff --git a/wien_talks/wien_talks_flutter/android/app/src/main/AndroidManifest.xml b/wien_talks/wien_talks_flutter/android/app/src/main/AndroidManifest.xml index 8d61822..fd81ced 100644 --- a/wien_talks/wien_talks_flutter/android/app/src/main/AndroidManifest.xml +++ b/wien_talks/wien_talks_flutter/android/app/src/main/AndroidManifest.xml @@ -42,4 +42,7 @@ + + + diff --git a/wien_talks/wien_talks_flutter/lib/create_event_screen.dart b/wien_talks/wien_talks_flutter/lib/create_event_screen.dart new file mode 100644 index 0000000..bc50467 --- /dev/null +++ b/wien_talks/wien_talks_flutter/lib/create_event_screen.dart @@ -0,0 +1,20 @@ +import 'package:flutter/cupertino.dart'; +import 'package:wien_talks_flutter/get_location_widget.dart'; +import 'package:wien_talks_flutter/news_input_form.dart'; +import 'package:wien_talks_flutter/widgets/screen_widget.dart'; + +class CreateEventScreen extends StatelessWidget { + const CreateEventScreen({super.key}); + + @override + Widget build(BuildContext context) { + return ScreenWidget( + child: Column( + children: [ + Text("hello"), + GetLocationWidget(), + NewsInputForm(onSubmit: (newsEventModel) {}), + ], + )); + } +} diff --git a/wien_talks/wien_talks_flutter/lib/get_location_widget.dart b/wien_talks/wien_talks_flutter/lib/get_location_widget.dart new file mode 100644 index 0000000..4fad495 --- /dev/null +++ b/wien_talks/wien_talks_flutter/lib/get_location_widget.dart @@ -0,0 +1,38 @@ +import 'package:flutter/material.dart'; +import 'package:location/location.dart'; +import 'package:wien_talks_flutter/location_mgr.dart'; + +class GetLocationWidget extends StatelessWidget { + const GetLocationWidget({super.key}); + + @override + Widget build(BuildContext context) { + return Column( + children: [ + FutureBuilder( + future: LocationMgr().startup(), + builder: (BuildContext context, AsyncSnapshot snapshot) { + switch (snapshot.connectionState) { + case ConnectionState.waiting: + return CircularProgressIndicator(); + case ConnectionState.done: + { + if (snapshot.hasData) { + // Error occured + return Text(snapshot.data.toString()); + } else { + return Text("No data -> OK"); + } + } + default: + if (snapshot.hasError) { + return Text('Error: ${snapshot.error}'); + } + return Text("OK"); + } + }), + StreamBuilder(stream: LocationMgr().stream, builder: (BuildContext context, AsyncSnapshot snapshot) => Text(snapshot.data.toString())), + ], + ); + } +} diff --git a/wien_talks/wien_talks_flutter/lib/go_router.dart b/wien_talks/wien_talks_flutter/lib/go_router.dart new file mode 100644 index 0000000..40fb9e9 --- /dev/null +++ b/wien_talks/wien_talks_flutter/lib/go_router.dart @@ -0,0 +1,13 @@ +import 'package:go_router/go_router.dart'; +import 'package:wien_talks_flutter/create_event_screen.dart'; +import 'package:wien_talks_flutter/news_screen.dart'; + +final router = GoRouter( + routes: [ + GoRoute( + path: '/', + builder: (context, state) => NewsScreen(), + ), + GoRoute(path: '/create_event', name: 'create_event', builder: (context, state) => CreateEventScreen()), + ], +); diff --git a/wien_talks/wien_talks_flutter/lib/location_mgr.dart b/wien_talks/wien_talks_flutter/lib/location_mgr.dart new file mode 100644 index 0000000..1ab24b9 --- /dev/null +++ b/wien_talks/wien_talks_flutter/lib/location_mgr.dart @@ -0,0 +1,59 @@ +import 'dart:async'; + +import 'package:location/location.dart'; +import 'package:rxdart/rxdart.dart'; + +class LocationMgr { + Location location = Location(); + + bool serviceEnabled = false; + + PermissionStatus permissionGranted = PermissionStatus.denied; + + LocationData? _lastLocationData; + + static LocationMgr? _instance; + + final Subject _subject = PublishSubject(); + + StreamSubscription? _subscription; + + factory LocationMgr() { + _instance ??= LocationMgr._(); + return _instance!; + } + + LocationMgr._(); + + Future startup() async { + serviceEnabled = await location.serviceEnabled(); + if (!serviceEnabled) { + serviceEnabled = await location.requestService(); + if (!serviceEnabled) { + return "Service is not enabled"; + } + } + + permissionGranted = await location.hasPermission(); + if (permissionGranted == PermissionStatus.denied) { + permissionGranted = await location.requestPermission(); + if (permissionGranted != PermissionStatus.granted) { + return "No permissions granted"; + } + } + _subscription = location.onLocationChanged.listen((LocationData currentLocation) { + _lastLocationData = currentLocation; + _subject.add(currentLocation); + }); + return null; + } + + void shutdown() { + _subscription?.cancel(); + _subscription = null; + } + + Stream get stream => _subject.stream; + + LocationData? get lastLocation => _lastLocationData; +} diff --git a/wien_talks/wien_talks_flutter/lib/main.dart b/wien_talks/wien_talks_flutter/lib/main.dart index 69c728d..b1326db 100644 --- a/wien_talks/wien_talks_flutter/lib/main.dart +++ b/wien_talks/wien_talks_flutter/lib/main.dart @@ -1,6 +1,7 @@ -import 'package:wien_talks_client/wien_talks_client.dart'; import 'package:flutter/material.dart'; import 'package:serverpod_flutter/serverpod_flutter.dart'; +import 'package:wien_talks_client/wien_talks_client.dart'; +import 'package:wien_talks_flutter/go_router.dart'; /// Sets up a global client object that can be used to talk to the server from /// anywhere in our app. The client is generated from your server code @@ -20,11 +21,9 @@ void main() { // You can set the variable when running or building your app like this: // E.g. `flutter run --dart-define=SERVER_URL=https://api.example.com/` const serverUrlFromEnv = String.fromEnvironment('SERVER_URL'); - final serverUrl = - serverUrlFromEnv.isEmpty ? 'http://$localhost:8080/' : serverUrlFromEnv; + final serverUrl = serverUrlFromEnv.isEmpty ? 'http://$localhost:8080/' : serverUrlFromEnv; - client = Client(serverUrl) - ..connectivityMonitor = FlutterConnectivityMonitor(); + client = Client(serverUrl)..connectivityMonitor = FlutterConnectivityMonitor(); runApp(const MyApp()); } @@ -34,10 +33,12 @@ class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { - return MaterialApp( + return MaterialApp.router( title: 'Serverpod Demo', theme: ThemeData(primarySwatch: Colors.blue), - home: const MyHomePage(title: 'Serverpod Example'), + routerConfig: router, + //home: NewsScreen(), + //home: const MyHomePage(title: 'Serverpod Example'), ); } } diff --git a/wien_talks/wien_talks_flutter/lib/models/news_event_model.dart b/wien_talks/wien_talks_flutter/lib/models/news_event_model.dart new file mode 100644 index 0000000..d1fce39 --- /dev/null +++ b/wien_talks/wien_talks_flutter/lib/models/news_event_model.dart @@ -0,0 +1,34 @@ +class NewsEventModel { + final String content; + + final DateTime timestamp; + + final double latitude; + + final double longitude; + + NewsEventModel({ + required this.content, + required this.timestamp, + required this.latitude, + required this.longitude, + }); + +// Convert NewsData to a Map + Map toJson() { + return { + 'content': content, + 'timestamp': timestamp.toIso8601String(), + }; + } + +// Create NewsData from a Map + factory NewsEventModel.fromJson(Map json) { + return NewsEventModel( + content: json['content'] as String, + timestamp: DateTime.parse(json['timestamp'] as String), + latitude: json['latitude'] as double, + longitude: json['longitude'] as double, + ); + } +} diff --git a/wien_talks/wien_talks_flutter/lib/news_input_form.dart b/wien_talks/wien_talks_flutter/lib/news_input_form.dart new file mode 100644 index 0000000..0a99302 --- /dev/null +++ b/wien_talks/wien_talks_flutter/lib/news_input_form.dart @@ -0,0 +1,71 @@ +import 'package:flutter/material.dart'; +import 'package:wien_talks_flutter/models/news_event_model.dart'; + +class NewsInputForm extends StatefulWidget { + final Function(NewsEventModel) onSubmit; + + const NewsInputForm({Key? key, required this.onSubmit}) : super(key: key); + + @override + _NewsInputFormState createState() => _NewsInputFormState(); +} + +class _NewsInputFormState extends State { + final _formKey = GlobalKey(); + final TextEditingController _newsController = TextEditingController(); + + @override + void dispose() { + _newsController.dispose(); + super.dispose(); + } + + void _submitForm() { + if (_formKey.currentState!.validate()) { + final newsData = NewsEventModel( + content: _newsController.text.trim(), + timestamp: DateTime.now(), + latitude: 0.0, + longitude: 0.0, + ); + widget.onSubmit(newsData); + _newsController.clear(); + } + } + + @override + Widget build(BuildContext context) { + return Padding( + padding: const EdgeInsets.all(16.0), + child: Form( + key: _formKey, + child: Column( + crossAxisAlignment: CrossAxisAlignment.stretch, + mainAxisSize: MainAxisSize.min, + children: [ + TextFormField( + controller: _newsController, + maxLines: 4, + decoration: const InputDecoration( + labelText: 'News', + hintText: 'Enter your news here...', + border: OutlineInputBorder(), + ), + validator: (value) { + if (value == null || value.trim().isEmpty) { + return 'Please enter some text'; + } + return null; + }, + ), + const SizedBox(height: 16.0), + ElevatedButton( + onPressed: _submitForm, + child: const Text('Submit News'), + ), + ], + ), + ), + ); + } +} diff --git a/wien_talks/wien_talks_flutter/lib/news_screen.dart b/wien_talks/wien_talks_flutter/lib/news_screen.dart new file mode 100644 index 0000000..5cdd782 --- /dev/null +++ b/wien_talks/wien_talks_flutter/lib/news_screen.dart @@ -0,0 +1,33 @@ +import 'package:flutter/material.dart'; +import 'package:go_router/go_router.dart'; +import 'package:wien_talks_flutter/widgets/heading_text.dart'; +import 'package:wien_talks_flutter/widgets/screen_widget.dart'; + +class NewsScreen extends StatelessWidget { + const NewsScreen({ + super.key, + }); + + @override + Widget build(BuildContext context) { + return ScreenWidget( + child: SingleChildScrollView( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + HeadingText(text: "Latest news"), + ...[Text("News 1"), Text("News 2")], + SizedBox( + height: 30, + ), + OutlinedButton( + onPressed: () { + context.pushNamed("create_event"); + }, + child: Text("Submit your own event")), + ], + ), + ), + ); + } +} diff --git a/wien_talks/wien_talks_flutter/lib/widgets/heading_text.dart b/wien_talks/wien_talks_flutter/lib/widgets/heading_text.dart new file mode 100644 index 0000000..9aeb9f8 --- /dev/null +++ b/wien_talks/wien_talks_flutter/lib/widgets/heading_text.dart @@ -0,0 +1,18 @@ +import 'package:flutter/material.dart'; + +class HeadingText extends StatelessWidget { + final String text; + + const HeadingText({super.key, required this.text}); + + @override + Widget build(BuildContext context) { + return Padding( + padding: const EdgeInsets.only(top: 20, bottom: 10), + child: Text( + text, + style: Theme.of(context).textTheme.headlineLarge, + ), + ); + } +} diff --git a/wien_talks/wien_talks_flutter/lib/widgets/screen_widget.dart b/wien_talks/wien_talks_flutter/lib/widgets/screen_widget.dart new file mode 100644 index 0000000..26638d4 --- /dev/null +++ b/wien_talks/wien_talks_flutter/lib/widgets/screen_widget.dart @@ -0,0 +1,21 @@ +import 'package:flutter/material.dart'; + +class ScreenWidget extends StatelessWidget { + final Widget child; + + const ScreenWidget({super.key, required this.child}); + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar( + title: const Text('News'), + ), + body: SafeArea( + child: Padding( + padding: const EdgeInsets.all(8.0), + child: child, + )), + ); + } +} diff --git a/wien_talks/wien_talks_flutter/macos/Flutter/GeneratedPluginRegistrant.swift b/wien_talks/wien_talks_flutter/macos/Flutter/GeneratedPluginRegistrant.swift index ad535f5..67b21c7 100644 --- a/wien_talks/wien_talks_flutter/macos/Flutter/GeneratedPluginRegistrant.swift +++ b/wien_talks/wien_talks_flutter/macos/Flutter/GeneratedPluginRegistrant.swift @@ -6,7 +6,9 @@ import FlutterMacOS import Foundation import connectivity_plus +import location func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { ConnectivityPlusPlugin.register(with: registry.registrar(forPlugin: "ConnectivityPlusPlugin")) + LocationPlugin.register(with: registry.registrar(forPlugin: "LocationPlugin")) } diff --git a/wien_talks/wien_talks_flutter/pubspec.lock b/wien_talks/wien_talks_flutter/pubspec.lock deleted file mode 100644 index f06f119..0000000 --- a/wien_talks/wien_talks_flutter/pubspec.lock +++ /dev/null @@ -1,409 +0,0 @@ -# Generated by pub -# See https://dart.dev/tools/pub/glossary#lockfile -packages: - args: - dependency: transitive - description: - name: args - sha256: d0481093c50b1da8910eb0bb301626d4d8eb7284aa739614d2b394ee09e3ea04 - url: "https://pub.dev" - source: hosted - version: "2.7.0" - async: - dependency: transitive - description: - name: async - sha256: "758e6d74e971c3e5aceb4110bfd6698efc7f501675bcfe0c775459a8140750eb" - url: "https://pub.dev" - source: hosted - version: "2.13.0" - boolean_selector: - dependency: transitive - description: - name: boolean_selector - sha256: "8aab1771e1243a5063b8b0ff68042d67334e3feab9e95b9490f9a6ebf73b42ea" - url: "https://pub.dev" - source: hosted - version: "2.1.2" - characters: - dependency: transitive - description: - name: characters - sha256: f71061c654a3380576a52b451dd5532377954cf9dbd272a78fc8479606670803 - url: "https://pub.dev" - source: hosted - version: "1.4.0" - clock: - dependency: transitive - description: - name: clock - sha256: fddb70d9b5277016c77a80201021d40a2247104d9f4aa7bab7157b7e3f05b84b - url: "https://pub.dev" - source: hosted - version: "1.1.2" - collection: - dependency: transitive - description: - name: collection - sha256: "2f5709ae4d3d59dd8f7cd309b4e023046b57d8a6c82130785d2b0e5868084e76" - url: "https://pub.dev" - source: hosted - version: "1.19.1" - connectivity_plus: - dependency: transitive - description: - name: connectivity_plus - sha256: b5e72753cf63becce2c61fd04dfe0f1c430cc5278b53a1342dc5ad839eab29ec - url: "https://pub.dev" - source: hosted - version: "6.1.5" - connectivity_plus_platform_interface: - dependency: transitive - description: - name: connectivity_plus_platform_interface - sha256: "42657c1715d48b167930d5f34d00222ac100475f73d10162ddf43e714932f204" - url: "https://pub.dev" - source: hosted - version: "2.0.1" - crypto: - dependency: transitive - description: - name: crypto - sha256: "1e445881f28f22d6140f181e07737b22f1e099a5e1ff94b0af2f9e4a463f4855" - url: "https://pub.dev" - source: hosted - version: "3.0.6" - cupertino_icons: - dependency: "direct main" - description: - name: cupertino_icons - sha256: ba631d1c7f7bef6b729a622b7b752645a2d076dba9976925b8f25725a30e1ee6 - url: "https://pub.dev" - source: hosted - version: "1.0.8" - dbus: - dependency: transitive - description: - name: dbus - sha256: "79e0c23480ff85dc68de79e2cd6334add97e48f7f4865d17686dd6ea81a47e8c" - url: "https://pub.dev" - source: hosted - version: "0.7.11" - fake_async: - dependency: transitive - description: - name: fake_async - sha256: "5368f224a74523e8d2e7399ea1638b37aecfca824a3cc4dfdf77bf1fa905ac44" - url: "https://pub.dev" - source: hosted - version: "1.3.3" - ffi: - dependency: transitive - description: - name: ffi - sha256: "289279317b4b16eb2bb7e271abccd4bf84ec9bdcbe999e278a94b804f5630418" - url: "https://pub.dev" - source: hosted - version: "2.1.4" - fixnum: - dependency: transitive - description: - name: fixnum - sha256: b6dc7065e46c974bc7c5f143080a6764ec7a4be6da1285ececdc37be96de53be - url: "https://pub.dev" - source: hosted - version: "1.1.1" - flutter: - dependency: "direct main" - description: flutter - source: sdk - version: "0.0.0" - flutter_lints: - dependency: "direct dev" - description: - name: flutter_lints - sha256: "3105dc8492f6183fb076ccf1f351ac3d60564bff92e20bfc4af9cc1651f4e7e1" - url: "https://pub.dev" - source: hosted - version: "6.0.0" - flutter_test: - dependency: "direct dev" - description: flutter - source: sdk - version: "0.0.0" - flutter_web_plugins: - dependency: transitive - description: flutter - source: sdk - version: "0.0.0" - http: - dependency: transitive - description: - name: http - sha256: bb2ce4590bc2667c96f318d68cac1b5a7987ec819351d32b1c987239a815e007 - url: "https://pub.dev" - source: hosted - version: "1.5.0" - http_parser: - dependency: transitive - description: - name: http_parser - sha256: "178d74305e7866013777bab2c3d8726205dc5a4dd935297175b19a23a2e66571" - url: "https://pub.dev" - source: hosted - version: "4.1.2" - leak_tracker: - dependency: transitive - description: - name: leak_tracker - sha256: "6bb818ecbdffe216e81182c2f0714a2e62b593f4a4f13098713ff1685dfb6ab0" - url: "https://pub.dev" - source: hosted - version: "10.0.9" - leak_tracker_flutter_testing: - dependency: transitive - description: - name: leak_tracker_flutter_testing - sha256: f8b613e7e6a13ec79cfdc0e97638fddb3ab848452eff057653abd3edba760573 - url: "https://pub.dev" - source: hosted - version: "3.0.9" - leak_tracker_testing: - dependency: transitive - description: - name: leak_tracker_testing - sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3" - url: "https://pub.dev" - source: hosted - version: "3.0.1" - lints: - dependency: transitive - description: - name: lints - sha256: a5e2b223cb7c9c8efdc663ef484fdd95bb243bff242ef5b13e26883547fce9a0 - url: "https://pub.dev" - source: hosted - version: "6.0.0" - matcher: - dependency: transitive - description: - name: matcher - sha256: dc58c723c3c24bf8d3e2d3ad3f2f9d7bd9cf43ec6feaa64181775e60190153f2 - url: "https://pub.dev" - source: hosted - version: "0.12.17" - material_color_utilities: - dependency: transitive - description: - name: material_color_utilities - sha256: f7142bb1154231d7ea5f96bc7bde4bda2a0945d2806bb11670e30b850d56bdec - url: "https://pub.dev" - source: hosted - version: "0.11.1" - meta: - dependency: transitive - description: - name: meta - sha256: e3641ec5d63ebf0d9b41bd43201a66e3fc79a65db5f61fc181f04cd27aab950c - url: "https://pub.dev" - source: hosted - version: "1.16.0" - nm: - dependency: transitive - description: - name: nm - sha256: "2c9aae4127bdc8993206464fcc063611e0e36e72018696cd9631023a31b24254" - url: "https://pub.dev" - source: hosted - version: "0.5.0" - path: - dependency: transitive - description: - name: path - sha256: "75cca69d1490965be98c73ceaea117e8a04dd21217b37b292c9ddbec0d955bc5" - url: "https://pub.dev" - source: hosted - version: "1.9.1" - petitparser: - dependency: transitive - description: - name: petitparser - sha256: "07c8f0b1913bcde1ff0d26e57ace2f3012ccbf2b204e070290dad3bb22797646" - url: "https://pub.dev" - source: hosted - version: "6.1.0" - plugin_platform_interface: - dependency: transitive - description: - name: plugin_platform_interface - sha256: "4820fbfdb9478b1ebae27888254d445073732dae3d6ea81f0b7e06d5dedc3f02" - url: "https://pub.dev" - source: hosted - version: "2.1.8" - serverpod_client: - dependency: transitive - description: - name: serverpod_client - sha256: "04cb6d36730c8c24c067cde6e41551ad2dd7ae3725bbaa2756e82d2f5b345f54" - url: "https://pub.dev" - source: hosted - version: "2.9.1" - serverpod_flutter: - dependency: "direct main" - description: - name: serverpod_flutter - sha256: "1d9c2cb511581a7fdc1fc81ac5475ef75c0cf0a1c9181308e956db4818759bb7" - url: "https://pub.dev" - source: hosted - version: "2.9.1" - serverpod_serialization: - dependency: transitive - description: - name: serverpod_serialization - sha256: c301a5e45610c062e51e1ba580f51f3257c3404ce2dd2f7e216dccbd93869502 - url: "https://pub.dev" - source: hosted - version: "2.9.1" - sky_engine: - dependency: transitive - description: flutter - source: sdk - version: "0.0.0" - source_span: - dependency: transitive - description: - name: source_span - sha256: "254ee5351d6cb365c859e20ee823c3bb479bf4a293c22d17a9f1bf144ce86f7c" - url: "https://pub.dev" - source: hosted - version: "1.10.1" - sprintf: - dependency: transitive - description: - name: sprintf - sha256: "1fc9ffe69d4df602376b52949af107d8f5703b77cda567c4d7d86a0693120f23" - url: "https://pub.dev" - source: hosted - version: "7.0.0" - stack_trace: - dependency: transitive - description: - name: stack_trace - sha256: "8b27215b45d22309b5cddda1aa2b19bdfec9df0e765f2de506401c071d38d1b1" - url: "https://pub.dev" - source: hosted - version: "1.12.1" - stream_channel: - dependency: transitive - description: - name: stream_channel - sha256: "969e04c80b8bcdf826f8f16579c7b14d780458bd97f56d107d3950fdbeef059d" - url: "https://pub.dev" - source: hosted - version: "2.1.4" - string_scanner: - dependency: transitive - description: - name: string_scanner - sha256: "921cd31725b72fe181906c6a94d987c78e3b98c2e205b397ea399d4054872b43" - url: "https://pub.dev" - source: hosted - version: "1.4.1" - term_glyph: - dependency: transitive - description: - name: term_glyph - sha256: "7f554798625ea768a7518313e58f83891c7f5024f88e46e7182a4558850a4b8e" - url: "https://pub.dev" - source: hosted - version: "1.2.2" - test_api: - dependency: transitive - description: - name: test_api - sha256: fb31f383e2ee25fbbfe06b40fe21e1e458d14080e3c67e7ba0acfde4df4e0bbd - url: "https://pub.dev" - source: hosted - version: "0.7.4" - typed_data: - dependency: transitive - description: - name: typed_data - sha256: f9049c039ebfeb4cf7a7104a675823cd72dba8297f264b6637062516699fa006 - url: "https://pub.dev" - source: hosted - version: "1.4.0" - uuid: - dependency: transitive - description: - name: uuid - sha256: a5be9ef6618a7ac1e964353ef476418026db906c4facdedaa299b7a2e71690ff - url: "https://pub.dev" - source: hosted - version: "4.5.1" - vector_math: - dependency: transitive - description: - name: vector_math - sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803" - url: "https://pub.dev" - source: hosted - version: "2.1.4" - vm_service: - dependency: transitive - description: - name: vm_service - sha256: ddfa8d30d89985b96407efce8acbdd124701f96741f2d981ca860662f1c0dc02 - url: "https://pub.dev" - source: hosted - version: "15.0.0" - web: - dependency: transitive - description: - name: web - sha256: "868d88a33d8a87b18ffc05f9f030ba328ffefba92d6c127917a2ba740f9cfe4a" - url: "https://pub.dev" - source: hosted - version: "1.1.1" - web_socket: - dependency: transitive - description: - name: web_socket - sha256: "34d64019aa8e36bf9842ac014bb5d2f5586ca73df5e4d9bf5c936975cae6982c" - url: "https://pub.dev" - source: hosted - version: "1.0.1" - web_socket_channel: - dependency: transitive - description: - name: web_socket_channel - sha256: d645757fb0f4773d602444000a8131ff5d48c9e47adfe9772652dd1a4f2d45c8 - url: "https://pub.dev" - source: hosted - version: "3.0.3" - wien_talks_client: - dependency: "direct main" - description: - path: "../wien_talks_client" - relative: true - source: path - version: "0.0.0" - xml: - dependency: transitive - description: - name: xml - sha256: b015a8ad1c488f66851d762d3090a21c600e479dc75e68328c52774040cf9226 - url: "https://pub.dev" - source: hosted - version: "6.5.0" - yaml: - dependency: transitive - description: - name: yaml - sha256: b9da305ac7c39faa3f030eccd175340f968459dae4af175130b3fc47e40d76ce - url: "https://pub.dev" - source: hosted - version: "3.1.3" -sdks: - dart: ">=3.8.0 <4.0.0" - flutter: ">=3.24.0" diff --git a/wien_talks/wien_talks_flutter/pubspec.yaml b/wien_talks/wien_talks_flutter/pubspec.yaml index 9e35577..80b3751 100644 --- a/wien_talks/wien_talks_flutter/pubspec.yaml +++ b/wien_talks/wien_talks_flutter/pubspec.yaml @@ -24,16 +24,23 @@ environment: dependencies: flutter: sdk: flutter + + go_router: ^16.1.0 + + location: ^8.0.1 + + rxdart: ^0.28.0 + serverpod_flutter: 2.9.1 + wien_talks_client: path: ../wien_talks_client serverpod_auth_shared_flutter: ^2.9.1 - # The following adds the Cupertino Icons font to your application. # Use with the CupertinoIcons class for iOS style icons. - cupertino_icons: ^1.0.5 + cupertino_icons: ^1.0.8 dev_dependencies: flutter_lints: '>=3.0.0 <7.0.0'