location image search and population for new session
This commit is contained in:
@ -24,9 +24,9 @@ class _SessionCardState extends State<SessionCard> {
|
||||
|
||||
initializeDateFormatting('en');
|
||||
|
||||
return FutureBuilder<List<MediaItem>>(
|
||||
future: MediaItemsDao(Provider.of<AppDatabase>(context))
|
||||
.fromSession(session),
|
||||
return StreamBuilder<List<MediaItem>>(
|
||||
stream: MediaItemsDao(Provider.of<AppDatabase>(context))
|
||||
.watchSessionMediaItems(session.id),
|
||||
builder: (context, snapshot) {
|
||||
if (snapshot.hasData) {
|
||||
List<MediaItem> mediaItems = snapshot.data!;
|
||||
|
@ -1,9 +1,12 @@
|
||||
import 'dart:async';
|
||||
import 'dart:math';
|
||||
|
||||
import 'package:drift/drift.dart' hide Column;
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:intl/intl.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
import 'package:sendtrain/daos/media_items_dao.dart';
|
||||
import 'package:sendtrain/daos/object_media_items_dao.dart';
|
||||
import 'package:sendtrain/daos/sessions_dao.dart';
|
||||
import 'package:sendtrain/database/database.dart';
|
||||
import 'package:sendtrain/widgets/builders/dialogs.dart';
|
||||
@ -21,6 +24,12 @@ class SessionCreator extends StatefulWidget {
|
||||
State<SessionCreator> createState() => _SessionCreatorState();
|
||||
}
|
||||
|
||||
// used to pass the result of the found image back to current context...
|
||||
class SessionPayload {
|
||||
String? photoUri;
|
||||
String? address;
|
||||
}
|
||||
|
||||
class _SessionCreatorState extends State<SessionCreator> {
|
||||
final GlobalKey<FormState> _formKey = GlobalKey<FormState>();
|
||||
|
||||
@ -33,14 +42,48 @@ class _SessionCreatorState extends State<SessionCreator> {
|
||||
'media': TextEditingController(),
|
||||
};
|
||||
|
||||
Future createSession(context) {
|
||||
return SessionsDao(Provider.of<AppDatabase>(context, listen: false))
|
||||
.createOrUpdate(SessionsCompanion(
|
||||
title: Value(sessionCreateController['name']!.text),
|
||||
content: Value(sessionCreateController['content']!.text),
|
||||
status: Value(SessionStatus.pending),
|
||||
date: Value(DateTime.parse(sessionCreateController['date']!.text)),
|
||||
address: Value(sessionCreateController['address']!.text)));
|
||||
final SessionPayload sessionPayload = SessionPayload();
|
||||
|
||||
Future createSession(context) async {
|
||||
Map<Symbol, Value> payload = {
|
||||
Symbol('title'): Value<String>(sessionCreateController['name']!.text),
|
||||
Symbol('content'):
|
||||
Value<String>(sessionCreateController['content']!.text),
|
||||
Symbol('status'): Value<SessionStatus>(SessionStatus.pending),
|
||||
Symbol('date'): Value<DateTime>(
|
||||
DateTime.parse(sessionCreateController['date']!.text)),
|
||||
};
|
||||
|
||||
// optional params
|
||||
if (sessionCreateController['address']!.text.isNotEmpty) {
|
||||
payload[Symbol('address')] =
|
||||
Value<String>(sessionCreateController['address']!.text);
|
||||
}
|
||||
|
||||
return await SessionsDao(Provider.of<AppDatabase>(context, listen: false))
|
||||
.createOrUpdate(Function.apply(SessionsCompanion.new, [], payload));
|
||||
}
|
||||
|
||||
Future createSessionMedia(context, sessionId) async {
|
||||
if (sessionPayload.photoUri != null) {
|
||||
MediaItemsCompanion mediaItem = MediaItemsCompanion(
|
||||
title: Value('Location Image'),
|
||||
description: Value(sessionPayload.address!),
|
||||
reference: Value(sessionPayload.photoUri!),
|
||||
type: Value(MediaType.image));
|
||||
|
||||
return await MediaItemsDao(
|
||||
Provider.of<AppDatabase>(context, listen: false))
|
||||
.createOrUpdate(mediaItem).then((id) async {
|
||||
ObjectMediaItemsCompanion omi = ObjectMediaItemsCompanion(
|
||||
objectId: Value(sessionId),
|
||||
objectType: Value(ObjectType.sessions),
|
||||
mediaId: Value(id),
|
||||
);
|
||||
|
||||
await ObjectMediaItemsDao(Provider.of<AppDatabase>(context, listen: false)).createOrUpdate(omi);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
@ -113,19 +156,23 @@ class _SessionCreatorState extends State<SessionCreator> {
|
||||
// }
|
||||
// })),
|
||||
FormSearchInput(
|
||||
sessionController: sessionCreateController['address']!),
|
||||
sessionController: sessionCreateController['address']!,
|
||||
optionalPayload: sessionPayload),
|
||||
Row(mainAxisAlignment: MainAxisAlignment.end, children: [
|
||||
Padding(
|
||||
padding: EdgeInsets.only(top: 10),
|
||||
child: FilledButton(
|
||||
onPressed: () => {
|
||||
onPressed: () async => {
|
||||
if (_formKey.currentState!.validate())
|
||||
{
|
||||
createSession(_formKey.currentContext)
|
||||
.then((id) => {
|
||||
await createSession(_formKey.currentContext)
|
||||
.then((id) async => {
|
||||
await createSessionMedia(
|
||||
_formKey.currentContext, id),
|
||||
SessionsDao(db).find(id).then(
|
||||
(session) => showGenericDialog(
|
||||
SessionView(session: session),
|
||||
SessionView(
|
||||
session: session),
|
||||
_formKey
|
||||
.currentContext!)),
|
||||
Navigator.pop(
|
||||
|
Reference in New Issue
Block a user