changed the layout to the first wireframes

This commit is contained in:
reinjens 2024-10-21 15:01:20 +02:00
parent 201444ce30
commit 102f8de792
19 changed files with 440 additions and 436 deletions

2
.env Normal file
View file

@ -0,0 +1,2 @@
BASEROW_TOKEN="TFxO7vzBLVRCu9I3VMoHmTuCvSu8aCDi"
BASEROW_IDS='{"massnahmen": 328253, "massnahmenkombination": 328217, "organismen": 328255, "foerderprogramme": 328256, "factsheet": 328273, "standortansprueche": 328188, "referenzumsetzung": 328465, "betriebsverzeichnis": 328472, "erfahrungsbericht": 330802, "genehmigungspflicht": 330806, "dienstleister": 330824, "ansprechperson": 330832, "material": 330836, "quellen": 334231, "baumarten": 342622, "aenderungfactsheet": 330946}'

2
.env.example Normal file
View file

@ -0,0 +1,2 @@
BASEROWTOKEN='ENTER_THE_TOKEN_HERE'
BASEROW_IDS="{'massnahmen': 1, 'massnahmenkombination': 2, 'organismen': 3, 'foerderprogramme': 4, 'factsheet': 5, 'standortansprueche': 6, 'referenzumsetzung': 7, 'betriebsverzeichnis': 8, 'erfahrungsbericht': 9, 'genehmigungspflicht': 10, 'dienstleister': 11, 'ansprechperson': 12, 'material': 13, 'quellen': 14, 'baumarten': 15, 'aenderungfactsheet': 16,}"

View file

@ -1,9 +1,10 @@
import 'package:ambito/src/domain/entity/baumarten/baumarten.dart'; import 'package:ambito/src/domain/entity/baumarten/baumarten.dart';
import 'package:ambito/src/domain/entity/massnahme/massnahme.dart'; import 'package:ambito/src/domain/entity/massnahme/massnahme.dart';
import 'package:ambito/src/packages/ambito_api/base.dart'; import 'package:ambito/src/packages/ambito_api/base.dart';
import 'package:ambito/src/pages/start/start_page.dart'; import 'package:ambito/src/pages/loading/loading_page.dart';
import 'package:flutter/foundation.dart'; import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter_dotenv/flutter_dotenv.dart';
import 'package:flutter_i18n/flutter_i18n.dart'; import 'package:flutter_i18n/flutter_i18n.dart';
import 'package:flutter_localizations/flutter_localizations.dart'; import 'package:flutter_localizations/flutter_localizations.dart';
import 'package:get/get_navigation/src/root/get_material_app.dart'; import 'package:get/get_navigation/src/root/get_material_app.dart';
@ -11,8 +12,6 @@ import 'package:isar/isar.dart';
import 'package:logger/logger.dart'; import 'package:logger/logger.dart';
import 'package:syncfusion_localizations/syncfusion_localizations.dart'; import 'package:syncfusion_localizations/syncfusion_localizations.dart';
const String ambitoToken = 'TFxO7vzBLVRCu9I3VMoHmTuCvSu8aCDi';
final Logger logger = Logger( final Logger logger = Logger(
printer: PrettyPrinter(), printer: PrettyPrinter(),
); );
@ -22,6 +21,8 @@ late Isar isar;
void main() async { void main() async {
WidgetsFlutterBinding.ensureInitialized(); WidgetsFlutterBinding.ensureInitialized();
await dotenv.load(fileName: '.env');
await Isar.initialize(); await Isar.initialize();
const dir = Isar.sqliteInMemory; const dir = Isar.sqliteInMemory;
const engine = kIsWeb ? IsarEngine.sqlite : IsarEngine.isar; const engine = kIsWeb ? IsarEngine.sqlite : IsarEngine.isar;
@ -32,7 +33,7 @@ void main() async {
inspector: true, inspector: true,
); );
Future.wait([ await Future.wait([
BaseApi().getContent('baumarten'), BaseApi().getContent('baumarten'),
BaseApi().getContent('massnahmen'), BaseApi().getContent('massnahmen'),
]); ]);
@ -64,14 +65,14 @@ class Ambito extends StatelessWidget {
SfGlobalLocalizations.delegate, SfGlobalLocalizations.delegate,
], ],
title: 'Flutter Demo', title: 'Flutter Demo',
supportedLocales: [Locale('de')], supportedLocales: const [Locale('de')],
locale: const Locale('de'), locale: const Locale('de'),
builder: FlutterI18n.rootAppBuilder(), builder: FlutterI18n.rootAppBuilder(),
theme: ThemeData( theme: ThemeData(
scaffoldBackgroundColor: Colors.white, scaffoldBackgroundColor: Colors.white,
useMaterial3: true, useMaterial3: true,
), ),
home: const StartPage(), home: const LoadingPage(),
); );
} }
} }

View file

@ -1 +1,5 @@
class BaseEntity {} class BaseEntity {}
mixin EntityWithId {
late int id;
}

View file

@ -9,10 +9,9 @@ part 'baumarten.g.dart';
@JsonSerializable(explicitToJson: true) @JsonSerializable(explicitToJson: true)
@collection @collection
class Baumarten extends BaseEntity { class Baumarten extends BaseEntity with EntityWithId {
Baumarten(); Baumarten();
late int id;
@JsonKey(name: 'order') @JsonKey(name: 'order')
String? orderString; String? orderString;
@JsonKey(name: 'Art') @JsonKey(name: 'Art')

View file

@ -498,7 +498,6 @@ int serializeBaumarten(IsarWriter writer, Baumarten object) {
@isarProtected @isarProtected
Baumarten deserializeBaumarten(IsarReader reader) { Baumarten deserializeBaumarten(IsarReader reader) {
final object = Baumarten(); final object = Baumarten();
object.id = IsarCore.readId(reader);
object.orderString = IsarCore.readString(reader, 1); object.orderString = IsarCore.readString(reader, 1);
object.art = IsarCore.readString(reader, 2); object.art = IsarCore.readString(reader, 2);
object.id2 = IsarCore.readString(reader, 3); object.id2 = IsarCore.readString(reader, 3);
@ -731,14 +730,13 @@ Baumarten deserializeBaumarten(IsarReader reader) {
object.local = IsarCore.readBool(reader, 32); object.local = IsarCore.readBool(reader, 32);
} }
} }
object.id = IsarCore.readId(reader);
return object; return object;
} }
@isarProtected @isarProtected
dynamic deserializeBaumartenProp(IsarReader reader, int property) { dynamic deserializeBaumartenProp(IsarReader reader, int property) {
switch (property) { switch (property) {
case 0:
return IsarCore.readId(reader);
case 1: case 1:
return IsarCore.readString(reader, 1); return IsarCore.readString(reader, 1);
case 2: case 2:
@ -1004,6 +1002,8 @@ dynamic deserializeBaumartenProp(IsarReader reader, int property) {
return IsarCore.readBool(reader, 32); return IsarCore.readBool(reader, 32);
} }
} }
case 0:
return IsarCore.readId(reader);
default: default:
throw ArgumentError('Unknown property: $property'); throw ArgumentError('Unknown property: $property');
} }
@ -1344,87 +1344,6 @@ extension BaumartenQueryBuilderUpdate
extension BaumartenQueryFilter extension BaumartenQueryFilter
on QueryBuilder<Baumarten, Baumarten, QFilterCondition> { on QueryBuilder<Baumarten, Baumarten, QFilterCondition> {
QueryBuilder<Baumarten, Baumarten, QAfterFilterCondition> idEqualTo(
int value,
) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(
EqualCondition(
property: 0,
value: value,
),
);
});
}
QueryBuilder<Baumarten, Baumarten, QAfterFilterCondition> idGreaterThan(
int value,
) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(
GreaterCondition(
property: 0,
value: value,
),
);
});
}
QueryBuilder<Baumarten, Baumarten, QAfterFilterCondition>
idGreaterThanOrEqualTo(
int value,
) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(
GreaterOrEqualCondition(
property: 0,
value: value,
),
);
});
}
QueryBuilder<Baumarten, Baumarten, QAfterFilterCondition> idLessThan(
int value,
) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(
LessCondition(
property: 0,
value: value,
),
);
});
}
QueryBuilder<Baumarten, Baumarten, QAfterFilterCondition> idLessThanOrEqualTo(
int value,
) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(
LessOrEqualCondition(
property: 0,
value: value,
),
);
});
}
QueryBuilder<Baumarten, Baumarten, QAfterFilterCondition> idBetween(
int lower,
int upper,
) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(
BetweenCondition(
property: 0,
lower: lower,
upper: upper,
),
);
});
}
QueryBuilder<Baumarten, Baumarten, QAfterFilterCondition> QueryBuilder<Baumarten, Baumarten, QAfterFilterCondition>
orderStringIsNull() { orderStringIsNull() {
return QueryBuilder.apply(this, (query) { return QueryBuilder.apply(this, (query) {
@ -5461,6 +5380,87 @@ extension BaumartenQueryFilter
); );
}); });
} }
QueryBuilder<Baumarten, Baumarten, QAfterFilterCondition> idEqualTo(
int value,
) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(
EqualCondition(
property: 0,
value: value,
),
);
});
}
QueryBuilder<Baumarten, Baumarten, QAfterFilterCondition> idGreaterThan(
int value,
) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(
GreaterCondition(
property: 0,
value: value,
),
);
});
}
QueryBuilder<Baumarten, Baumarten, QAfterFilterCondition>
idGreaterThanOrEqualTo(
int value,
) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(
GreaterOrEqualCondition(
property: 0,
value: value,
),
);
});
}
QueryBuilder<Baumarten, Baumarten, QAfterFilterCondition> idLessThan(
int value,
) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(
LessCondition(
property: 0,
value: value,
),
);
});
}
QueryBuilder<Baumarten, Baumarten, QAfterFilterCondition> idLessThanOrEqualTo(
int value,
) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(
LessOrEqualCondition(
property: 0,
value: value,
),
);
});
}
QueryBuilder<Baumarten, Baumarten, QAfterFilterCondition> idBetween(
int lower,
int upper,
) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(
BetweenCondition(
property: 0,
lower: lower,
upper: upper,
),
);
});
}
} }
extension BaumartenQueryObject extension BaumartenQueryObject
@ -5502,18 +5502,6 @@ extension BaumartenQueryObject
} }
extension BaumartenQuerySortBy on QueryBuilder<Baumarten, Baumarten, QSortBy> { extension BaumartenQuerySortBy on QueryBuilder<Baumarten, Baumarten, QSortBy> {
QueryBuilder<Baumarten, Baumarten, QAfterSortBy> sortById() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(0);
});
}
QueryBuilder<Baumarten, Baumarten, QAfterSortBy> sortByIdDesc() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(0, sort: Sort.desc);
});
}
QueryBuilder<Baumarten, Baumarten, QAfterSortBy> sortByOrderString( QueryBuilder<Baumarten, Baumarten, QAfterSortBy> sortByOrderString(
{bool caseSensitive = true}) { {bool caseSensitive = true}) {
return QueryBuilder.apply(this, (query) { return QueryBuilder.apply(this, (query) {
@ -5945,22 +5933,22 @@ extension BaumartenQuerySortBy on QueryBuilder<Baumarten, Baumarten, QSortBy> {
return query.addSortBy(32, sort: Sort.desc); return query.addSortBy(32, sort: Sort.desc);
}); });
} }
}
extension BaumartenQuerySortThenBy QueryBuilder<Baumarten, Baumarten, QAfterSortBy> sortById() {
on QueryBuilder<Baumarten, Baumarten, QSortThenBy> {
QueryBuilder<Baumarten, Baumarten, QAfterSortBy> thenById() {
return QueryBuilder.apply(this, (query) { return QueryBuilder.apply(this, (query) {
return query.addSortBy(0); return query.addSortBy(0);
}); });
} }
QueryBuilder<Baumarten, Baumarten, QAfterSortBy> thenByIdDesc() { QueryBuilder<Baumarten, Baumarten, QAfterSortBy> sortByIdDesc() {
return QueryBuilder.apply(this, (query) { return QueryBuilder.apply(this, (query) {
return query.addSortBy(0, sort: Sort.desc); return query.addSortBy(0, sort: Sort.desc);
}); });
} }
}
extension BaumartenQuerySortThenBy
on QueryBuilder<Baumarten, Baumarten, QSortThenBy> {
QueryBuilder<Baumarten, Baumarten, QAfterSortBy> thenByOrderString( QueryBuilder<Baumarten, Baumarten, QAfterSortBy> thenByOrderString(
{bool caseSensitive = true}) { {bool caseSensitive = true}) {
return QueryBuilder.apply(this, (query) { return QueryBuilder.apply(this, (query) {
@ -6252,6 +6240,18 @@ extension BaumartenQuerySortThenBy
return query.addSortBy(32, sort: Sort.desc); return query.addSortBy(32, sort: Sort.desc);
}); });
} }
QueryBuilder<Baumarten, Baumarten, QAfterSortBy> thenById() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(0);
});
}
QueryBuilder<Baumarten, Baumarten, QAfterSortBy> thenByIdDesc() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(0, sort: Sort.desc);
});
}
} }
extension BaumartenQueryWhereDistinct extension BaumartenQueryWhereDistinct
@ -6405,12 +6405,6 @@ extension BaumartenQueryWhereDistinct
extension BaumartenQueryProperty1 extension BaumartenQueryProperty1
on QueryBuilder<Baumarten, Baumarten, QProperty> { on QueryBuilder<Baumarten, Baumarten, QProperty> {
QueryBuilder<Baumarten, int, QAfterProperty> idProperty() {
return QueryBuilder.apply(this, (query) {
return query.addProperty(0);
});
}
QueryBuilder<Baumarten, String?, QAfterProperty> orderStringProperty() { QueryBuilder<Baumarten, String?, QAfterProperty> orderStringProperty() {
return QueryBuilder.apply(this, (query) { return QueryBuilder.apply(this, (query) {
return query.addProperty(1); return query.addProperty(1);
@ -6609,16 +6603,16 @@ extension BaumartenQueryProperty1
return query.addProperty(32); return query.addProperty(32);
}); });
} }
}
extension BaumartenQueryProperty2<R> QueryBuilder<Baumarten, int, QAfterProperty> idProperty() {
on QueryBuilder<Baumarten, R, QAfterProperty> {
QueryBuilder<Baumarten, (R, int), QAfterProperty> idProperty() {
return QueryBuilder.apply(this, (query) { return QueryBuilder.apply(this, (query) {
return query.addProperty(0); return query.addProperty(0);
}); });
} }
}
extension BaumartenQueryProperty2<R>
on QueryBuilder<Baumarten, R, QAfterProperty> {
QueryBuilder<Baumarten, (R, String?), QAfterProperty> orderStringProperty() { QueryBuilder<Baumarten, (R, String?), QAfterProperty> orderStringProperty() {
return QueryBuilder.apply(this, (query) { return QueryBuilder.apply(this, (query) {
return query.addProperty(1); return query.addProperty(1);
@ -6825,16 +6819,16 @@ extension BaumartenQueryProperty2<R>
return query.addProperty(32); return query.addProperty(32);
}); });
} }
}
extension BaumartenQueryProperty3<R1, R2> QueryBuilder<Baumarten, (R, int), QAfterProperty> idProperty() {
on QueryBuilder<Baumarten, (R1, R2), QAfterProperty> {
QueryBuilder<Baumarten, (R1, R2, int), QOperations> idProperty() {
return QueryBuilder.apply(this, (query) { return QueryBuilder.apply(this, (query) {
return query.addProperty(0); return query.addProperty(0);
}); });
} }
}
extension BaumartenQueryProperty3<R1, R2>
on QueryBuilder<Baumarten, (R1, R2), QAfterProperty> {
QueryBuilder<Baumarten, (R1, R2, String?), QOperations> QueryBuilder<Baumarten, (R1, R2, String?), QOperations>
orderStringProperty() { orderStringProperty() {
return QueryBuilder.apply(this, (query) { return QueryBuilder.apply(this, (query) {
@ -7043,6 +7037,12 @@ extension BaumartenQueryProperty3<R1, R2>
return query.addProperty(32); return query.addProperty(32);
}); });
} }
QueryBuilder<Baumarten, (R1, R2, int), QOperations> idProperty() {
return QueryBuilder.apply(this, (query) {
return query.addProperty(0);
});
}
} }
// ************************************************************************** // **************************************************************************

View file

@ -15,10 +15,9 @@ part 'massnahme.g.dart';
@JsonSerializable(explicitToJson: true) @JsonSerializable(explicitToJson: true)
@collection @collection
class Massnahme extends BaseEntity { class Massnahme extends BaseEntity with EntityWithId {
Massnahme(); Massnahme();
late int id;
@JsonKey(name: 'order') @JsonKey(name: 'order')
String? orderString; String? orderString;
@JsonKey(name: 'Maßnahmenbezeichung') @JsonKey(name: 'Maßnahmenbezeichung')

View file

@ -1054,7 +1054,6 @@ int serializeMassnahme(IsarWriter writer, Massnahme object) {
@isarProtected @isarProtected
Massnahme deserializeMassnahme(IsarReader reader) { Massnahme deserializeMassnahme(IsarReader reader) {
final object = Massnahme(); final object = Massnahme();
object.id = IsarCore.readId(reader);
object.orderString = IsarCore.readString(reader, 1); object.orderString = IsarCore.readString(reader, 1);
object.name = IsarCore.readString(reader, 2); object.name = IsarCore.readString(reader, 2);
{ {
@ -1723,14 +1722,13 @@ Massnahme deserializeMassnahme(IsarReader reader) {
} }
} }
} }
object.id = IsarCore.readId(reader);
return object; return object;
} }
@isarProtected @isarProtected
dynamic deserializeMassnahmeProp(IsarReader reader, int property) { dynamic deserializeMassnahmeProp(IsarReader reader, int property) {
switch (property) { switch (property) {
case 0:
return IsarCore.readId(reader);
case 1: case 1:
return IsarCore.readString(reader, 1); return IsarCore.readString(reader, 1);
case 2: case 2:
@ -2472,6 +2470,8 @@ dynamic deserializeMassnahmeProp(IsarReader reader, int property) {
} }
} }
} }
case 0:
return IsarCore.readId(reader);
default: default:
throw ArgumentError('Unknown property: $property'); throw ArgumentError('Unknown property: $property');
} }
@ -3028,87 +3028,6 @@ extension MassnahmeQueryBuilderUpdate
extension MassnahmeQueryFilter extension MassnahmeQueryFilter
on QueryBuilder<Massnahme, Massnahme, QFilterCondition> { on QueryBuilder<Massnahme, Massnahme, QFilterCondition> {
QueryBuilder<Massnahme, Massnahme, QAfterFilterCondition> idEqualTo(
int value,
) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(
EqualCondition(
property: 0,
value: value,
),
);
});
}
QueryBuilder<Massnahme, Massnahme, QAfterFilterCondition> idGreaterThan(
int value,
) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(
GreaterCondition(
property: 0,
value: value,
),
);
});
}
QueryBuilder<Massnahme, Massnahme, QAfterFilterCondition>
idGreaterThanOrEqualTo(
int value,
) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(
GreaterOrEqualCondition(
property: 0,
value: value,
),
);
});
}
QueryBuilder<Massnahme, Massnahme, QAfterFilterCondition> idLessThan(
int value,
) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(
LessCondition(
property: 0,
value: value,
),
);
});
}
QueryBuilder<Massnahme, Massnahme, QAfterFilterCondition> idLessThanOrEqualTo(
int value,
) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(
LessOrEqualCondition(
property: 0,
value: value,
),
);
});
}
QueryBuilder<Massnahme, Massnahme, QAfterFilterCondition> idBetween(
int lower,
int upper,
) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(
BetweenCondition(
property: 0,
lower: lower,
upper: upper,
),
);
});
}
QueryBuilder<Massnahme, Massnahme, QAfterFilterCondition> QueryBuilder<Massnahme, Massnahme, QAfterFilterCondition>
orderStringIsNull() { orderStringIsNull() {
return QueryBuilder.apply(this, (query) { return QueryBuilder.apply(this, (query) {
@ -11025,6 +10944,87 @@ extension MassnahmeQueryFilter
); );
}); });
} }
QueryBuilder<Massnahme, Massnahme, QAfterFilterCondition> idEqualTo(
int value,
) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(
EqualCondition(
property: 0,
value: value,
),
);
});
}
QueryBuilder<Massnahme, Massnahme, QAfterFilterCondition> idGreaterThan(
int value,
) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(
GreaterCondition(
property: 0,
value: value,
),
);
});
}
QueryBuilder<Massnahme, Massnahme, QAfterFilterCondition>
idGreaterThanOrEqualTo(
int value,
) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(
GreaterOrEqualCondition(
property: 0,
value: value,
),
);
});
}
QueryBuilder<Massnahme, Massnahme, QAfterFilterCondition> idLessThan(
int value,
) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(
LessCondition(
property: 0,
value: value,
),
);
});
}
QueryBuilder<Massnahme, Massnahme, QAfterFilterCondition> idLessThanOrEqualTo(
int value,
) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(
LessOrEqualCondition(
property: 0,
value: value,
),
);
});
}
QueryBuilder<Massnahme, Massnahme, QAfterFilterCondition> idBetween(
int lower,
int upper,
) {
return QueryBuilder.apply(this, (query) {
return query.addFilterCondition(
BetweenCondition(
property: 0,
lower: lower,
upper: upper,
),
);
});
}
} }
extension MassnahmeQueryObject extension MassnahmeQueryObject
@ -11038,18 +11038,6 @@ extension MassnahmeQueryObject
} }
extension MassnahmeQuerySortBy on QueryBuilder<Massnahme, Massnahme, QSortBy> { extension MassnahmeQuerySortBy on QueryBuilder<Massnahme, Massnahme, QSortBy> {
QueryBuilder<Massnahme, Massnahme, QAfterSortBy> sortById() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(0);
});
}
QueryBuilder<Massnahme, Massnahme, QAfterSortBy> sortByIdDesc() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(0, sort: Sort.desc);
});
}
QueryBuilder<Massnahme, Massnahme, QAfterSortBy> sortByOrderString( QueryBuilder<Massnahme, Massnahme, QAfterSortBy> sortByOrderString(
{bool caseSensitive = true}) { {bool caseSensitive = true}) {
return QueryBuilder.apply(this, (query) { return QueryBuilder.apply(this, (query) {
@ -11838,22 +11826,22 @@ extension MassnahmeQuerySortBy on QueryBuilder<Massnahme, Massnahme, QSortBy> {
); );
}); });
} }
}
extension MassnahmeQuerySortThenBy QueryBuilder<Massnahme, Massnahme, QAfterSortBy> sortById() {
on QueryBuilder<Massnahme, Massnahme, QSortThenBy> {
QueryBuilder<Massnahme, Massnahme, QAfterSortBy> thenById() {
return QueryBuilder.apply(this, (query) { return QueryBuilder.apply(this, (query) {
return query.addSortBy(0); return query.addSortBy(0);
}); });
} }
QueryBuilder<Massnahme, Massnahme, QAfterSortBy> thenByIdDesc() { QueryBuilder<Massnahme, Massnahme, QAfterSortBy> sortByIdDesc() {
return QueryBuilder.apply(this, (query) { return QueryBuilder.apply(this, (query) {
return query.addSortBy(0, sort: Sort.desc); return query.addSortBy(0, sort: Sort.desc);
}); });
} }
}
extension MassnahmeQuerySortThenBy
on QueryBuilder<Massnahme, Massnahme, QSortThenBy> {
QueryBuilder<Massnahme, Massnahme, QAfterSortBy> thenByOrderString( QueryBuilder<Massnahme, Massnahme, QAfterSortBy> thenByOrderString(
{bool caseSensitive = true}) { {bool caseSensitive = true}) {
return QueryBuilder.apply(this, (query) { return QueryBuilder.apply(this, (query) {
@ -12383,6 +12371,18 @@ extension MassnahmeQuerySortThenBy
return query.addSortBy(62, sort: Sort.desc, caseSensitive: caseSensitive); return query.addSortBy(62, sort: Sort.desc, caseSensitive: caseSensitive);
}); });
} }
QueryBuilder<Massnahme, Massnahme, QAfterSortBy> thenById() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(0);
});
}
QueryBuilder<Massnahme, Massnahme, QAfterSortBy> thenByIdDesc() {
return QueryBuilder.apply(this, (query) {
return query.addSortBy(0, sort: Sort.desc);
});
}
} }
extension MassnahmeQueryWhereDistinct extension MassnahmeQueryWhereDistinct
@ -12655,12 +12655,6 @@ extension MassnahmeQueryWhereDistinct
extension MassnahmeQueryProperty1 extension MassnahmeQueryProperty1
on QueryBuilder<Massnahme, Massnahme, QProperty> { on QueryBuilder<Massnahme, Massnahme, QProperty> {
QueryBuilder<Massnahme, int, QAfterProperty> idProperty() {
return QueryBuilder.apply(this, (query) {
return query.addProperty(0);
});
}
QueryBuilder<Massnahme, String?, QAfterProperty> orderStringProperty() { QueryBuilder<Massnahme, String?, QAfterProperty> orderStringProperty() {
return QueryBuilder.apply(this, (query) { return QueryBuilder.apply(this, (query) {
return query.addProperty(1); return query.addProperty(1);
@ -13075,16 +13069,16 @@ extension MassnahmeQueryProperty1
return query.addProperty(63); return query.addProperty(63);
}); });
} }
}
extension MassnahmeQueryProperty2<R> QueryBuilder<Massnahme, int, QAfterProperty> idProperty() {
on QueryBuilder<Massnahme, R, QAfterProperty> {
QueryBuilder<Massnahme, (R, int), QAfterProperty> idProperty() {
return QueryBuilder.apply(this, (query) { return QueryBuilder.apply(this, (query) {
return query.addProperty(0); return query.addProperty(0);
}); });
} }
}
extension MassnahmeQueryProperty2<R>
on QueryBuilder<Massnahme, R, QAfterProperty> {
QueryBuilder<Massnahme, (R, String?), QAfterProperty> orderStringProperty() { QueryBuilder<Massnahme, (R, String?), QAfterProperty> orderStringProperty() {
return QueryBuilder.apply(this, (query) { return QueryBuilder.apply(this, (query) {
return query.addProperty(1); return query.addProperty(1);
@ -13516,16 +13510,16 @@ extension MassnahmeQueryProperty2<R>
return query.addProperty(63); return query.addProperty(63);
}); });
} }
}
extension MassnahmeQueryProperty3<R1, R2> QueryBuilder<Massnahme, (R, int), QAfterProperty> idProperty() {
on QueryBuilder<Massnahme, (R1, R2), QAfterProperty> {
QueryBuilder<Massnahme, (R1, R2, int), QOperations> idProperty() {
return QueryBuilder.apply(this, (query) { return QueryBuilder.apply(this, (query) {
return query.addProperty(0); return query.addProperty(0);
}); });
} }
}
extension MassnahmeQueryProperty3<R1, R2>
on QueryBuilder<Massnahme, (R1, R2), QAfterProperty> {
QueryBuilder<Massnahme, (R1, R2, String?), QOperations> QueryBuilder<Massnahme, (R1, R2, String?), QOperations>
orderStringProperty() { orderStringProperty() {
return QueryBuilder.apply(this, (query) { return QueryBuilder.apply(this, (query) {
@ -13961,6 +13955,12 @@ extension MassnahmeQueryProperty3<R1, R2>
return query.addProperty(63); return query.addProperty(63);
}); });
} }
QueryBuilder<Massnahme, (R1, R2, int), QOperations> idProperty() {
return QueryBuilder.apply(this, (query) {
return query.addProperty(0);
});
}
} }
// ************************************************************************** // **************************************************************************

View file

@ -2,9 +2,10 @@ import 'dart:convert';
import 'package:ambito/src/domain/entity/entities.dart'; import 'package:ambito/src/domain/entity/entities.dart';
import 'package:ambito/src/packages/ambito_api/restclient.dart'; import 'package:ambito/src/packages/ambito_api/restclient.dart';
import 'package:ambito/src/packages/ambito_db/base_db.dart'; import 'package:flutter_dotenv/flutter_dotenv.dart';
import '../../../main.dart'; import '../ambito_db/repositories/baumarten_repository.dart';
import '../ambito_db/repositories/massnahme_repository.dart';
Map<String, int> tables = { Map<String, int> tables = {
'massnahmen': 328253, 'massnahmen': 328253,
@ -26,28 +27,29 @@ Map<String, int> tables = {
}; };
class BaseApi { class BaseApi {
Map tables = {};
init() {
tables = jsonDecode(dotenv.get('BASEROW_IDS'));
}
Future<bool> getContent(String table) async { Future<bool> getContent(String table) async {
init();
int tableId = tables[table] ?? 0; int tableId = tables[table] ?? 0;
if (tableId > 0) { if (tableId > 0) {
var response = var response =
await RestClient().get('$tableId/?user_field_names=true&size=200'); await RestClient().get('$tableId/?user_field_names=true&size=200');
if (response.statusCode == 200) { if (response.statusCode == 200) {
var json = jsonDecode(utf8.decode(response.body.runes.toList())); var json = _jsonDecoded(response.body);
switch (table) { switch (table) {
case 'baumarten': case 'baumarten':
for (var baumart in json['results']) { for (var baumart in json['results']) {
BaseDB.put(Baumarten.fromJson(baumart)); BaumartenRepository().put(Baumarten.fromJson(baumart));
isar.write((isar) {
isar.baumartens.put(Baumarten.fromJson(baumart));
});
} }
break; break;
case 'massnahmen': case 'massnahmen':
for (var massnahme in json['results']) { for (var massnahme in json['results']) {
BaseDB.put(Massnahme.fromJson(massnahme)); MassnahmeRepository().put(Massnahme.fromJson(massnahme));
isar.write((isar) {
isar.massnahmes.put(Massnahme.fromJson(massnahme));
});
} }
break; break;
} }
@ -57,4 +59,8 @@ class BaseApi {
} }
return false; return false;
} }
dynamic _jsonDecoded(String input) {
return jsonDecode(utf8.decode(input.runes.toList()));
}
} }

View file

@ -4,6 +4,7 @@ import 'dart:async';
import 'dart:convert'; import 'dart:convert';
import 'package:ambito/main.dart'; import 'package:ambito/main.dart';
import 'package:flutter_dotenv/flutter_dotenv.dart';
import 'package:http/http.dart' as http; import 'package:http/http.dart' as http;
class RestClient { class RestClient {
@ -19,7 +20,7 @@ class RestClient {
var headers = { var headers = {
"Content-Type": contentType, "Content-Type": contentType,
"Accept": accept, "Accept": accept,
"Authorization": "Token $ambitoToken", "Authorization": "Token ${dotenv.get('BASEROW_TOKEN')}",
}; };
return headers; return headers;
} }

View file

@ -3,28 +3,26 @@ import 'package:isar/isar.dart';
import '../../../main.dart'; import '../../../main.dart';
class BaseDB { abstract class BaseDB {
static put(var entity) { abstract IsarCollection collection;
switch (entity.runtimeType.toString()) {
case 'Baumarten': put(BaseEntity entity) {
isar.write((isar) { isar.write((isar) {
isar.baumartens.put(entity); collection.put(entity);
}); });
break;
case 'Massnahme':
isar.write((isar) {
isar.massnahmes.put(entity);
});
break;
}
} }
static getAll(String type) { putAll(List<BaseEntity> entities) {
switch (type) { isar.write((isar) {
case 'Maßnahme': collection.putAll(entities);
return isar.massnahmes.where().sortByName().findAll(); });
case 'Baumart': }
return isar.baumartens.where().findAll();
} get(int id) {
return collection.get(id);
}
List<dynamic> getAll() {
return collection.where().findAll();
} }
} }

View file

@ -0,0 +1,9 @@
import 'package:ambito/src/domain/entity/entities.dart';
import 'package:isar/isar.dart';
import '../../../../main.dart';
import '../base_db.dart';
class BaumartenRepository extends BaseDB {
IsarCollection collection = isar.baumartens;
}

View file

@ -0,0 +1,9 @@
import 'package:ambito/src/domain/entity/entities.dart';
import 'package:ambito/src/packages/ambito_db/base_db.dart';
import 'package:isar/isar.dart';
import '../../../../main.dart';
class MassnahmeRepository extends BaseDB {
IsarCollection collection = isar.massnahmes;
}

View file

@ -1,7 +1,6 @@
import 'package:ambito/src/domain/entity/id_value_color/id_value_color.dart';
import 'package:ambito/src/domain/entity/massnahme/massnahme.dart'; import 'package:ambito/src/domain/entity/massnahme/massnahme.dart';
import 'package:ambito/src/extensions/extensions.dart'; import 'package:ambito/src/extensions/extensions.dart';
import 'package:ambito/src/packages/ambito_db/base_db.dart'; import 'package:ambito/src/packages/ambito_db/repositories/massnahme_repository.dart';
import 'package:ambito/src/widgets/form/fields/field_dropdown.dart'; import 'package:ambito/src/widgets/form/fields/field_dropdown.dart';
import 'package:ambito/src/widgets/form/fields/field_monthsrangepicker.dart'; import 'package:ambito/src/widgets/form/fields/field_monthsrangepicker.dart';
import 'package:ambito/src/widgets/form/form_widget.dart'; import 'package:ambito/src/widgets/form/form_widget.dart';
@ -33,10 +32,12 @@ class ActionsPageState extends State<ActionsPage> {
Set<String> support = {}; Set<String> support = {};
String? filterMonths; String? filterMonths;
Set<String> months = {}; Set<String> months = {};
List massnahmen = [];
@override @override
void initState() { void initState() {
super.initState(); super.initState();
massnahmen = MassnahmeRepository().getAll();
effort = []; effort = [];
effect = []; effect = [];
type = {}; type = {};
@ -45,61 +46,53 @@ class ActionsPageState extends State<ActionsPage> {
support = {}; support = {};
} }
@override
Widget build(BuildContext context) { Widget build(BuildContext context) {
List<Massnahme> massnahmen = BaseDB.getAll('Maßnahme'); // Step 1: Collect all distinct values in each Set in a single loop
Set<String> updatedTypes = {}; final updatedTypes = <String>{};
Set<String> updatedAreaTypes = {}; final updatedAreaTypes = <String>{};
Set<String> updatedSupports = {}; final updatedSupports = <String>{};
Set<String> updatedMonths = {}; final updatedMonths = <String>{};
for (var massnahme in massnahmen) { for (final massnahme in massnahmen) {
if (massnahme.actionGroup != null) { if (massnahme.actionGroup?.value != null) {
updatedTypes.add(massnahme.actionGroup!.value!); updatedTypes.add(massnahme.actionGroup!.value!);
} }
if (massnahme.factsheetAreaType != null) {
for (IdValueColor aType in massnahme.factsheetAreaType!) { massnahme.factsheetAreaType?.forEach((aType) {
updatedAreaTypes.add(aType.value!); updatedAreaTypes.add(aType.value!);
} });
}
if (massnahme.fundingPrograms != null) { massnahme.fundingPrograms?.forEach((aType) {
for (IdValueColor aType in massnahme.fundingPrograms!) { updatedSupports.add(aType.value!);
updatedSupports.add(aType.value!); });
}
} massnahme.timeFrame?.forEach((tfType) {
if (massnahme.timeFrame != null) { updatedMonths.add(tfType.value!);
logger.d(massnahme.timeFrame); });
for (IdValueColor tfType in massnahme.timeFrame!) {
updatedMonths.add(tfType.value!);
}
}
} }
logger.d(updatedMonths); // Step 2: Update state with collected data in a single setState() call
setState(() { setState(() {
type.addAll(updatedTypes); type.addAll(updatedTypes);
areaType.addAll(updatedAreaTypes); areaType.addAll(updatedAreaTypes);
support.addAll(updatedSupports); support.addAll(updatedSupports);
months.addAll(updatedMonths.toList()); months.addAll(updatedMonths);
}); });
List<Widget> actionCards = massnahmen.map((massnahme) { // Step 3: Generate the list of action cards with matching filters
bool typeMatches = filterType == null || final actionCards = massnahmen.map((massnahme) {
(massnahme.actionGroup != null && final typeMatches =
massnahme.actionGroup!.value == filterType); filterType == null || massnahme.actionGroup?.value == filterType;
final areaTypeMatches = filterAreaType == null ||
bool areaTypeMatches = filterAreaType == null ||
(massnahme.factsheetAreaType (massnahme.factsheetAreaType
?.any((aType) => aType.value == filterAreaType) ?? ?.any((aType) => aType.value == filterAreaType) ??
false); false);
final supportMatches = filterSupport == null ||
bool supportMatches = filterSupport == null ||
(massnahme.fundingPrograms (massnahme.fundingPrograms
?.any((aType) => aType.value == filterSupport) ?? ?.any((aType) => aType.value == filterSupport) ??
false); false);
// Update visibility based on the matches // Update visibility in a single batch setState()
setState(() { setState(() {
visible[massnahme.id] = visible[massnahme.id] =
typeMatches && areaTypeMatches && supportMatches; typeMatches && areaTypeMatches && supportMatches;
@ -108,8 +101,9 @@ class ActionsPageState extends State<ActionsPage> {
return getCard(context, massnahme); return getCard(context, massnahme);
}).toList(); }).toList();
// Step 4: Return UI widget structure
return Padding( return Padding(
padding: const EdgeInsets.only(left: 32, right: 32), padding: const EdgeInsets.symmetric(horizontal: 32),
child: Column( child: Column(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
@ -126,19 +120,13 @@ class ActionsPageState extends State<ActionsPage> {
Expanded( Expanded(
child: Row( child: Row(
crossAxisAlignment: CrossAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.start,
children: [ children: [
SizedBox( SizedBox(width: 300, child: getFilter(context)),
width: 300, const SizedBox(width: 16),
child: getFilter(context),
),
const SizedBox(
width: 16,
),
Expanded( Expanded(
child: SingleChildScrollView( child: SingleChildScrollView(
child: Wrap( child: Column(
direction: Axis.horizontal, crossAxisAlignment: CrossAxisAlignment.stretch,
children: actionCards, children: actionCards,
), ),
), ),
@ -225,101 +213,20 @@ class ActionsPageState extends State<ActionsPage> {
.add(FlutterI18n.translate(context, 'general.lists.months.$i')); .add(FlutterI18n.translate(context, 'general.lists.months.$i'));
} }
/*var monthsSorted = months.toList();
monthsSorted.sort((a, b) => a.toLowerCase().compareTo(b.toLowerCase()));*/
/*fields.add(
FieldDropdown(
name: 'months',
label: 'Beginn der Maßnahme',
filterValue: filterMonths,
onClear: () {
setState(() {
filterMonths = null;
});
},
onSelected: ((String? value) {
setState(() {
filterMonths = value;
});
}),
entries: monthsSorted,
),
);*/
logger.d(monthsSorted);
fields.add( fields.add(
FieldMonthsRangepicker( FieldMonthsRangepicker(
name: 'months', name: 'months',
label: 'Beginn der Maßnahme', label: 'Beginn der Maßnahme',
filterValue: filterMonths, filterValue: filterMonths,
onClear: () {}, onClear: () {},
onSelected: (String? value) {}, onSelected: (String? value) {
logger.d(value);
},
entries: monthsSorted, entries: monthsSorted,
), ),
); );
return FormWidget(type: FormWidgetType.vertical, fields: fields); return FormWidget(type: FormWidgetType.vertical, fields: fields);
/*return Row(
mainAxisAlignment: MainAxisAlignment.start,
children: [
DropdownMenuWidget(
formKey: _keyAreaType,
label: 'Ort der Maßnahme',
controller: _controllerAreaType,
filterValue: filterAreaType,
onClear: () {
setState(() {
filterAreaType = null;
});
_controllerAreaType.clear();
},
onSelected: (String? selection) {
setState(() {
filterAreaType = selection;
});
},
entries: areaType.toList(),
),
DropdownMenuWidget(
formKey: _keyType,
label: 'Art der Maßnahme',
controller: _controllerType,
filterValue: filterType,
onClear: () {
setState(() {
filterType = null;
});
_controllerType.clear();
},
onSelected: (String? selection) {
setState(() {
filterType = selection;
});
},
entries: type.toList(),
),
DropdownMenuWidget(
formKey: _keySupport,
label: 'Förderprogramm',
controller: _controllerSupport,
filterValue: filterSupport,
onClear: () {
setState(() {
filterSupport = null;
});
_controllerSupport.clear();
},
onSelected: (String? selection) {
setState(() {
filterSupport = selection;
});
},
entries: support.toList(),
),
],
);*/
} }
Widget getCard(BuildContext context, Massnahme massnahme) { Widget getCard(BuildContext context, Massnahme massnahme) {
@ -340,27 +247,41 @@ class ActionsPageState extends State<ActionsPage> {
return Visibility( return Visibility(
visible: visible[massnahme.id] ?? false, visible: visible[massnahme.id] ?? false,
child: SizedBox( child: SizedBox(
width: 400, width: 800,
child: Card( child: Card(
color: background, color: background,
child: Padding( child: Padding(
padding: const EdgeInsets.all(32), padding: const EdgeInsets.all(32),
child: Column( child: Row(
crossAxisAlignment: CrossAxisAlignment.start,
children: [ children: [
if (image != null) image, (image != null)
? image
: const SizedBox(
width: 300,
height: 140,
),
const SizedBox( const SizedBox(
height: 8, width: 16,
), ),
Text(massnahme.name!, Expanded(
style: Theme.of(context).textTheme.headlineSmall), child: Column(
const SizedBox( mainAxisAlignment: MainAxisAlignment.start,
height: 8, crossAxisAlignment: CrossAxisAlignment.start,
), children: [
ExpandableText( Text(massnahme.name!,
massnahme.factsheetDefinition ?? '', style: Theme.of(context).textTheme.headlineSmall),
maxLines: 3, const SizedBox(
expandText: 'mehr', height: 8,
collapseText: 'weniger', ),
ExpandableText(
massnahme.factsheetDefinition ?? '',
maxLines: 3,
expandText: 'mehr',
collapseText: 'weniger',
)
],
),
) )
], ],
), ),

View file

@ -0,0 +1,39 @@
import 'package:ambito/src/pages/start/start_page.dart';
import 'package:flutter/material.dart';
class LoadingPage extends StatelessWidget {
const LoadingPage({super.key});
@override
Widget build(BuildContext context) {
return FutureBuilder(
future: Future.delayed(
const Duration(seconds: 1),
() {
Navigator.pushAndRemoveUntil(
context,
MaterialPageRoute(
builder: (context) {
return const StartPage();
},
),
(route) => false,
);
},
),
builder: (context, snapshot) {
if (snapshot.connectionState != ConnectionState.done) {
return Center(
child: Hero(
tag: 'logo',
child: Image.asset('assets/images/logo_trans.png')),
);
}
return Center(
child: Hero(
tag: 'logo', child: Image.asset('assets/images/logo_trans.png')),
);
},
);
}
}

View file

@ -32,9 +32,13 @@ class StartPageState extends State<StartPage> {
const SizedBox( const SizedBox(
width: 30, width: 30,
), ),
Image.asset( Hero(
'images/logo.png', tag: 'logo',
scale: .8, child: Image.asset(
'assets/images/logo_trans.png',
width: 50,
height: 50,
),
), ),
const SizedBox( const SizedBox(
width: 30, width: 30,

View file

@ -26,10 +26,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: args name: args
sha256: "7cf60b9f0cc88203c5a190b4cd62a99feea42759a7fa695010eb5de1c0b2252a" sha256: bf9f5caeea8d8fe6721a9c358dd8a5c1947b27f1cfaa18b39c301273594919e6
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "2.5.0" version: "2.6.0"
async: async:
dependency: transitive dependency: transitive
description: description:
@ -323,14 +323,22 @@ packages:
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "0.8.0" version: "0.8.0"
flutter_dotenv:
dependency: "direct main"
description:
name: flutter_dotenv
sha256: b7c7be5cd9f6ef7a78429cabd2774d3c4af50e79cb2b7593e3d5d763ef95c61b
url: "https://pub.dev"
source: hosted
version: "5.2.1"
flutter_form_builder: flutter_form_builder:
dependency: "direct main" dependency: "direct main"
description: description:
name: flutter_form_builder name: flutter_form_builder
sha256: b42ad8a9b3e8a629eb0fee8e4feaf7c2862fc40808ebf9f7ddc9da798e890136 sha256: c278ef69b08957d484f83413f0e77b656a39b7a7bb4eb8a295da3a820ecc6545
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "9.4.1" version: "9.5.0"
flutter_i18n: flutter_i18n:
dependency: "direct main" dependency: "direct main"
description: description:
@ -1011,26 +1019,26 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: syncfusion_flutter_core name: syncfusion_flutter_core
sha256: "7130fc3259247946b59fe9b76ee89500c775c3f7e5c1d0826f3105e1dd0bebf6" sha256: becd190595cba56feac5ec17b805b35df9f006171c131c209f79b5c58fc780eb
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "27.1.52" version: "27.1.53"
syncfusion_flutter_datepicker: syncfusion_flutter_datepicker:
dependency: "direct main" dependency: "direct main"
description: description:
name: syncfusion_flutter_datepicker name: syncfusion_flutter_datepicker
sha256: "61efc09e962d7b7cc3c7d33a2e44ec027112403af49590d5cc1025a255cc34fa" sha256: "5638805bea1c70a6d46dea9d39ef67f0085176e1c15cf57f7036cf67c1568816"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "27.1.52" version: "27.1.53"
syncfusion_localizations: syncfusion_localizations:
dependency: "direct main" dependency: "direct main"
description: description:
name: syncfusion_localizations name: syncfusion_localizations
sha256: d04b86990411e1f0c896e273bbdb312b1ed52d8009010ddc2af9cbea5ed90e09 sha256: "742cd5df17f6438628655b7a16d1ee87624166a9dd0362cb818d9f6968ffbc10"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "27.1.52" version: "27.1.53"
synchronized: synchronized:
dependency: transitive dependency: transitive
description: description:
@ -1171,10 +1179,10 @@ packages:
dependency: transitive dependency: transitive
description: description:
name: xml2json name: xml2json
sha256: dbe79a85d902674d95c7608c8048355ce2ec5846640da1c0f91389ccdad5b5a8 sha256: "9523203b99032ce419672804010cce72ea47fc277b3135f77bbb7ac8fa391664"
url: "https://pub.dev" url: "https://pub.dev"
source: hosted source: hosted
version: "6.2.4" version: "6.2.5"
yaml: yaml:
dependency: transitive dependency: transitive
description: description:

View file

@ -42,6 +42,7 @@ dependencies:
flutter_form_builder: ^9.4.1 flutter_form_builder: ^9.4.1
syncfusion_flutter_datepicker: ^27.1.50 syncfusion_flutter_datepicker: ^27.1.50
syncfusion_localizations: ^27.1.52 syncfusion_localizations: ^27.1.52
flutter_dotenv: ^5.2.1
dev_dependencies: dev_dependencies:
@ -53,6 +54,7 @@ dev_dependencies:
flutter: flutter:
uses-material-design: true uses-material-design: true
assets: assets:
- .env
- assets/ - assets/
- assets/i18n/ - assets/i18n/
- assets/images/ - assets/images/

View file

@ -98,7 +98,7 @@
</style> </style>
</head> </head>
<body> <body>
<div class="loader"></div> <!--<div class="loader"></div>-->
<script src="flutter_bootstrap.js" async></script> <script src="flutter_bootstrap.js" async></script>
</body> </body>