Erweiterungen
This commit is contained in:
1 parent
ba1f7d5440
commit
bb3dc9e856
28 files changed
+1672
-1291
No files matched your search
@@ -1,6 +1,7 @@
|
||||
import 'dart:convert';
|
||||
import 'package:objectbox/objectbox.dart';
|
||||
import 'package:stadtbote/model/job_tour.dart';
|
||||
import 'package:stadtbote/model/tour_file.dart';
|
||||
|
||||
@Entity()
|
||||
class Job {
|
||||
@@ -34,6 +35,25 @@ class Job {
|
||||
toursJson = jsonEncode(value.map((e) => e.toJson()).toList());
|
||||
}
|
||||
|
||||
// Store files as JSON string for ObjectBox
|
||||
String filesJson = '';
|
||||
|
||||
@Transient()
|
||||
List<TourFile> get files {
|
||||
if (filesJson.isEmpty) {
|
||||
return [];
|
||||
}
|
||||
final List<dynamic> decoded = jsonDecode(filesJson);
|
||||
return decoded.map((e) => TourFile.fromJson(e as Map<String, dynamic>)).toList();
|
||||
}
|
||||
|
||||
set files(List<TourFile> value) {
|
||||
filesJson = jsonEncode(value.map((e) => e.toJson()).toList());
|
||||
}
|
||||
|
||||
// Helper method to check if job has files
|
||||
bool get hasFiles => files.isNotEmpty;
|
||||
|
||||
Job();
|
||||
|
||||
factory Job.fromJson(Map<String, dynamic> json) {
|
||||
@@ -52,6 +72,11 @@ class Job {
|
||||
job.tours = (json['tours'] as List<dynamic>)
|
||||
.map((e) => JobTour.fromJson(e as Map<String, dynamic>))
|
||||
.toList();
|
||||
if (json['files'] != null) {
|
||||
job.files = (json['files'] as List<dynamic>)
|
||||
.map((e) => TourFile.fromJson(e as Map<String, dynamic>))
|
||||
.toList();
|
||||
}
|
||||
return job;
|
||||
}
|
||||
|
||||
@@ -68,6 +93,7 @@ class Job {
|
||||
'rem': rem,
|
||||
'delayOrderTime': delayOrderTime,
|
||||
'tours': tours.map((e) => e.toJson()).toList(),
|
||||
'files': files.map((e) => e.toJson()).toList(),
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
import 'package:stadtbote/model/tour_file.dart';
|
||||
import 'package:stadtbote/model/tour_position.dart';
|
||||
import 'package:stadtbote/model/tour_task.dart';
|
||||
|
||||
@@ -15,6 +16,7 @@ class JobTour {
|
||||
TourPosition? pos;
|
||||
late String rem;
|
||||
List<TourTask>? tasks;
|
||||
List<TourFile>? files;
|
||||
|
||||
JobTour();
|
||||
|
||||
@@ -39,6 +41,11 @@ class JobTour {
|
||||
.map((e) => TourTask.fromJson(e as Map<String, dynamic>))
|
||||
.toList()
|
||||
: null;
|
||||
tour.files = json['files'] != null
|
||||
? (json['files'] as List<dynamic>)
|
||||
.map((e) => TourFile.fromJson(e as Map<String, dynamic>))
|
||||
.toList()
|
||||
: null;
|
||||
return tour;
|
||||
}
|
||||
|
||||
@@ -57,6 +64,7 @@ class JobTour {
|
||||
'pos': pos?.toJson(),
|
||||
'rem': rem,
|
||||
'tasks': tasks?.map((e) => e.toJson()).toList(),
|
||||
'files': files?.map((e) => e.toJson()).toList(),
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,39 @@
|
||||
class TourFile {
|
||||
late int index;
|
||||
late String name;
|
||||
String? remark;
|
||||
late String url;
|
||||
|
||||
TourFile();
|
||||
|
||||
factory TourFile.fromJson(Map<String, dynamic> json) {
|
||||
final file = TourFile();
|
||||
file.index = json['index'] as int;
|
||||
file.name = json['name'] as String;
|
||||
file.remark = json['remark'] as String?;
|
||||
file.url = json['url'] as String;
|
||||
return file;
|
||||
}
|
||||
|
||||
Map<String, dynamic> toJson() {
|
||||
return {
|
||||
'index': index,
|
||||
'name': name,
|
||||
'remark': remark,
|
||||
'url': url,
|
||||
};
|
||||
}
|
||||
|
||||
bool get isPdf {
|
||||
return name.toLowerCase().endsWith('.pdf');
|
||||
}
|
||||
|
||||
bool get isImage {
|
||||
final ext = name.toLowerCase();
|
||||
return ext.endsWith('.jpg') ||
|
||||
ext.endsWith('.jpeg') ||
|
||||
ext.endsWith('.png') ||
|
||||
ext.endsWith('.gif') ||
|
||||
ext.endsWith('.webp');
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user