mirror of
https://github.com/zoriya/Aeris.git
synced 2026-06-05 11:40:22 +00:00
Mobile Client: Reanme app package
This commit is contained in:
@@ -1,8 +1,8 @@
|
||||
library aeris;
|
||||
|
||||
export 'package:mobile/src/views/startup_page.dart';
|
||||
export 'package:aeris/src/views/startup_page.dart';
|
||||
|
||||
export 'package:mobile/src/widgets/overlayed_texts.dart';
|
||||
export 'package:aeris/src/widgets/overlayed_texts.dart';
|
||||
|
||||
export 'package:mobile/src/widgets/background/anim_painter.dart';
|
||||
export 'package:mobile/src/widgets/background/custom_animation.dart';
|
||||
export 'package:aeris/src/widgets/background/anim_painter.dart';
|
||||
export 'package:aeris/src/widgets/background/custom_animation.dart';
|
||||
|
||||
+10
-10
@@ -1,15 +1,15 @@
|
||||
import 'package:flutter_localizations/flutter_localizations.dart';
|
||||
import 'package:form_builder_validators/localization/l10n.dart';
|
||||
import 'package:mobile/src/providers/pipelines_provider.dart';
|
||||
import 'package:mobile/src/providers/user_services_provider.dart';
|
||||
import 'package:mobile/src/views/create_pipeline_page.dart';
|
||||
import 'package:mobile/src/views/pipeline_detail_page.dart';
|
||||
import 'package:mobile/src/views/service_page.dart';
|
||||
import 'package:mobile/src/views/setup_action_page.dart';
|
||||
import 'package:mobile/src/views/startup_page.dart';
|
||||
import 'package:mobile/src/views/login_page.dart';
|
||||
import 'package:mobile/src/views/home_page.dart';
|
||||
import 'package:mobile/src/constants.dart';
|
||||
import 'package:aeris/src/providers/pipelines_provider.dart';
|
||||
import 'package:aeris/src/providers/user_services_provider.dart';
|
||||
import 'package:aeris/src/views/create_pipeline_page.dart';
|
||||
import 'package:aeris/src/views/pipeline_detail_page.dart';
|
||||
import 'package:aeris/src/views/service_page.dart';
|
||||
import 'package:aeris/src/views/setup_action_page.dart';
|
||||
import 'package:aeris/src/views/startup_page.dart';
|
||||
import 'package:aeris/src/views/login_page.dart';
|
||||
import 'package:aeris/src/views/home_page.dart';
|
||||
import 'package:aeris/src/constants.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import 'package:flutter/widgets.dart';
|
||||
import 'package:mobile/src/models/service.dart';
|
||||
import 'package:aeris/src/models/service.dart';
|
||||
|
||||
///Base class for reactions and trigger
|
||||
abstract class Action {
|
||||
@@ -16,5 +16,4 @@ abstract class Action {
|
||||
required this.service,
|
||||
required this.name,
|
||||
this.parameters = const {}});
|
||||
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:mobile/src/models/reaction.dart';
|
||||
import 'package:mobile/src/models/trigger.dart';
|
||||
import 'package:aeris/src/models/reaction.dart';
|
||||
import 'package:aeris/src/models/trigger.dart';
|
||||
|
||||
/// Object representation of a pipeline
|
||||
class Pipeline {
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:mobile/src/models/pipeline.dart';
|
||||
import 'package:aeris/src/models/pipeline.dart';
|
||||
|
||||
///
|
||||
enum PipelineCollectionSort { last, triggerCount, name, triggeringService }
|
||||
@@ -30,7 +30,8 @@ class PipelineCollection {
|
||||
int Function(Pipeline, Pipeline) sortingFunction;
|
||||
|
||||
enabled = pipelines.where((pipeline) => pipeline.enabled).toList();
|
||||
disabled = pipelines.where((pipeline) => pipeline.enabled == false).toList();
|
||||
disabled =
|
||||
pipelines.where((pipeline) => pipeline.enabled == false).toList();
|
||||
if (sortingSplitDisabled == false) {
|
||||
enabled.addAll(disabled);
|
||||
disabled.clear();
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import 'package:mobile/src/models/action.dart' as aeris_action;
|
||||
import 'package:aeris/src/models/action.dart' as aeris_action;
|
||||
import 'package:flutter/widgets.dart';
|
||||
import 'package:mobile/src/models/service.dart';
|
||||
import 'package:aeris/src/models/service.dart';
|
||||
|
||||
///Object representation of a reaction
|
||||
class Reaction extends aeris_action.Action {
|
||||
@@ -10,16 +10,18 @@ class Reaction extends aeris_action.Action {
|
||||
required String name,
|
||||
Map<String, Object> parameters = const {}})
|
||||
: super(service: service, name: name, parameters: parameters);
|
||||
|
||||
/// Template trigger, used as an 'empty' trigger
|
||||
Reaction.template(): super(service: Service.all()[0], name: '', parameters: {});
|
||||
|
||||
@override
|
||||
/// Template trigger, used as an 'empty' trigger
|
||||
Reaction.template()
|
||||
: super(service: Service.all()[0], name: '', parameters: {});
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) {
|
||||
Reaction otherReaction = other as Reaction;
|
||||
return service.name == otherReaction.service.name &&
|
||||
name == otherReaction.name &&
|
||||
parameters.values.toString() == otherReaction.parameters.values.toString() &&
|
||||
parameters.values.toString() ==
|
||||
otherReaction.parameters.values.toString() &&
|
||||
parameters.keys.toString() == otherReaction.parameters.keys.toString();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:mobile/src/main.dart';
|
||||
import 'package:mobile/src/models/service.dart';
|
||||
import 'package:mobile/src/models/action.dart' as aeris_action;
|
||||
import 'package:aeris/src/main.dart';
|
||||
import 'package:aeris/src/models/service.dart';
|
||||
import 'package:aeris/src/models/action.dart' as aeris_action;
|
||||
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
|
||||
|
||||
///Object representation of a pipeline trigger
|
||||
|
||||
@@ -1,9 +1,8 @@
|
||||
// Class for a service related to a user (Youtube, Gmail, ...)
|
||||
import 'package:mobile/src/models/service.dart';
|
||||
import 'package:aeris/src/models/service.dart';
|
||||
import 'package:flutter/cupertino.dart';
|
||||
|
||||
class UserService {
|
||||
|
||||
/// Service name related to the user
|
||||
final Service serviceProvider;
|
||||
|
||||
@@ -21,9 +20,9 @@ class UserService {
|
||||
|
||||
UserService(
|
||||
{Key? key,
|
||||
required this.serviceAccountId,
|
||||
required this.accountUsername,
|
||||
required this.accountSlug,
|
||||
required this.userExternalToken,
|
||||
required this.serviceProvider});
|
||||
required this.serviceAccountId,
|
||||
required this.accountUsername,
|
||||
required this.accountSlug,
|
||||
required this.userExternalToken,
|
||||
required this.serviceProvider});
|
||||
}
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
import 'package:mobile/src/models/pipeline.dart';
|
||||
import 'package:aeris/src/models/pipeline.dart';
|
||||
import 'package:flutter/cupertino.dart';
|
||||
import 'package:mobile/src/models/pipeline_collection.dart';
|
||||
import 'package:mobile/src/models/reaction.dart';
|
||||
import 'package:mobile/src/models/service.dart';
|
||||
import 'package:mobile/src/models/trigger.dart';
|
||||
import 'package:aeris/src/models/pipeline_collection.dart';
|
||||
import 'package:aeris/src/models/reaction.dart';
|
||||
import 'package:aeris/src/models/service.dart';
|
||||
import 'package:aeris/src/models/trigger.dart';
|
||||
|
||||
/// Provider class for Pipelines
|
||||
class PipelineProvider extends ChangeNotifier {
|
||||
|
||||
@@ -1,10 +1,9 @@
|
||||
import 'package:mobile/src/models/user_service.dart';
|
||||
import 'package:mobile/src/models/service.dart';
|
||||
import 'package:aeris/src/models/user_service.dart';
|
||||
import 'package:aeris/src/models/service.dart';
|
||||
import 'package:flutter/cupertino.dart';
|
||||
|
||||
/// Provider used to store every Service related to the User
|
||||
class UserServiceProvider extends ChangeNotifier {
|
||||
|
||||
/// List of [Service] related to the user
|
||||
List<UserService> userServices = [];
|
||||
|
||||
@@ -15,14 +14,17 @@ class UserServiceProvider extends ChangeNotifier {
|
||||
}
|
||||
|
||||
/// Creates a new service related to the user
|
||||
createUserService(Service serviceToSet, {String accountId = "", String accUsername = "", String accountSlug = "", String externalToken = ""}) {
|
||||
createUserService(Service serviceToSet,
|
||||
{String accountId = "",
|
||||
String accUsername = "",
|
||||
String accountSlug = "",
|
||||
String externalToken = ""}) {
|
||||
UserService newService = UserService(
|
||||
serviceAccountId: accountId,
|
||||
accountUsername: accUsername,
|
||||
accountSlug: accountSlug,
|
||||
userExternalToken: externalToken,
|
||||
serviceProvider: serviceToSet
|
||||
);
|
||||
serviceAccountId: accountId,
|
||||
accountUsername: accUsername,
|
||||
accountSlug: accountSlug,
|
||||
userExternalToken: externalToken,
|
||||
serviceProvider: serviceToSet);
|
||||
userServices.add(newService);
|
||||
// notifyListeners(); /// TODO Get the notifyListeners method back.
|
||||
}
|
||||
@@ -35,18 +37,19 @@ class UserServiceProvider extends ChangeNotifier {
|
||||
}
|
||||
|
||||
/// Modifies a service given as argument
|
||||
modifyService(UserService toModify, String serviceAccountId, String accountUsername, String accountSlug, String userExternalToken) {
|
||||
modifyService(UserService toModify, String serviceAccountId,
|
||||
String accountUsername, String accountSlug, String userExternalToken) {
|
||||
for (int i = 0; i < userServices.length; i++) {
|
||||
if (userServices[i].serviceProvider.name == toModify.serviceProvider.name &&
|
||||
if (userServices[i].serviceProvider.name ==
|
||||
toModify.serviceProvider.name &&
|
||||
userServices[i].serviceAccountId == toModify.serviceAccountId &&
|
||||
userServices[i].userExternalToken == toModify.userExternalToken) {
|
||||
UserService newService = UserService(
|
||||
serviceProvider: userServices[i].serviceProvider,
|
||||
serviceAccountId: serviceAccountId,
|
||||
accountUsername: accountUsername,
|
||||
accountSlug: accountSlug,
|
||||
userExternalToken: userExternalToken
|
||||
);
|
||||
serviceProvider: userServices[i].serviceProvider,
|
||||
serviceAccountId: serviceAccountId,
|
||||
accountUsername: accountUsername,
|
||||
accountSlug: accountSlug,
|
||||
userExternalToken: userExternalToken);
|
||||
userServices[i] = newService;
|
||||
notifyListeners();
|
||||
return true;
|
||||
@@ -74,4 +77,4 @@ class UserServiceProvider extends ChangeNotifier {
|
||||
userServices.clear();
|
||||
notifyListeners();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,16 +1,16 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:form_builder_validators/form_builder_validators.dart';
|
||||
import 'package:mobile/src/models/pipeline.dart';
|
||||
import 'package:mobile/src/models/reaction.dart';
|
||||
import 'package:mobile/src/models/trigger.dart';
|
||||
import 'package:mobile/src/providers/pipelines_provider.dart';
|
||||
import 'package:mobile/src/views/pipeline_detail_page.dart';
|
||||
import 'package:mobile/src/views/setup_action_page.dart';
|
||||
import 'package:mobile/src/widgets/action_card.dart';
|
||||
import 'package:mobile/src/widgets/action_card_popup_menu.dart';
|
||||
import 'package:mobile/src/widgets/aeris_card_page.dart';
|
||||
import 'package:aeris/src/models/pipeline.dart';
|
||||
import 'package:aeris/src/models/reaction.dart';
|
||||
import 'package:aeris/src/models/trigger.dart';
|
||||
import 'package:aeris/src/providers/pipelines_provider.dart';
|
||||
import 'package:aeris/src/views/pipeline_detail_page.dart';
|
||||
import 'package:aeris/src/views/setup_action_page.dart';
|
||||
import 'package:aeris/src/widgets/action_card.dart';
|
||||
import 'package:aeris/src/widgets/action_card_popup_menu.dart';
|
||||
import 'package:aeris/src/widgets/aeris_card_page.dart';
|
||||
import 'package:flutter_form_builder/flutter_form_builder.dart';
|
||||
import 'package:mobile/src/widgets/colored_clickable_card.dart';
|
||||
import 'package:aeris/src/widgets/colored_clickable_card.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
|
||||
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
import 'dart:ui';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:mobile/src/providers/pipelines_provider.dart';
|
||||
import 'package:mobile/src/widgets/aeris_page.dart';
|
||||
import 'package:mobile/src/widgets/home_page_menu.dart';
|
||||
import 'package:mobile/src/widgets/clickable_card.dart';
|
||||
import 'package:mobile/src/widgets/home_page_sort_menu.dart';
|
||||
import 'package:mobile/src/widgets/loading_widget.dart';
|
||||
import 'package:mobile/src/widgets/pipeline_card.dart';
|
||||
import 'package:aeris/src/providers/pipelines_provider.dart';
|
||||
import 'package:aeris/src/widgets/aeris_page.dart';
|
||||
import 'package:aeris/src/widgets/home_page_menu.dart';
|
||||
import 'package:aeris/src/widgets/clickable_card.dart';
|
||||
import 'package:aeris/src/widgets/home_page_sort_menu.dart';
|
||||
import 'package:aeris/src/widgets/loading_widget.dart';
|
||||
import 'package:aeris/src/widgets/pipeline_card.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
|
||||
/// [StatefulWidget] used to display [HomePage] interface
|
||||
@@ -25,70 +25,76 @@ class _HomePageState extends State<HomePage> {
|
||||
Widget build(BuildContext context) {
|
||||
ScrollController listController = ScrollController();
|
||||
return Consumer<PipelineProvider>(
|
||||
builder: (context, provider, _) => AerisPage(
|
||||
actions: [
|
||||
HomePageSortMenu(
|
||||
collectionProvider: provider,
|
||||
),
|
||||
const HomePageMenu()
|
||||
],
|
||||
body: NotificationListener<ScrollEndNotification>(
|
||||
onNotification: (notification) {
|
||||
if (listController.position.atEdge) {
|
||||
if (listController.position.pixels == 0) {
|
||||
print("Loading");
|
||||
setState(() {
|
||||
loading = true;
|
||||
});
|
||||
Future.delayed(const Duration(seconds: 2)).then((_) => setState(() {
|
||||
loading = false;
|
||||
print("Loaded");
|
||||
}));
|
||||
// TODO Call API
|
||||
}
|
||||
}
|
||||
return true;
|
||||
},
|
||||
child: Stack(
|
||||
children: [
|
||||
ListView.builder(
|
||||
padding: const EdgeInsets.only(top: 20, bottom: 20, left: 10, right: 10),
|
||||
controller: listController,
|
||||
itemCount: provider.pipelineCollection.pipelines.length + 1,
|
||||
itemBuilder: (BuildContext context, int index) {
|
||||
if (index == provider.pipelineCollection.pipelines.length) {
|
||||
return ClickableCard(
|
||||
color: Theme.of(context).colorScheme.secondary,
|
||||
body: Padding(
|
||||
padding: const EdgeInsets.only(top: 20, bottom: 20),
|
||||
child: Text("Create a pipeline",
|
||||
textAlign: TextAlign.center,
|
||||
style: TextStyle(
|
||||
color: Theme.of(context).colorScheme.onSecondary,
|
||||
fontSize: 20,
|
||||
fontWeight: FontWeight.w600
|
||||
)
|
||||
),
|
||||
builder: (context, provider, _) => AerisPage(
|
||||
actions: [
|
||||
HomePageSortMenu(
|
||||
collectionProvider: provider,
|
||||
),
|
||||
const HomePageMenu()
|
||||
],
|
||||
body: NotificationListener<ScrollEndNotification>(
|
||||
onNotification: (notification) {
|
||||
if (listController.position.atEdge) {
|
||||
if (listController.position.pixels == 0) {
|
||||
print("Loading");
|
||||
setState(() {
|
||||
loading = true;
|
||||
});
|
||||
Future.delayed(const Duration(seconds: 2))
|
||||
.then((_) => setState(() {
|
||||
loading = false;
|
||||
print("Loaded");
|
||||
}));
|
||||
// TODO Call API
|
||||
}
|
||||
}
|
||||
return true;
|
||||
},
|
||||
child: Stack(
|
||||
children: [
|
||||
ListView.builder(
|
||||
padding: const EdgeInsets.only(
|
||||
top: 20, bottom: 20, left: 10, right: 10),
|
||||
controller: listController,
|
||||
itemCount:
|
||||
provider.pipelineCollection.pipelines.length + 1,
|
||||
itemBuilder: (BuildContext context, int index) {
|
||||
if (index ==
|
||||
provider.pipelineCollection.pipelines.length) {
|
||||
return ClickableCard(
|
||||
color: Theme.of(context).colorScheme.secondary,
|
||||
body: Padding(
|
||||
padding:
|
||||
const EdgeInsets.only(top: 20, bottom: 20),
|
||||
child: Text("Create a pipeline",
|
||||
textAlign: TextAlign.center,
|
||||
style: TextStyle(
|
||||
color: Theme.of(context)
|
||||
.colorScheme
|
||||
.onSecondary,
|
||||
fontSize: 20,
|
||||
fontWeight: FontWeight.w600)),
|
||||
),
|
||||
onTap: () {
|
||||
Navigator.of(context)
|
||||
.pushNamed('/pipeline/new');
|
||||
},
|
||||
);
|
||||
}
|
||||
return PipelineCard(
|
||||
pipeline:
|
||||
provider.pipelineCollection.pipelines[index]);
|
||||
},
|
||||
),
|
||||
onTap: () {
|
||||
Navigator.of(context).pushNamed('/pipeline/new');
|
||||
},
|
||||
);
|
||||
}
|
||||
return PipelineCard(
|
||||
pipeline: provider.pipelineCollection.pipelines[index]
|
||||
);
|
||||
},
|
||||
),
|
||||
loading ? BackdropFilter(
|
||||
filter: ImageFilter.blur(sigmaX: 5.0, sigmaY: 5.0),
|
||||
child: Container()
|
||||
) : Container(),
|
||||
loading ? const LoadingWidget() : Container()
|
||||
],
|
||||
)
|
||||
),
|
||||
)
|
||||
);
|
||||
loading
|
||||
? BackdropFilter(
|
||||
filter:
|
||||
ImageFilter.blur(sigmaX: 5.0, sigmaY: 5.0),
|
||||
child: Container())
|
||||
: Container(),
|
||||
loading ? const LoadingWidget() : Container()
|
||||
],
|
||||
)),
|
||||
));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import 'package:mobile/src/main.dart';
|
||||
import 'package:mobile/src/widgets/aeris_page.dart';
|
||||
import 'package:aeris/src/main.dart';
|
||||
import 'package:aeris/src/widgets/aeris_page.dart';
|
||||
import 'package:flutter_login/flutter_login.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
|
||||
@@ -45,7 +45,8 @@ class LoginPage extends StatelessWidget {
|
||||
debugPrint('Name: $name');
|
||||
return Future.delayed(loginDuration).then((_) {
|
||||
if (!users.containsKey(name)) {
|
||||
return AppLocalizations.of(Aeris.materialKey.currentContext!).userDoesNotExist;
|
||||
return AppLocalizations.of(Aeris.materialKey.currentContext!)
|
||||
.userDoesNotExist;
|
||||
}
|
||||
return null;
|
||||
});
|
||||
|
||||
@@ -1,14 +1,14 @@
|
||||
import 'package:mobile/src/main.dart';
|
||||
import 'package:mobile/src/providers/pipelines_provider.dart';
|
||||
import 'package:mobile/src/views/setup_action_page.dart';
|
||||
import 'package:mobile/src/widgets/action_card_popup_menu.dart';
|
||||
import 'package:mobile/src/widgets/aeris_card_page.dart';
|
||||
import 'package:mobile/src/widgets/colored_clickable_card.dart';
|
||||
import 'package:mobile/src/widgets/warning_dialog.dart';
|
||||
import 'package:mobile/src/widgets/action_card.dart';
|
||||
import 'package:aeris/src/main.dart';
|
||||
import 'package:aeris/src/providers/pipelines_provider.dart';
|
||||
import 'package:aeris/src/views/setup_action_page.dart';
|
||||
import 'package:aeris/src/widgets/action_card_popup_menu.dart';
|
||||
import 'package:aeris/src/widgets/aeris_card_page.dart';
|
||||
import 'package:aeris/src/widgets/colored_clickable_card.dart';
|
||||
import 'package:aeris/src/widgets/warning_dialog.dart';
|
||||
import 'package:aeris/src/widgets/action_card.dart';
|
||||
import 'package:flutter_switch/flutter_switch.dart';
|
||||
import 'package:mobile/src/models/reaction.dart';
|
||||
import 'package:mobile/src/models/pipeline.dart';
|
||||
import 'package:aeris/src/models/reaction.dart';
|
||||
import 'package:aeris/src/models/pipeline.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:mobile/src/models/pipeline.dart';
|
||||
import 'package:mobile/src/models/reaction.dart';
|
||||
import 'package:mobile/src/models/service.dart';
|
||||
import 'package:mobile/src/providers/pipelines_provider.dart';
|
||||
import 'package:mobile/src/providers/user_services_provider.dart';
|
||||
import 'package:mobile/src/widgets/action_card.dart';
|
||||
import 'package:mobile/src/widgets/aeris_card_page.dart';
|
||||
import 'package:mobile/src/widgets/warning_dialog.dart';
|
||||
import 'package:aeris/src/models/pipeline.dart';
|
||||
import 'package:aeris/src/models/reaction.dart';
|
||||
import 'package:aeris/src/models/service.dart';
|
||||
import 'package:aeris/src/providers/pipelines_provider.dart';
|
||||
import 'package:aeris/src/providers/user_services_provider.dart';
|
||||
import 'package:aeris/src/widgets/action_card.dart';
|
||||
import 'package:aeris/src/widgets/aeris_card_page.dart';
|
||||
import 'package:aeris/src/widgets/warning_dialog.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
|
||||
|
||||
@@ -93,6 +93,7 @@ class ServicePage extends StatelessWidget {
|
||||
}
|
||||
return false;
|
||||
}),
|
||||
|
||||
/// TODO Remove service from provider
|
||||
provider.notifyListeners(),
|
||||
print("Disconnect")
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:mobile/src/models/action.dart' as aeris;
|
||||
import 'package:mobile/src/models/service.dart';
|
||||
import 'package:mobile/src/models/trigger.dart';
|
||||
import 'package:mobile/src/widgets/action_form.dart';
|
||||
import 'package:mobile/src/widgets/aeris_card_page.dart';
|
||||
import 'package:aeris/src/models/action.dart' as aeris;
|
||||
import 'package:aeris/src/models/service.dart';
|
||||
import 'package:aeris/src/models/trigger.dart';
|
||||
import 'package:aeris/src/widgets/action_form.dart';
|
||||
import 'package:aeris/src/widgets/aeris_card_page.dart';
|
||||
import 'package:expandable/expandable.dart';
|
||||
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
|
||||
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:mobile/src/views/setup_action_page.dart';
|
||||
import 'package:mobile/src/widgets/aeris_popup_menu.dart';
|
||||
import 'package:mobile/src/widgets/aeris_popup_menu_item.dart';
|
||||
import 'package:mobile/src/models/action.dart' as aeris;
|
||||
import 'package:aeris/src/views/setup_action_page.dart';
|
||||
import 'package:aeris/src/widgets/aeris_popup_menu.dart';
|
||||
import 'package:aeris/src/widgets/aeris_popup_menu_item.dart';
|
||||
import 'package:aeris/src/models/action.dart' as aeris;
|
||||
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
|
||||
|
||||
/// [StatelessWidget] displayed as a PopupMenu
|
||||
@@ -36,6 +36,7 @@ class ActionCardPopupMenu extends StatelessWidget {
|
||||
onSelected: (value) {
|
||||
if (value == '/pipeline/action/del') {
|
||||
onDelete!();
|
||||
|
||||
///TODO delete from db
|
||||
} else {
|
||||
Map object = value as Map;
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:mobile/src/widgets/background/animated_background.dart';
|
||||
import 'package:aeris/src/widgets/background/animated_background.dart';
|
||||
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
|
||||
|
||||
/// Application base page, holds scaffold and background
|
||||
class AerisPage extends StatelessWidget {
|
||||
/// Body of the page
|
||||
@@ -23,24 +24,24 @@ class AerisPage extends StatelessWidget {
|
||||
return Scaffold(
|
||||
resizeToAvoidBottomInset: false,
|
||||
body: SizedBox(
|
||||
width: MediaQuery.of(context).size.width,
|
||||
height: MediaQuery.of(context).size.height,
|
||||
child: Stack(children: <Widget>[const AnimatedBackground(), body])
|
||||
),
|
||||
width: MediaQuery.of(context).size.width,
|
||||
height: MediaQuery.of(context).size.height,
|
||||
child: Stack(children: <Widget>[const AnimatedBackground(), body])),
|
||||
backgroundColor: Theme.of(context).colorScheme.primary,
|
||||
appBar: displayAppbar ? AppBar(
|
||||
title: const Text("AERIS"),
|
||||
centerTitle: true,
|
||||
elevation: 0,
|
||||
leading: Container(),
|
||||
actions: [
|
||||
for (Widget action in actions)
|
||||
Padding(
|
||||
child: action,
|
||||
padding: const EdgeInsets.only(right: 10.0)
|
||||
),
|
||||
],
|
||||
) : null,
|
||||
appBar: displayAppbar
|
||||
? AppBar(
|
||||
title: const Text("AERIS"),
|
||||
centerTitle: true,
|
||||
elevation: 0,
|
||||
leading: Container(),
|
||||
actions: [
|
||||
for (Widget action in actions)
|
||||
Padding(
|
||||
child: action,
|
||||
padding: const EdgeInsets.only(right: 10.0)),
|
||||
],
|
||||
)
|
||||
: null,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:mobile/src/widgets/clickable_card.dart';
|
||||
import 'package:aeris/src/widgets/clickable_card.dart';
|
||||
|
||||
/// Clickable card with simple text and color
|
||||
class ColoredClickableCard extends StatelessWidget {
|
||||
@@ -11,28 +11,23 @@ class ColoredClickableCard extends StatelessWidget {
|
||||
|
||||
final void Function() onTap;
|
||||
const ColoredClickableCard(
|
||||
{Key? key,
|
||||
required this.text,
|
||||
required this.color,
|
||||
required this.onTap
|
||||
}) : super(key: key);
|
||||
{Key? key, required this.text, required this.color, required this.onTap})
|
||||
: super(key: key);
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) => ClickableCard(
|
||||
color: color,
|
||||
elevation: 5,
|
||||
body: Container(
|
||||
child: Text(
|
||||
text,
|
||||
textAlign: TextAlign.center,
|
||||
style: TextStyle(
|
||||
color: Theme.of(context).colorScheme.onSecondary,
|
||||
fontSize: 20,
|
||||
fontWeight: FontWeight.w600
|
||||
),
|
||||
),
|
||||
width: double.infinity,
|
||||
padding: const EdgeInsets.only(top: 15, bottom: 15)),
|
||||
onTap: onTap
|
||||
);
|
||||
color: color,
|
||||
elevation: 5,
|
||||
body: Container(
|
||||
child: Text(
|
||||
text,
|
||||
textAlign: TextAlign.center,
|
||||
style: TextStyle(
|
||||
color: Theme.of(context).colorScheme.onSecondary,
|
||||
fontSize: 20,
|
||||
fontWeight: FontWeight.w600),
|
||||
),
|
||||
width: double.infinity,
|
||||
padding: const EdgeInsets.only(top: 15, bottom: 15)),
|
||||
onTap: onTap);
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:mobile/src/widgets/aeris_popup_menu.dart';
|
||||
import 'package:mobile/src/widgets/aeris_popup_menu_item.dart';
|
||||
import 'package:aeris/src/widgets/aeris_popup_menu.dart';
|
||||
import 'package:aeris/src/widgets/aeris_popup_menu_item.dart';
|
||||
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
|
||||
|
||||
/// Menu for the Home Page
|
||||
@@ -17,7 +17,6 @@ class HomePageMenu extends StatelessWidget {
|
||||
title: AppLocalizations.of(context).services,
|
||||
value: "/services"),
|
||||
AerisPopupMenuItem(
|
||||
|
||||
context: context,
|
||||
icon: Icons.logout,
|
||||
title: AppLocalizations.of(context).logout,
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:mobile/src/models/pipeline_collection.dart';
|
||||
import 'package:mobile/src/providers/pipelines_provider.dart';
|
||||
import 'package:mobile/src/widgets/aeris_popup_menu.dart';
|
||||
import 'package:mobile/src/widgets/aeris_popup_menu_item.dart';
|
||||
import 'package:aeris/src/models/pipeline_collection.dart';
|
||||
import 'package:aeris/src/providers/pipelines_provider.dart';
|
||||
import 'package:aeris/src/widgets/aeris_popup_menu.dart';
|
||||
import 'package:aeris/src/widgets/aeris_popup_menu_item.dart';
|
||||
import 'package:recase/recase.dart';
|
||||
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:mobile/src/models/pipeline.dart';
|
||||
import 'package:mobile/src/views/pipeline_detail_page.dart';
|
||||
import 'package:mobile/src/widgets/clickable_card.dart';
|
||||
import 'package:aeris/src/models/pipeline.dart';
|
||||
import 'package:aeris/src/views/pipeline_detail_page.dart';
|
||||
import 'package:aeris/src/widgets/clickable_card.dart';
|
||||
|
||||
/// Widget for Action-reaction card on home page
|
||||
class PipelineCard extends StatefulWidget {
|
||||
@@ -26,71 +26,62 @@ class _PipelineCardState extends State<PipelineCard> {
|
||||
array + [logo, const SizedBox(height: 5)]).toList();
|
||||
reactionLogos.removeLast();
|
||||
return ClickableCard(
|
||||
onTap: () {
|
||||
Navigator.pushNamed(context, '/pipeline', arguments: PipelineDetailPageArguments(widget.pipeline)).then((value) => setState(() {}));
|
||||
},
|
||||
color: widget.pipeline.enabled == false
|
||||
? const Color.fromARGB(115, 34, 34, 34).withOpacity(0.8)
|
||||
: null,
|
||||
body: Container(
|
||||
width: double.infinity,
|
||||
padding: const EdgeInsets.only(top: 20, bottom: 20, left: 40),
|
||||
child: Row(
|
||||
children: [
|
||||
Expanded(
|
||||
flex: 4,
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Text(widget.pipeline.name,
|
||||
style: TextStyle(
|
||||
fontSize: 25,
|
||||
color: Theme.of(context).colorScheme.onSurface,
|
||||
)
|
||||
),
|
||||
const SizedBox(height: 10),
|
||||
Text(widget.pipeline.trigger.lastToString(),
|
||||
style: TextStyle(
|
||||
color: widget.pipeline.enabled == false
|
||||
? Theme.of(context).colorScheme.onSurface
|
||||
: const Color.fromARGB(255, 83, 83, 83),
|
||||
fontSize: 15
|
||||
)
|
||||
),
|
||||
],
|
||||
)
|
||||
),
|
||||
Expanded(
|
||||
flex: 4,
|
||||
child: Row(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: [
|
||||
widget.pipeline.trigger.service.getLogo(),
|
||||
const SizedBox(width: 10),
|
||||
Icon(
|
||||
Icons.arrow_forward,
|
||||
color: Theme.of(context).colorScheme.onSurface,
|
||||
),
|
||||
const SizedBox(width: 10),
|
||||
Column(children: reactionLogos)
|
||||
]
|
||||
)
|
||||
),
|
||||
Expanded(
|
||||
flex: 2,
|
||||
child: Column(
|
||||
children: [
|
||||
Icon(
|
||||
Icons.arrow_forward_ios,
|
||||
color: Theme.of(context).colorScheme.onSurface,
|
||||
)
|
||||
],
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
crossAxisAlignment: CrossAxisAlignment.center)
|
||||
),
|
||||
]
|
||||
)
|
||||
)
|
||||
);
|
||||
onTap: () {
|
||||
Navigator.pushNamed(context, '/pipeline',
|
||||
arguments: PipelineDetailPageArguments(widget.pipeline))
|
||||
.then((value) => setState(() {}));
|
||||
},
|
||||
color: widget.pipeline.enabled == false
|
||||
? const Color.fromARGB(115, 34, 34, 34).withOpacity(0.8)
|
||||
: null,
|
||||
body: Container(
|
||||
width: double.infinity,
|
||||
padding: const EdgeInsets.only(top: 20, bottom: 20, left: 40),
|
||||
child: Row(children: [
|
||||
Expanded(
|
||||
flex: 4,
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Text(widget.pipeline.name,
|
||||
style: TextStyle(
|
||||
fontSize: 25,
|
||||
color: Theme.of(context).colorScheme.onSurface,
|
||||
)),
|
||||
const SizedBox(height: 10),
|
||||
Text(widget.pipeline.trigger.lastToString(),
|
||||
style: TextStyle(
|
||||
color: widget.pipeline.enabled == false
|
||||
? Theme.of(context).colorScheme.onSurface
|
||||
: const Color.fromARGB(255, 83, 83, 83),
|
||||
fontSize: 15)),
|
||||
],
|
||||
)),
|
||||
Expanded(
|
||||
flex: 4,
|
||||
child: Row(
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
children: [
|
||||
widget.pipeline.trigger.service.getLogo(),
|
||||
const SizedBox(width: 10),
|
||||
Icon(
|
||||
Icons.arrow_forward,
|
||||
color: Theme.of(context).colorScheme.onSurface,
|
||||
),
|
||||
const SizedBox(width: 10),
|
||||
Column(children: reactionLogos)
|
||||
])),
|
||||
Expanded(
|
||||
flex: 2,
|
||||
child: Column(
|
||||
children: [
|
||||
Icon(
|
||||
Icons.arrow_forward_ios,
|
||||
color: Theme.of(context).colorScheme.onSurface,
|
||||
)
|
||||
],
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
crossAxisAlignment: CrossAxisAlignment.center)),
|
||||
])));
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -1,4 +1,4 @@
|
||||
name: mobile
|
||||
name: aeris
|
||||
description: Mobile application for Aeris
|
||||
|
||||
# The following line prevents the package from being accidentally published to
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:mobile/src/main.dart';
|
||||
import 'package:aeris/src/main.dart';
|
||||
|
||||
void main() {
|
||||
testWidgets('Counter increments smoke test', (WidgetTester tester) async {
|
||||
|
||||
Reference in New Issue
Block a user