Mobile Client: Signin from service

This commit is contained in:
Arthi-chaud
2022-03-06 00:30:40 +01:00
parent 845006ba8a
commit 97beed8cec
6 changed files with 33 additions and 9 deletions
+2 -1
View File
@@ -49,5 +49,6 @@
"authenticatedToNoService": "You are not authenticated to any services.",
"connectService": "Connect service",
"cantEnablePipeline": "You can't enable this pipeline because it depends on a service that is not connected",
"from": "from"
"from": "from",
"cantSignInFromService": "Can't sign in using this service"
}
+2 -1
View File
@@ -49,5 +49,6 @@
"authenticatedToNoService": "Aucun service n'est connecté",
"connectService": "Connexion aux services",
"cantEnablePipeline": "Impossible d'activer la pipeline car elle dépend d'un service qui n'est pas connecté",
"from": "de"
"from": "de",
"cantSignInFromService": "Impossible de se connecter via ce service"
}
+19
View File
@@ -5,6 +5,7 @@ import 'package:flutter/material.dart';
import 'dart:core';
import 'package:get_it/get_it.dart';
import 'package:line_icons/line_icon.dart';
/// Data class used to store data about a service (logo, url, name)
class Service {
@@ -87,4 +88,22 @@ class Service {
}
throw Exception("Unknown service");
}
IconData getIcon() {
switch (this) {
case Service.anilist():
return LineIcon.buysellads().icon!;
case Service.spotify():
return LineIcon.spotify().icon!;
case Service.github():
return LineIcon.alternateGithub().icon!;
case Service.youtube():
return LineIcon.youtube().icon!;
case Service.twitter():
return LineIcon.twitter().icon!;
case Service.discord():
return LineIcon.discord().icon!;
}
throw ("No icon available");
}
}
+4 -2
View File
@@ -1,4 +1,5 @@
import 'package:aeris/src/aeris_api.dart';
import 'package:aeris/src/providers/services_provider.dart';
import 'package:aeris/src/views/create_pipeline_page.dart';
import 'package:aeris/src/views/service_page.dart';
import 'package:aeris/src/widgets/aeris_card_page.dart';
@@ -44,7 +45,8 @@ class _HomePageState extends State<HomePage> {
},
warnedAction: AppLocalizations.of(context).logout)),
);
return Consumer<PipelineProvider>(
return Consumer<ServiceProvider>(
builder: (_, __, ___) => Consumer<PipelineProvider>(
builder: (context, provider, _) => AerisPage(
floatingActionButton: FloatingActionButton(
onPressed: () => showAerisCardPage(
@@ -93,6 +95,6 @@ class _HomePageState extends State<HomePage> {
pipeline: provider.getPipelineAt(index),
),
)),
));
)));
}
}
+4 -4
View File
@@ -6,7 +6,6 @@ import 'package:flutter_login/flutter_login.dart';
import 'package:flutter/material.dart';
import 'package:flutter_gen/gen_l10n/app_localizations.dart';
import 'package:get_it/get_it.dart';
import 'package:line_icons/line_icon.dart';
import 'package:url_launcher/url_launcher.dart';
/// Login Page Widget
@@ -63,10 +62,11 @@ class LoginPage extends StatelessWidget {
loginProviders: [
for (var service in Service.all().where((element) => element != const Service.utils()).toList())
LoginProvider(
icon: LineIcon.alternateGithub().icon,
icon: service.getIcon(),
label: service.name,
callback: () {
launch(Uri.parse(service.authSignInUrl).toString(), forceSafariVC: false);
callback: () async {
await launch(Uri.parse(service.authSignInUrl).toString(), forceSafariVC: false);
return GetIt.I<AerisAPI>().isConnected ? null : AppLocalizations.of(context).cantSignInFromService;
}
)
],
+2 -1
View File
@@ -47,7 +47,8 @@ class _SetupActionPageState extends State<SetupActionPage> {
void initState() {
super.initState();
serviceState = widget.action.service;
availableActions = GetIt.I<AerisAPI>().getActionsFor(serviceState, widget.action);
var services = Provider.of<ServiceProvider>(context, listen: false).connectedServices;
availableActions = GetIt.I<AerisAPI>().getActionsFor(services.contains(serviceState) ? serviceState : services[0], widget.action);
}
Widget serviceDropdown(List<Service> services) {