♻️ Refactored and joined the Solar Network
This commit is contained in:
parent
f3da8f5349
commit
5da657a73c
17
README.md
17
README.md
@ -1,16 +1,3 @@
|
||||
# goatagent
|
||||
# SolarAgent
|
||||
|
||||
The official Application of Goatworks Global Hydrogen Network
|
||||
|
||||
## Getting Started
|
||||
|
||||
This project is a starting point for a Flutter application.
|
||||
|
||||
A few resources to get you started if this is your first Flutter project:
|
||||
|
||||
- [Lab: Write your first Flutter app](https://docs.flutter.dev/get-started/codelab)
|
||||
- [Cookbook: Useful Flutter samples](https://docs.flutter.dev/cookbook)
|
||||
|
||||
For help getting started with Flutter development, view the
|
||||
[online documentation](https://docs.flutter.dev/), which offers tutorials,
|
||||
samples, guidance on mobile development, and a full API reference.
|
||||
The official Solar Network moblie application.
|
@ -23,7 +23,7 @@ if (flutterVersionName == null) {
|
||||
}
|
||||
|
||||
android {
|
||||
namespace "studio.smartsheep.goatagent"
|
||||
namespace "dev.solsynth.solaragent"
|
||||
compileSdkVersion flutter.compileSdkVersion
|
||||
ndkVersion flutter.ndkVersion
|
||||
|
||||
@ -41,7 +41,7 @@ android {
|
||||
}
|
||||
|
||||
defaultConfig {
|
||||
applicationId "studio.smartsheep.goatagent"
|
||||
applicationId "dev.solsynth.solaragent"
|
||||
// You can update the following values to match your application needs.
|
||||
// For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration.
|
||||
minSdkVersion flutter.minSdkVersion
|
||||
@ -50,7 +50,7 @@ android {
|
||||
versionName flutterVersionName
|
||||
manifestPlaceholders = [
|
||||
applicationName : 'android.app.Application',
|
||||
appAuthRedirectScheme: 'goatagent'
|
||||
appAuthRedirectScheme: 'solaragent'
|
||||
]
|
||||
}
|
||||
|
||||
|
@ -9,7 +9,7 @@
|
||||
"client_info": {
|
||||
"mobilesdk_app_id": "1:659822066072:android:39e699282c97a7cfc013ed",
|
||||
"android_client_info": {
|
||||
"package_name": "studio.smartsheep.goatagent"
|
||||
"package_name": "dev.solsynth.solaragent"
|
||||
}
|
||||
},
|
||||
"oauth_client": [
|
||||
|
@ -1,6 +1,6 @@
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<application
|
||||
android:label="GoatAgent"
|
||||
android:label="SolarAgent"
|
||||
android:name="${applicationName}"
|
||||
android:icon="@mipmap/ic_launcher">
|
||||
<activity
|
||||
|
@ -1,4 +1,4 @@
|
||||
package studio.smartsheep.goatagent
|
||||
package dev.solsynth.solaragent
|
||||
|
||||
import io.flutter.embedding.android.FlutterActivity
|
||||
|
||||
|
@ -9,7 +9,7 @@
|
||||
"client_info": {
|
||||
"mobilesdk_app_id": "1:659822066072:android:39e699282c97a7cfc013ed",
|
||||
"android_client_info": {
|
||||
"package_name": "studio.smartsheep.goatagent"
|
||||
"package_name": "dev.solsynth.solaragent"
|
||||
}
|
||||
},
|
||||
"oauth_client": [
|
||||
|
@ -9,7 +9,7 @@
|
||||
<key>PLIST_VERSION</key>
|
||||
<string>1</string>
|
||||
<key>BUNDLE_ID</key>
|
||||
<string>studio.smartsheep.goatagent</string>
|
||||
<string>dev.solsynth.solaragent</string>
|
||||
<key>PROJECT_ID</key>
|
||||
<string>smartsheep-hydrogen</string>
|
||||
<key>STORAGE_BUCKET</key>
|
||||
|
@ -221,7 +221,7 @@
|
||||
isa = PBXProject;
|
||||
attributes = {
|
||||
BuildIndependentTargetsInParallel = YES;
|
||||
LastUpgradeCheck = 1430;
|
||||
LastUpgradeCheck = 1510;
|
||||
ORGANIZATIONNAME = "";
|
||||
TargetAttributes = {
|
||||
331C8080294A63A400263BE5 = {
|
||||
@ -505,14 +505,14 @@
|
||||
DEVELOPMENT_TEAM = W7HPZ53V6B;
|
||||
ENABLE_BITCODE = NO;
|
||||
INFOPLIST_FILE = Runner/Info.plist;
|
||||
INFOPLIST_KEY_CFBundleDisplayName = GoatAgent;
|
||||
INFOPLIST_KEY_CFBundleDisplayName = SolarAgent;
|
||||
INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.utilities";
|
||||
LD_RUNPATH_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
"@executable_path/Frameworks",
|
||||
);
|
||||
MARKETING_VERSION = 1.0.0;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = studio.smartsheep.goatagent;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = dev.solsynth.solaragent;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
|
||||
SWIFT_VERSION = 5.0;
|
||||
@ -529,7 +529,7 @@
|
||||
CURRENT_PROJECT_VERSION = 1;
|
||||
GENERATE_INFOPLIST_FILE = YES;
|
||||
MARKETING_VERSION = 1.0;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = studio.smartsheep.goatagent.RunnerTests;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = dev.solsynth.solaragent.RunnerTests;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
|
||||
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
||||
@ -547,7 +547,7 @@
|
||||
CURRENT_PROJECT_VERSION = 1;
|
||||
GENERATE_INFOPLIST_FILE = YES;
|
||||
MARKETING_VERSION = 1.0;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = studio.smartsheep.goatagent.RunnerTests;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = dev.solsynth.solaragent.RunnerTests;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SWIFT_VERSION = 5.0;
|
||||
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner";
|
||||
@ -563,7 +563,7 @@
|
||||
CURRENT_PROJECT_VERSION = 1;
|
||||
GENERATE_INFOPLIST_FILE = YES;
|
||||
MARKETING_VERSION = 1.0;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = studio.smartsheep.goatagent.RunnerTests;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = dev.solsynth.solaragent.RunnerTests;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SWIFT_VERSION = 5.0;
|
||||
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner";
|
||||
@ -694,14 +694,14 @@
|
||||
DEVELOPMENT_TEAM = W7HPZ53V6B;
|
||||
ENABLE_BITCODE = NO;
|
||||
INFOPLIST_FILE = Runner/Info.plist;
|
||||
INFOPLIST_KEY_CFBundleDisplayName = GoatAgent;
|
||||
INFOPLIST_KEY_CFBundleDisplayName = SolarAgent;
|
||||
INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.utilities";
|
||||
LD_RUNPATH_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
"@executable_path/Frameworks",
|
||||
);
|
||||
MARKETING_VERSION = 1.0.0;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = studio.smartsheep.goatagent;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = dev.solsynth.solaragent;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
|
||||
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
||||
@ -721,14 +721,14 @@
|
||||
DEVELOPMENT_TEAM = W7HPZ53V6B;
|
||||
ENABLE_BITCODE = NO;
|
||||
INFOPLIST_FILE = Runner/Info.plist;
|
||||
INFOPLIST_KEY_CFBundleDisplayName = GoatAgent;
|
||||
INFOPLIST_KEY_CFBundleDisplayName = SolarAgent;
|
||||
INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.utilities";
|
||||
LD_RUNPATH_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
"@executable_path/Frameworks",
|
||||
);
|
||||
MARKETING_VERSION = 1.0.0;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = studio.smartsheep.goatagent;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = dev.solsynth.solaragent;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
|
||||
SWIFT_VERSION = 5.0;
|
||||
|
@ -1,6 +1,6 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Scheme
|
||||
LastUpgradeVersion = "1430"
|
||||
LastUpgradeVersion = "1510"
|
||||
version = "1.3">
|
||||
<BuildAction
|
||||
parallelizeBuildables = "YES"
|
||||
|
@ -9,7 +9,7 @@
|
||||
<key>PLIST_VERSION</key>
|
||||
<string>1</string>
|
||||
<key>BUNDLE_ID</key>
|
||||
<string>studio.smartsheep.goatagent</string>
|
||||
<string>dev.solsynth.solaragent</string>
|
||||
<key>PROJECT_ID</key>
|
||||
<string>smartsheep-hydrogen</string>
|
||||
<key>STORAGE_BUCKET</key>
|
||||
|
@ -7,7 +7,7 @@
|
||||
<key>CFBundleDevelopmentRegion</key>
|
||||
<string>$(DEVELOPMENT_LANGUAGE)</string>
|
||||
<key>CFBundleDisplayName</key>
|
||||
<string>GoatAgent</string>
|
||||
<string>SolarAgent</string>
|
||||
<key>CFBundleExecutable</key>
|
||||
<string>$(EXECUTABLE_NAME)</string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
@ -15,7 +15,7 @@
|
||||
<key>CFBundleInfoDictionaryVersion</key>
|
||||
<string>6.0</string>
|
||||
<key>CFBundleName</key>
|
||||
<string>GoatAgent</string>
|
||||
<string>SolarAgent</string>
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>APPL</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
|
@ -3,34 +3,33 @@ import 'dart:io';
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_secure_storage/flutter_secure_storage.dart';
|
||||
import 'package:goatagent/firebase.dart';
|
||||
import 'package:goatagent/screens/auth.dart';
|
||||
import 'package:solaragent/firebase.dart';
|
||||
import 'package:solaragent/preferences.dart';
|
||||
import 'package:solaragent/screens/auth.dart';
|
||||
import 'package:oauth2/oauth2.dart' as oauth2;
|
||||
|
||||
final authClient = AuthGuard();
|
||||
|
||||
class AuthGuard {
|
||||
static final AuthGuard _singleton = AuthGuard._internal();
|
||||
AuthGuard();
|
||||
|
||||
final deviceEndpoint =
|
||||
Uri.parse('https://id.smartsheep.studio/api/notifications/subscribe');
|
||||
Uri.parse('https://id.solsynth.dev/api/notifications/subscribe');
|
||||
final authorizationEndpoint =
|
||||
Uri.parse('https://id.smartsheep.studio/auth/o/connect');
|
||||
Uri.parse('https://id.solsynth.dev/auth/o/connect');
|
||||
final tokenEndpoint =
|
||||
Uri.parse('https://id.smartsheep.studio/api/auth/token');
|
||||
Uri.parse('https://id.solsynth.dev/api/auth/token');
|
||||
final userinfoEndpoint =
|
||||
Uri.parse('https://id.smartsheep.studio/api/users/me');
|
||||
final redirectUrl = Uri.parse('goatagent://auth');
|
||||
Uri.parse('https://id.solsynth.dev/api/users/me');
|
||||
final redirectUrl = Uri.parse('solaragent://auth');
|
||||
|
||||
static const clientId = "goatagent";
|
||||
static const clientId = "solaragent";
|
||||
static const clientSecret = "_F4%q2Eea3";
|
||||
|
||||
static const storage = FlutterSecureStorage();
|
||||
static const storageKey = "identity";
|
||||
static const profileKey = "profiles";
|
||||
|
||||
factory AuthGuard() {
|
||||
return _singleton;
|
||||
}
|
||||
|
||||
oauth2.Client? client;
|
||||
|
||||
Future<bool> pickClient() async {
|
||||
@ -68,11 +67,6 @@ class AuthGuard {
|
||||
var authorizationUrl = grant.getAuthorizationUrl(redirectUrl);
|
||||
|
||||
if (Platform.isAndroid || Platform.isIOS) {
|
||||
// Let Goatpass know it is embed in an app
|
||||
authorizationUrl = authorizationUrl.replace(
|
||||
queryParameters: {"embedded": "yes"}
|
||||
..addAll(authorizationUrl.queryParameters));
|
||||
|
||||
// Use WebView to get authorization url
|
||||
var responseUrl = await Navigator.of(context, rootNavigator: true).push(
|
||||
MaterialPageRoute(
|
||||
|
@ -67,7 +67,7 @@ class DefaultFirebaseOptions {
|
||||
messagingSenderId: '659822066072',
|
||||
projectId: 'smartsheep-hydrogen',
|
||||
storageBucket: 'smartsheep-hydrogen.appspot.com',
|
||||
iosBundleId: 'studio.smartsheep.goatagent',
|
||||
iosBundleId: 'dev.solsynth.solaragent',
|
||||
);
|
||||
|
||||
static const FirebaseOptions macos = FirebaseOptions(
|
||||
@ -76,6 +76,6 @@ class DefaultFirebaseOptions {
|
||||
messagingSenderId: '659822066072',
|
||||
projectId: 'smartsheep-hydrogen',
|
||||
storageBucket: 'smartsheep-hydrogen.appspot.com',
|
||||
iosBundleId: 'studio.smartsheep.goatagent.RunnerTests',
|
||||
iosBundleId: 'dev.solsynth.solaragent.RunnerTests',
|
||||
);
|
||||
}
|
||||
|
@ -1,114 +0,0 @@
|
||||
import 'package:firebase_messaging/firebase_messaging.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:goatagent/screens/account.dart';
|
||||
import 'package:goatagent/screens/dashboard.dart';
|
||||
import 'package:goatagent/screens/notifications.dart';
|
||||
|
||||
class AgentNavigation extends StatefulWidget {
|
||||
AgentNavigation({super.key});
|
||||
|
||||
static const items = [
|
||||
{'label': 'Dashboard', 'icon': Icon(Icons.home)},
|
||||
{'label': 'Notifications', 'icon': Icon(Icons.notifications)},
|
||||
{'label': 'Account', 'icon': Icon(Icons.account_circle)},
|
||||
];
|
||||
|
||||
final bottomDestinations = items
|
||||
.map((element) => BottomNavigationBarItem(
|
||||
icon: element["icon"] as Widget,
|
||||
label: element["label"] as String,
|
||||
))
|
||||
.toList();
|
||||
final railDestinations = items
|
||||
.map((element) => NavigationRailDestination(
|
||||
icon: element["icon"] as Widget,
|
||||
label: Text(element["label"] as String),
|
||||
))
|
||||
.toList();
|
||||
|
||||
@override
|
||||
State<AgentNavigation> createState() => _AgentNavigationState();
|
||||
}
|
||||
|
||||
class _AgentNavigationState extends State<AgentNavigation> {
|
||||
int _view = 0;
|
||||
|
||||
Future<void> initMessage(BuildContext context) async {
|
||||
void navigate() {
|
||||
setState(() {
|
||||
_view = 1;
|
||||
});
|
||||
}
|
||||
|
||||
RemoteMessage? initialMessage =
|
||||
await FirebaseMessaging.instance.getInitialMessage();
|
||||
|
||||
if (initialMessage != null) {
|
||||
navigate();
|
||||
}
|
||||
|
||||
FirebaseMessaging.onMessageOpenedApp.listen((event) {
|
||||
navigate();
|
||||
});
|
||||
}
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
initMessage(context);
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final isLargeScreen = MediaQuery.of(context).size.width > 640;
|
||||
|
||||
final content = Stack(
|
||||
children: [
|
||||
Offstage(
|
||||
offstage: _view != 0,
|
||||
child: const DashboardScreen(),
|
||||
),
|
||||
Offstage(
|
||||
offstage: _view != 1,
|
||||
child: const NotificationScreen(),
|
||||
),
|
||||
Offstage(
|
||||
offstage: _view != 2,
|
||||
child: const AccountScreen(),
|
||||
)
|
||||
],
|
||||
);
|
||||
|
||||
if (isLargeScreen) {
|
||||
return Row(children: <Widget>[
|
||||
NavigationRail(
|
||||
selectedIndex: _view,
|
||||
groupAlignment: 0,
|
||||
onDestinationSelected: (int index) {
|
||||
setState(() {
|
||||
_view = index;
|
||||
});
|
||||
},
|
||||
labelType: NavigationRailLabelType.all,
|
||||
destinations: widget.railDestinations,
|
||||
),
|
||||
const VerticalDivider(thickness: 1, width: 1),
|
||||
Expanded(child: content),
|
||||
]);
|
||||
} else {
|
||||
return Scaffold(
|
||||
body: content,
|
||||
bottomNavigationBar: BottomNavigationBar(
|
||||
currentIndex: _view,
|
||||
showUnselectedLabels: false,
|
||||
items: widget.bottomDestinations,
|
||||
onTap: (index) {
|
||||
setState(() {
|
||||
_view = index;
|
||||
});
|
||||
},
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
@ -1,8 +1,8 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:goatagent/auth.dart';
|
||||
import 'package:goatagent/firebase.dart';
|
||||
|
||||
import 'layouts/navigation.dart';
|
||||
import 'package:solaragent/auth.dart';
|
||||
import 'package:solaragent/firebase.dart';
|
||||
import 'package:solaragent/router.dart';
|
||||
import 'package:solaragent/widgets/navigation.dart';
|
||||
|
||||
void main() async {
|
||||
WidgetsFlutterBinding.ensureInitialized();
|
||||
@ -13,39 +13,51 @@ void main() async {
|
||||
print(e);
|
||||
}
|
||||
|
||||
await AuthGuard().pickClient();
|
||||
await authClient.pickClient();
|
||||
|
||||
runApp(const GoatAgent());
|
||||
runApp(const SolarAgent());
|
||||
}
|
||||
|
||||
class GoatAgent extends StatelessWidget {
|
||||
const GoatAgent({super.key});
|
||||
class SolarAgent extends StatelessWidget {
|
||||
const SolarAgent({super.key});
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return MaterialApp(
|
||||
title: 'GoatAgent',
|
||||
return MaterialApp.router(
|
||||
title: 'SolarAgent',
|
||||
theme: ThemeData(
|
||||
brightness: Brightness.light,
|
||||
colorScheme: ColorScheme.fromSwatch(
|
||||
primarySwatch: Colors.indigo,
|
||||
accentColor: Colors.indigoAccent,
|
||||
backgroundColor: Colors.white,
|
||||
brightness: Brightness.light,
|
||||
primarySwatch: Colors.indigo,
|
||||
accentColor: Colors.indigoAccent,
|
||||
backgroundColor: Colors.white,
|
||||
brightness: Brightness.light,
|
||||
),
|
||||
useMaterial3: true,
|
||||
),
|
||||
darkTheme: ThemeData(
|
||||
brightness: Brightness.dark,
|
||||
colorScheme: ColorScheme.fromSwatch(
|
||||
primarySwatch: Colors.indigo,
|
||||
accentColor: Colors.indigoAccent,
|
||||
backgroundColor: Colors.black,
|
||||
brightness: Brightness.dark,
|
||||
primarySwatch: Colors.indigo,
|
||||
accentColor: Colors.indigoAccent,
|
||||
backgroundColor: Colors.black,
|
||||
brightness: Brightness.dark,
|
||||
),
|
||||
useMaterial3: true,
|
||||
),
|
||||
home: AgentNavigation(),
|
||||
routerConfig: router,
|
||||
builder: (context, child) => Overlay(
|
||||
initialEntries: [
|
||||
OverlayEntry(
|
||||
builder: (context) => SafeArea(
|
||||
child: Scaffold(
|
||||
body: child,
|
||||
bottomNavigationBar: const AgentNavigation(),
|
||||
),
|
||||
),
|
||||
)
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
5
lib/preferences.dart
Normal file
5
lib/preferences.dart
Normal file
@ -0,0 +1,5 @@
|
||||
import 'package:shared_preferences/shared_preferences.dart';
|
||||
|
||||
getPreferences() async {
|
||||
return await SharedPreferences.getInstance();
|
||||
}
|
21
lib/router.dart
Normal file
21
lib/router.dart
Normal file
@ -0,0 +1,21 @@
|
||||
import 'package:go_router/go_router.dart';
|
||||
import 'package:solaragent/screens/account.dart';
|
||||
import 'package:solaragent/screens/dashboard.dart';
|
||||
import 'package:solaragent/screens/notifications.dart';
|
||||
|
||||
final router = GoRouter(
|
||||
routes: [
|
||||
GoRoute(
|
||||
path: '/',
|
||||
builder: (context, state) => const DashboardScreen(),
|
||||
),
|
||||
GoRoute(
|
||||
path: '/notifications',
|
||||
builder: (context, state) => const NotificationScreen(),
|
||||
),
|
||||
GoRoute(
|
||||
path: '/account',
|
||||
builder: (context, state) => const AccountScreen(),
|
||||
)
|
||||
],
|
||||
);
|
@ -16,9 +16,9 @@ class AboutScreen extends StatelessWidget {
|
||||
mainAxisAlignment: MainAxisAlignment.center,
|
||||
crossAxisAlignment: CrossAxisAlignment.center,
|
||||
children: [
|
||||
Text('GoatAgent',
|
||||
Text('SolarAgent',
|
||||
style: Theme.of(context).textTheme.headlineMedium),
|
||||
Text('Goatworks Official Mobile Helper',
|
||||
Text('Solarworks Official Mobile Helper',
|
||||
style: Theme.of(context).textTheme.bodyLarge),
|
||||
const SizedBox(height: 20),
|
||||
FutureBuilder(
|
||||
@ -37,7 +37,7 @@ class AboutScreen extends StatelessWidget {
|
||||
const SizedBox(height: 10),
|
||||
MaterialButton(
|
||||
onPressed: () async {
|
||||
await launchUrl(Uri.parse('https://smartsheep.studio'));
|
||||
await launchUrl(Uri.parse('https://solsynth.dev'));
|
||||
},
|
||||
child: const Text('Official Website'),
|
||||
),
|
||||
|
@ -1,8 +1,8 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:go_router/go_router.dart';
|
||||
import 'package:goatagent/auth.dart';
|
||||
import 'package:goatagent/screens/about.dart';
|
||||
import 'package:goatagent/widgets/name_card.dart';
|
||||
import 'package:solaragent/auth.dart';
|
||||
import 'package:solaragent/screens/about.dart';
|
||||
import 'package:solaragent/widgets/name_card.dart';
|
||||
|
||||
class AccountScreen extends StatefulWidget {
|
||||
const AccountScreen({super.key});
|
||||
@ -17,7 +17,7 @@ class _AccountScreenState extends State<AccountScreen> {
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
AuthGuard().isAuthorized().then((value) {
|
||||
authClient.isAuthorized().then((value) {
|
||||
setState(() {
|
||||
isAuthorized = value;
|
||||
});
|
||||
@ -35,8 +35,8 @@ class _AccountScreenState extends State<AccountScreen> {
|
||||
padding: const EdgeInsets.only(top: 20),
|
||||
child: NameCard(
|
||||
onLogin: () async {
|
||||
await AuthGuard().login(context);
|
||||
var authorized = await AuthGuard().isAuthorized();
|
||||
await authClient.login(context);
|
||||
var authorized = await authClient.isAuthorized();
|
||||
setState(() {
|
||||
isAuthorized = authorized;
|
||||
});
|
||||
@ -49,44 +49,43 @@ class _AccountScreenState extends State<AccountScreen> {
|
||||
spacing: 5,
|
||||
children: [
|
||||
FutureBuilder(
|
||||
future: AuthGuard().isAuthorized(),
|
||||
builder: (BuildContext context, AsyncSnapshot<bool> snapshot) {
|
||||
if (snapshot.hasData && snapshot.data == true) {
|
||||
return Card(
|
||||
elevation: 0,
|
||||
child: InkWell(
|
||||
splashColor: Colors.indigo.withAlpha(30),
|
||||
onTap: () async {
|
||||
AuthGuard().logout();
|
||||
var authorized = await AuthGuard().isAuthorized();
|
||||
setState(() {
|
||||
isAuthorized = authorized;
|
||||
});
|
||||
},
|
||||
child: const ListTile(
|
||||
leading: Icon(Icons.logout),
|
||||
title: Text('Logout'),
|
||||
),
|
||||
),
|
||||
);
|
||||
} else {
|
||||
return Container();
|
||||
}
|
||||
future: authClient.isAuthorized(),
|
||||
builder:
|
||||
(BuildContext context, AsyncSnapshot<bool> snapshot) {
|
||||
return (snapshot.hasData && snapshot.data == true)
|
||||
? InkWell(
|
||||
borderRadius:
|
||||
const BorderRadius.all(Radius.circular(40)),
|
||||
splashColor: Colors.indigo.withAlpha(30),
|
||||
onTap: () async {
|
||||
authClient.logout();
|
||||
var authorized =
|
||||
await authClient.isAuthorized();
|
||||
setState(() {
|
||||
isAuthorized = authorized;
|
||||
});
|
||||
},
|
||||
child: const ListTile(
|
||||
leading: Icon(Icons.logout),
|
||||
title: Text('Logout'),
|
||||
),
|
||||
)
|
||||
: Container();
|
||||
},
|
||||
),
|
||||
Card(
|
||||
elevation: 0,
|
||||
child: InkWell(
|
||||
splashColor: Colors.indigo.withAlpha(30),
|
||||
onTap: () {
|
||||
Navigator.push(context, MaterialPageRoute(
|
||||
builder: (context) => const AboutScreen(),
|
||||
));
|
||||
},
|
||||
child: const ListTile(
|
||||
leading: Icon(Icons.info_outline),
|
||||
title: Text('About'),
|
||||
),
|
||||
InkWell(
|
||||
borderRadius: const BorderRadius.all(Radius.circular(40)),
|
||||
splashColor: Colors.indigo.withAlpha(30),
|
||||
onTap: () {
|
||||
Navigator.push(
|
||||
context,
|
||||
MaterialPageRoute(
|
||||
builder: (context) => const AboutScreen(),
|
||||
));
|
||||
},
|
||||
child: const ListTile(
|
||||
leading: Icon(Icons.info_outline),
|
||||
title: Text('About'),
|
||||
),
|
||||
),
|
||||
],
|
||||
|
@ -11,7 +11,7 @@ class AuthorizationScreen extends StatelessWidget {
|
||||
Widget build(BuildContext context) {
|
||||
return Scaffold(
|
||||
appBar: AppBar(
|
||||
title: const Text('Connect with Goatpass'),
|
||||
title: const Text('Sign in'),
|
||||
),
|
||||
body: Stack(children: [
|
||||
WebViewWidget(
|
||||
@ -20,10 +20,10 @@ class AuthorizationScreen extends StatelessWidget {
|
||||
..setBackgroundColor(Colors.white)
|
||||
..setNavigationDelegate(NavigationDelegate(
|
||||
onNavigationRequest: (NavigationRequest request) {
|
||||
if (request.url.startsWith('goatagent://auth')) {
|
||||
if (request.url.startsWith('solaragent://auth')) {
|
||||
Navigator.of(context).pop(request.url);
|
||||
return NavigationDecision.prevent;
|
||||
} else if (request.url.startsWith("https://id.smartsheep.studio/auth/register")) {
|
||||
} else if (request.url.startsWith("https://solsynth.dev/auth/sign-up")) {
|
||||
launchUrl(Uri.parse(request.url));
|
||||
return NavigationDecision.prevent;
|
||||
}
|
||||
|
@ -1,7 +1,7 @@
|
||||
import 'dart:convert';
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:goatagent/screens/application.dart';
|
||||
import 'package:solaragent/screens/application.dart';
|
||||
import 'package:http/http.dart' as http;
|
||||
|
||||
class DashboardScreen extends StatefulWidget {
|
||||
@ -14,7 +14,7 @@ class DashboardScreen extends StatefulWidget {
|
||||
class _DashboardScreenState extends State<DashboardScreen> {
|
||||
final client = http.Client();
|
||||
final directoryEndpoint =
|
||||
Uri.parse('https://id.smartsheep.studio/.well-known');
|
||||
Uri.parse('https://id.solsynth.dev/.well-known');
|
||||
|
||||
List<dynamic> directory = List.empty();
|
||||
|
||||
|
@ -1,7 +1,7 @@
|
||||
import 'dart:convert';
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:goatagent/auth.dart';
|
||||
import 'package:solaragent/auth.dart';
|
||||
|
||||
class NotificationScreen extends StatefulWidget {
|
||||
const NotificationScreen({super.key});
|
||||
@ -12,7 +12,7 @@ class NotificationScreen extends StatefulWidget {
|
||||
|
||||
class _NotificationScreenState extends State<NotificationScreen> {
|
||||
final notificationEndpoint = Uri.parse(
|
||||
'https://id.smartsheep.studio/api/notifications?skip=0&take=20');
|
||||
'https://id.solsynth.dev/api/notifications?skip=0&take=25');
|
||||
|
||||
List<dynamic> notifications = List.empty();
|
||||
|
||||
@ -23,9 +23,9 @@ class _NotificationScreenState extends State<NotificationScreen> {
|
||||
}
|
||||
|
||||
Future<void> _pullNotifications() async {
|
||||
if (await AuthGuard().isAuthorized()) {
|
||||
await AuthGuard().pullProfiles();
|
||||
var profiles = await AuthGuard().readProfiles();
|
||||
if (await authClient.isAuthorized()) {
|
||||
await authClient.pullProfiles();
|
||||
var profiles = await authClient.readProfiles();
|
||||
setState(() {
|
||||
notifications = profiles['notifications'];
|
||||
});
|
||||
@ -33,11 +33,11 @@ class _NotificationScreenState extends State<NotificationScreen> {
|
||||
}
|
||||
|
||||
Future<void> _markAsRead(element) async {
|
||||
if (AuthGuard().client != null) {
|
||||
if (authClient.client != null) {
|
||||
var id = element['id'];
|
||||
var uri =
|
||||
Uri.parse('https://id.smartsheep.studio/api/notifications/$id/read');
|
||||
await AuthGuard().client!.put(uri);
|
||||
Uri.parse('https://id.solsynth.dev/api/notifications/$id/read');
|
||||
await authClient.client!.put(uri);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -12,8 +12,8 @@ class NameCard extends StatelessWidget {
|
||||
final void Function()? onCheck;
|
||||
|
||||
Future<CircleAvatar> _getAvatar() async {
|
||||
if (await AuthGuard().isAuthorized()) {
|
||||
final profiles = await AuthGuard().readProfiles();
|
||||
if (await authClient.isAuthorized()) {
|
||||
final profiles = await authClient.readProfiles();
|
||||
return CircleAvatar(backgroundImage: NetworkImage(profiles["picture"]));
|
||||
} else {
|
||||
return const CircleAvatar(child: Icon(Icons.account_circle));
|
||||
@ -21,8 +21,8 @@ class NameCard extends StatelessWidget {
|
||||
}
|
||||
|
||||
Future<Column> _getDescribe() async {
|
||||
if (await AuthGuard().isAuthorized()) {
|
||||
final profiles = await AuthGuard().readProfiles();
|
||||
if (await authClient.isAuthorized()) {
|
||||
final profiles = await authClient.readProfiles();
|
||||
return Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
@ -59,7 +59,7 @@ class NameCard extends StatelessWidget {
|
||||
child: InkWell(
|
||||
splashColor: Colors.indigo.withAlpha(30),
|
||||
onTap: () async {
|
||||
if (await AuthGuard().isAuthorized() && onCheck != null) {
|
||||
if (await authClient.isAuthorized() && onCheck != null) {
|
||||
onCheck!();
|
||||
} else if (onLogin != null) {
|
||||
onLogin!();
|
||||
|
38
lib/widgets/navigation.dart
Normal file
38
lib/widgets/navigation.dart
Normal file
@ -0,0 +1,38 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:solaragent/router.dart';
|
||||
|
||||
class AgentNavigation extends StatefulWidget {
|
||||
const AgentNavigation({super.key});
|
||||
|
||||
static const List<(String, NavigationDestination)> destinations = [
|
||||
('/', NavigationDestination(icon: Icon(Icons.home), label: 'Home')),
|
||||
('/notifications', NavigationDestination(icon: Icon(Icons.notifications), label: 'Notifications')),
|
||||
('/account', NavigationDestination(icon: Icon(Icons.account_circle), label: 'Account')),
|
||||
];
|
||||
|
||||
@override
|
||||
State<AgentNavigation> createState() => _AgentNavigationState();
|
||||
}
|
||||
|
||||
class _AgentNavigationState extends State<AgentNavigation> {
|
||||
int currentPage = 0;
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
super.initState();
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return NavigationBar(
|
||||
selectedIndex: currentPage,
|
||||
destinations: AgentNavigation.destinations
|
||||
.map(((String, NavigationDestination) e) => e.$2)
|
||||
.toList(),
|
||||
onDestinationSelected: (index) {
|
||||
router.go(AgentNavigation.destinations[index].$1);
|
||||
setState(() => currentPage = index);
|
||||
},
|
||||
);
|
||||
}
|
||||
}
|
@ -4,10 +4,10 @@ project(runner LANGUAGES CXX)
|
||||
|
||||
# The name of the executable created for the application. Change this to change
|
||||
# the on-disk name of your application.
|
||||
set(BINARY_NAME "goatagent")
|
||||
set(BINARY_NAME "solaragent")
|
||||
# The unique GTK application identifier for this application. See:
|
||||
# https://wiki.gnome.org/HowDoI/ChooseApplicationID
|
||||
set(APPLICATION_ID "studio.smartsheep.goatagent")
|
||||
set(APPLICATION_ID "dev.solsynth.solaragent")
|
||||
|
||||
# Explicitly opt in to modern CMake behaviors to avoid warnings with recent
|
||||
# versions of CMake.
|
||||
|
@ -40,11 +40,11 @@ static void my_application_activate(GApplication* application) {
|
||||
if (use_header_bar) {
|
||||
GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new());
|
||||
gtk_widget_show(GTK_WIDGET(header_bar));
|
||||
gtk_header_bar_set_title(header_bar, "goatagent");
|
||||
gtk_header_bar_set_title(header_bar, "solaragent");
|
||||
gtk_header_bar_set_show_close_button(header_bar, TRUE);
|
||||
gtk_window_set_titlebar(window, GTK_WIDGET(header_bar));
|
||||
} else {
|
||||
gtk_window_set_title(window, "goatagent");
|
||||
gtk_window_set_title(window, "solaragent");
|
||||
}
|
||||
|
||||
gtk_window_set_default_size(window, 1280, 720);
|
||||
|
@ -12,6 +12,7 @@ import flutter_appauth
|
||||
import flutter_secure_storage_macos
|
||||
import package_info_plus
|
||||
import path_provider_foundation
|
||||
import shared_preferences_foundation
|
||||
import url_launcher_macos
|
||||
|
||||
func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) {
|
||||
@ -22,5 +23,6 @@ func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) {
|
||||
FlutterSecureStoragePlugin.register(with: registry.registrar(forPlugin: "FlutterSecureStoragePlugin"))
|
||||
FPPPackageInfoPlusPlugin.register(with: registry.registrar(forPlugin: "FPPPackageInfoPlusPlugin"))
|
||||
PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin"))
|
||||
SharedPreferencesPlugin.register(with: registry.registrar(forPlugin: "SharedPreferencesPlugin"))
|
||||
UrlLauncherPlugin.register(with: registry.registrar(forPlugin: "UrlLauncherPlugin"))
|
||||
}
|
||||
|
@ -65,7 +65,7 @@
|
||||
331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = "<group>"; };
|
||||
333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = "<group>"; };
|
||||
335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = "<group>"; };
|
||||
33CC10ED2044A3C60003C045 /* goatagent.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = goatagent.app; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
33CC10ED2044A3C60003C045 /* solaragent.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = solaragent.app; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
33CC10F02044A3C60003C045 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
|
||||
33CC10F22044A3C60003C045 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = Runner/Assets.xcassets; sourceTree = "<group>"; };
|
||||
33CC10F52044A3C60003C045 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = "<group>"; };
|
||||
@ -134,7 +134,7 @@
|
||||
33CC10EE2044A3C60003C045 /* Products */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
33CC10ED2044A3C60003C045 /* goatagent.app */,
|
||||
33CC10ED2044A3C60003C045 /* solaragent.app */,
|
||||
331C80D5294CF71000263BE5 /* RunnerTests.xctest */,
|
||||
);
|
||||
name = Products;
|
||||
@ -220,7 +220,7 @@
|
||||
);
|
||||
name = Runner;
|
||||
productName = Runner;
|
||||
productReference = 33CC10ED2044A3C60003C045 /* goatagent.app */;
|
||||
productReference = 33CC10ED2044A3C60003C045 /* solaragent.app */;
|
||||
productType = "com.apple.product-type.application";
|
||||
};
|
||||
/* End PBXNativeTarget section */
|
||||
@ -388,10 +388,10 @@
|
||||
CURRENT_PROJECT_VERSION = 1;
|
||||
GENERATE_INFOPLIST_FILE = YES;
|
||||
MARKETING_VERSION = 1.0;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = studio.smartsheep.goatagent.RunnerTests;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = dev.solsynth.solaragent.RunnerTests;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SWIFT_VERSION = 5.0;
|
||||
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/goatagent.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/goatagent";
|
||||
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/solaragent.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/solaragent";
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
@ -402,10 +402,10 @@
|
||||
CURRENT_PROJECT_VERSION = 1;
|
||||
GENERATE_INFOPLIST_FILE = YES;
|
||||
MARKETING_VERSION = 1.0;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = studio.smartsheep.goatagent.RunnerTests;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = dev.solsynth.solaragent.RunnerTests;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SWIFT_VERSION = 5.0;
|
||||
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/goatagent.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/goatagent";
|
||||
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/solaragent.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/solaragent";
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
@ -416,10 +416,10 @@
|
||||
CURRENT_PROJECT_VERSION = 1;
|
||||
GENERATE_INFOPLIST_FILE = YES;
|
||||
MARKETING_VERSION = 1.0;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = studio.smartsheep.goatagent.RunnerTests;
|
||||
PRODUCT_BUNDLE_IDENTIFIER = dev.solsynth.solaragent.RunnerTests;
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
SWIFT_VERSION = 5.0;
|
||||
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/goatagent.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/goatagent";
|
||||
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/solaragent.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/solaragent";
|
||||
};
|
||||
name = Profile;
|
||||
};
|
||||
|
@ -15,7 +15,7 @@
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "33CC10EC2044A3C60003C045"
|
||||
BuildableName = "goatagent.app"
|
||||
BuildableName = "solaragent.app"
|
||||
BlueprintName = "Runner"
|
||||
ReferencedContainer = "container:Runner.xcodeproj">
|
||||
</BuildableReference>
|
||||
@ -31,7 +31,7 @@
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "33CC10EC2044A3C60003C045"
|
||||
BuildableName = "goatagent.app"
|
||||
BuildableName = "solaragent.app"
|
||||
BlueprintName = "Runner"
|
||||
ReferencedContainer = "container:Runner.xcodeproj">
|
||||
</BuildableReference>
|
||||
@ -65,7 +65,7 @@
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "33CC10EC2044A3C60003C045"
|
||||
BuildableName = "goatagent.app"
|
||||
BuildableName = "solaragent.app"
|
||||
BlueprintName = "Runner"
|
||||
ReferencedContainer = "container:Runner.xcodeproj">
|
||||
</BuildableReference>
|
||||
@ -82,7 +82,7 @@
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "33CC10EC2044A3C60003C045"
|
||||
BuildableName = "goatagent.app"
|
||||
BuildableName = "solaragent.app"
|
||||
BlueprintName = "Runner"
|
||||
ReferencedContainer = "container:Runner.xcodeproj">
|
||||
</BuildableReference>
|
||||
|
@ -5,10 +5,10 @@
|
||||
// 'flutter create' template.
|
||||
|
||||
// The application's name. By default this is also the title of the Flutter window.
|
||||
PRODUCT_NAME = goatagent
|
||||
PRODUCT_NAME = solaragent
|
||||
|
||||
// The application's bundle identifier
|
||||
PRODUCT_BUNDLE_IDENTIFIER = studio.smartsheep.goatagent
|
||||
PRODUCT_BUNDLE_IDENTIFIER = dev.solsynth.solaragent
|
||||
|
||||
// The copyright displayed in application information
|
||||
PRODUCT_COPYRIGHT = Copyright © 2024 studio.smartsheep. All rights reserved.
|
||||
PRODUCT_COPYRIGHT = Copyright © 2024 dev.solsynth. All rights reserved.
|
||||
|
@ -9,7 +9,7 @@
|
||||
<key>PLIST_VERSION</key>
|
||||
<string>1</string>
|
||||
<key>BUNDLE_ID</key>
|
||||
<string>studio.smartsheep.goatagent.RunnerTests</string>
|
||||
<string>dev.solsynth.solaragent.RunnerTests</string>
|
||||
<key>PROJECT_ID</key>
|
||||
<string>smartsheep-hydrogen</string>
|
||||
<key>STORAGE_BUCKET</key>
|
||||
|
198
pubspec.lock
198
pubspec.lock
@ -5,10 +5,10 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: _flutterfire_internals
|
||||
sha256: "1a52f1afae8ab7ac4741425114713bdbba802f1ce1e0648e167ffcc6e05e96cf"
|
||||
sha256: "4eec93681221723a686ad580c2e7d960e1017cf1a4e0a263c2573c2c6b0bf5cd"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.3.21"
|
||||
version: "1.3.25"
|
||||
archive:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -117,18 +117,26 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: ffi
|
||||
sha256: "7bf0adc28a23d395f19f3f1eb21dd7cfd1dd9f8e1c50051c069122e6853bc878"
|
||||
sha256: "493f37e7df1804778ff3a53bd691d8692ddf69702cf4c1c1096a2e41b4779e21"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.1.0"
|
||||
version: "2.1.2"
|
||||
file:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: file
|
||||
sha256: "5fc22d7c25582e38ad9a8515372cd9a93834027aacf1801cf01164dac0ffa08c"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "7.0.0"
|
||||
firebase_core:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: firebase_core
|
||||
sha256: "7e049e32a9d347616edb39542cf92cd53fdb4a99fb6af0a0bff327c14cd76445"
|
||||
sha256: "53316975310c8af75a96e365f9fccb67d1c544ef0acdbf0d88bbe30eedd1c4f9"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.25.4"
|
||||
version: "2.27.0"
|
||||
firebase_core_platform_interface:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -141,50 +149,50 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: firebase_core_web
|
||||
sha256: "57e61d6010e253b36d38191cefd6199d7849152cdcd234b61ca290cdb278a0ba"
|
||||
sha256: c8e1d59385eee98de63c92f961d2a7062c5d9a65e7f45bdc7f1b0b205aab2492
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.11.4"
|
||||
version: "2.11.5"
|
||||
firebase_crashlytics:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: firebase_crashlytics
|
||||
sha256: efd096e4c3d2c568e128505b6e4ce5f5d5a1629f700a4d6fee6bd25b85937dde
|
||||
sha256: c4f1b723d417bc9c4774810e774ff91df8fb0032d33fb2888b2c887e865581b8
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "3.4.14"
|
||||
version: "3.4.18"
|
||||
firebase_crashlytics_platform_interface:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: firebase_crashlytics_platform_interface
|
||||
sha256: "225a54d834a118be262c1f1096d407515e35b99d9b474c987abdcff7663f2b81"
|
||||
sha256: c5a11fca3df76a98e3fa68fde8b10a08aacb9a7639f619fbfd4dad6c67a08643
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "3.6.21"
|
||||
version: "3.6.25"
|
||||
firebase_messaging:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: firebase_messaging
|
||||
sha256: "9c97b20c012542252a8853f11334efd833ddae83551fe37d27f87d885c655038"
|
||||
sha256: e41586e0fd04fe9a40424f8b0053d0832e6d04f49e020cdaf9919209a28497e9
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "14.7.15"
|
||||
version: "14.7.19"
|
||||
firebase_messaging_platform_interface:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: firebase_messaging_platform_interface
|
||||
sha256: d464b255e922c7915dc4b0ebc305ebad4e1f130519bee3d6e568ef2ea1613a4b
|
||||
sha256: f7a9d74ff7fc588a924f6b2eaeaa148b0db521b13a9db55f6ad45864fa98c06e
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "4.5.23"
|
||||
version: "4.5.27"
|
||||
firebase_messaging_web:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: firebase_messaging_web
|
||||
sha256: f3f71aeec719ec1fe2c99f75cd74d00d33f1c240cf1e402cc9d43883e84f935a
|
||||
sha256: fc21e771166860c55b103701c5ac7cdb2eec28897b97c42e6e5703cbedf9e02e
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "3.6.4"
|
||||
version: "3.6.8"
|
||||
flutter:
|
||||
dependency: "direct main"
|
||||
description: flutter
|
||||
@ -194,10 +202,10 @@ packages:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: flutter_appauth
|
||||
sha256: "4ad7d446888b1486642226db6aa04ffb4651d76388715aba6e6e572ebeb915c3"
|
||||
sha256: "6aca161b2a1758478a13f758897fc98688277951dafb4b7e62729c1dfbcefdaa"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "6.0.4"
|
||||
version: "6.0.5"
|
||||
flutter_appauth_platform_interface:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -284,10 +292,10 @@ packages:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: go_router
|
||||
sha256: "07ee2436909f749d606f53521dc1725dd738dc5196e5ff815bc254253c594075"
|
||||
sha256: "7ecb2f391edbca5473db591b48555a8912dde60edd0fb3013bd6743033b2d3f8"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "13.1.0"
|
||||
version: "13.2.1"
|
||||
http:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
@ -308,10 +316,10 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: image
|
||||
sha256: "49a0d4b0c12402853d3f227fe7c315601b238d126aa4caa5dbb2dcf99421aa4a"
|
||||
sha256: "4c68bfd5ae83e700b5204c1e74451e7bf3cf750e6843c6e158289cf56bda018e"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "4.1.6"
|
||||
version: "4.1.7"
|
||||
js:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -328,6 +336,30 @@ packages:
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "4.8.1"
|
||||
leak_tracker:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: leak_tracker
|
||||
sha256: "78eb209deea09858f5269f5a5b02be4049535f568c07b275096836f01ea323fa"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "10.0.0"
|
||||
leak_tracker_flutter_testing:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: leak_tracker_flutter_testing
|
||||
sha256: b46c5e37c19120a8a01918cfaf293547f47269f7cb4b0058f21531c2465d6ef0
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.0.1"
|
||||
leak_tracker_testing:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: leak_tracker_testing
|
||||
sha256: a597f72a664dbd293f3bfc51f9ba69816f84dcd403cdac7066cb3f6003f3ab47
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.0.1"
|
||||
lints:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -348,26 +380,26 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: matcher
|
||||
sha256: "1803e76e6653768d64ed8ff2e1e67bea3ad4b923eb5c56a295c3e634bad5960e"
|
||||
sha256: d2323aa2060500f906aa31a895b4030b6da3ebdcc5619d14ce1aada65cd161cb
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.12.16"
|
||||
version: "0.12.16+1"
|
||||
material_color_utilities:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: material_color_utilities
|
||||
sha256: "9528f2f296073ff54cb9fee677df673ace1218163c3bc7628093e7eed5203d41"
|
||||
sha256: "0e0a020085b65b6083975e499759762399b4475f766c21668c4ecca34ea74e5a"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.5.0"
|
||||
version: "0.8.0"
|
||||
meta:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: meta
|
||||
sha256: a6e590c838b18133bb482a2745ad77c5bb7715fb0451209e1a7567d416678b8e
|
||||
sha256: d584fa6707a52763a52446f02cc621b077888fb63b93bbcb1143a7be5a0c0c04
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.10.0"
|
||||
version: "1.11.0"
|
||||
oauth2:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
@ -396,10 +428,10 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: path
|
||||
sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917"
|
||||
sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "1.8.3"
|
||||
version: "1.9.0"
|
||||
path_provider:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -480,6 +512,62 @@ packages:
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "3.7.4"
|
||||
shared_preferences:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: shared_preferences
|
||||
sha256: "81429e4481e1ccfb51ede496e916348668fd0921627779233bd24cc3ff6abd02"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.2.2"
|
||||
shared_preferences_android:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: shared_preferences_android
|
||||
sha256: "8568a389334b6e83415b6aae55378e158fbc2314e074983362d20c562780fb06"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.2.1"
|
||||
shared_preferences_foundation:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: shared_preferences_foundation
|
||||
sha256: "7708d83064f38060c7b39db12aefe449cb8cdc031d6062280087bc4cdb988f5c"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.3.5"
|
||||
shared_preferences_linux:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: shared_preferences_linux
|
||||
sha256: "9f2cbcf46d4270ea8be39fa156d86379077c8a5228d9dfdb1164ae0bb93f1faa"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.3.2"
|
||||
shared_preferences_platform_interface:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: shared_preferences_platform_interface
|
||||
sha256: "22e2ecac9419b4246d7c22bfbbda589e3acf5c0351137d87dd2939d984d37c3b"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.3.2"
|
||||
shared_preferences_web:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: shared_preferences_web
|
||||
sha256: "7b15ffb9387ea3e237bb7a66b8a23d2147663d391cafc5c8f37b2e7b4bde5d21"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.2.2"
|
||||
shared_preferences_windows:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: shared_preferences_windows
|
||||
sha256: "841ad54f3c8381c480d0c9b508b89a34036f512482c407e6df7a9c4aa2ef8f59"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.3.2"
|
||||
sky_engine:
|
||||
dependency: transitive
|
||||
description: flutter
|
||||
@ -545,26 +633,26 @@ packages:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: url_launcher
|
||||
sha256: c512655380d241a337521703af62d2c122bf7b77a46ff7dd750092aa9433499c
|
||||
sha256: "0ecc004c62fd3ed36a2ffcbe0dd9700aee63bd7532d0b642a488b1ec310f492e"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "6.2.4"
|
||||
version: "6.2.5"
|
||||
url_launcher_android:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: url_launcher_android
|
||||
sha256: "507dc655b1d9cb5ebc756032eb785f114e415f91557b73bf60b7e201dfedeb2f"
|
||||
sha256: d4ed0711849dd8e33eb2dd69c25db0d0d3fdc37e0a62e629fe32f57a22db2745
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "6.2.2"
|
||||
version: "6.3.0"
|
||||
url_launcher_ios:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: url_launcher_ios
|
||||
sha256: "75bb6fe3f60070407704282a2d295630cab232991eb52542b18347a8a941df03"
|
||||
sha256: "9149d493b075ed740901f3ee844a38a00b33116c7c5c10d7fb27df8987fb51d5"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "6.2.4"
|
||||
version: "6.2.5"
|
||||
url_launcher_linux:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -585,10 +673,10 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: url_launcher_platform_interface
|
||||
sha256: a932c3a8082e118f80a475ce692fde89dc20fddb24c57360b96bc56f7035de1f
|
||||
sha256: "552f8a1e663569be95a8190206a38187b531910283c3e982193e4f2733f01029"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.3.1"
|
||||
version: "2.3.2"
|
||||
url_launcher_web:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -613,30 +701,38 @@ packages:
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "2.1.4"
|
||||
vm_service:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: vm_service
|
||||
sha256: b3d56ff4341b8f182b96aceb2fa20e3dcb336b9f867bc0eafc0de10f1048e957
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "13.0.0"
|
||||
web:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: web
|
||||
sha256: afe077240a270dcfd2aafe77602b4113645af95d0ad31128cc02bce5ac5d5152
|
||||
sha256: "4188706108906f002b3a293509234588823c8c979dc83304e229ff400c996b05"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "0.3.0"
|
||||
version: "0.4.2"
|
||||
webview_flutter:
|
||||
dependency: "direct main"
|
||||
description:
|
||||
name: webview_flutter
|
||||
sha256: d81b68e88cc353e546afb93fb38958e3717282c5ac6e5d3be4a4aef9fc3c1413
|
||||
sha256: "25e1b6e839e8cbfbd708abc6f85ed09d1727e24e08e08c6b8590d7c65c9a8932"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "4.5.0"
|
||||
version: "4.7.0"
|
||||
webview_flutter_android:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: webview_flutter_android
|
||||
sha256: "4ea3c4e1b8ed590162b15b8a61b41b1ef3ff179a314627c16ce40c086d94b8af"
|
||||
sha256: f038ee2fae73b509dde1bc9d2c5a50ca92054282de17631a9a3d515883740934
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "3.14.0"
|
||||
version: "3.16.0"
|
||||
webview_flutter_platform_interface:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -649,18 +745,18 @@ packages:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: webview_flutter_wkwebview
|
||||
sha256: b99ca8d8bae9c6b43d568218691aa537fb0aeae1d7d34eadf112a6aa36d26506
|
||||
sha256: f12f8d8a99784b863e8b85e4a9a5e3cf1839d6803d2c0c3e0533a8f3c5a992a7
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "3.11.0"
|
||||
version: "3.13.0"
|
||||
win32:
|
||||
dependency: transitive
|
||||
description:
|
||||
name: win32
|
||||
sha256: "464f5674532865248444b4c3daca12bd9bf2d7c47f759ce2617986e7229494a8"
|
||||
sha256: "8cb58b45c47dcb42ab3651533626161d6b67a2921917d8d429791f76972b3480"
|
||||
url: "https://pub.dev"
|
||||
source: hosted
|
||||
version: "5.2.0"
|
||||
version: "5.3.0"
|
||||
xdg_directories:
|
||||
dependency: transitive
|
||||
description:
|
||||
@ -686,5 +782,5 @@ packages:
|
||||
source: hosted
|
||||
version: "3.1.2"
|
||||
sdks:
|
||||
dart: ">=3.2.6 <4.0.0"
|
||||
dart: ">=3.3.0 <4.0.0"
|
||||
flutter: ">=3.16.6"
|
||||
|
@ -1,5 +1,5 @@
|
||||
name: goatagent
|
||||
description: "The official Application of Goatworks Global Hydrogen Network"
|
||||
name: solaragent
|
||||
description: "The official Application of Solarworks Global Hydrogen Network"
|
||||
# The following line prevents the package from being accidentally published to
|
||||
# pub.dev using `flutter pub publish`. This is preferred for private packages.
|
||||
publish_to: 'none' # Remove this line if you wish to publish to pub.dev
|
||||
@ -43,9 +43,10 @@ dependencies:
|
||||
oauth2: ^2.0.2
|
||||
http: ^1.2.0
|
||||
webview_flutter: ^4.5.0
|
||||
go_router: ^13.1.0
|
||||
go_router: ^13.2.1
|
||||
package_info_plus: ^5.0.1
|
||||
url_launcher: ^6.2.4
|
||||
shared_preferences: ^2.2.2
|
||||
|
||||
dev_dependencies:
|
||||
flutter_test:
|
||||
|
@ -8,12 +8,12 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
|
||||
import 'package:goatagent/main.dart';
|
||||
import 'package:solaragent/main.dart';
|
||||
|
||||
void main() {
|
||||
testWidgets('Counter increments smoke test', (WidgetTester tester) async {
|
||||
// Build our app and trigger a frame.
|
||||
await tester.pumpWidget(const GoatAgent());
|
||||
await tester.pumpWidget(const SolarAgent());
|
||||
|
||||
// Verify that our counter starts at 0.
|
||||
expect(find.text('0'), findsOneWidget);
|
||||
|
@ -18,18 +18,18 @@
|
||||
|
||||
<meta charset="UTF-8">
|
||||
<meta content="IE=Edge" http-equiv="X-UA-Compatible">
|
||||
<meta name="description" content="The official Application of Goatworks Global Hydrogen Network">
|
||||
<meta name="description" content="The official Application of Solarworks Global Hydrogen Network">
|
||||
|
||||
<!-- iOS meta tags & icons -->
|
||||
<meta name="apple-mobile-web-app-capable" content="yes">
|
||||
<meta name="apple-mobile-web-app-status-bar-style" content="black">
|
||||
<meta name="apple-mobile-web-app-title" content="goatagent">
|
||||
<meta name="apple-mobile-web-app-title" content="solaragent">
|
||||
<link rel="apple-touch-icon" href="icons/Icon-192.png">
|
||||
|
||||
<!-- Favicon -->
|
||||
<link rel="icon" type="image/png" href="favicon.png"/>
|
||||
|
||||
<title>goatagent</title>
|
||||
<title>solaragent</title>
|
||||
<link rel="manifest" href="manifest.json">
|
||||
|
||||
<script>
|
||||
|
@ -1,11 +1,11 @@
|
||||
{
|
||||
"name": "goatagent",
|
||||
"short_name": "goatagent",
|
||||
"name": "solaragent",
|
||||
"short_name": "solaragent",
|
||||
"start_url": ".",
|
||||
"display": "standalone",
|
||||
"background_color": "#ffffff",
|
||||
"theme_color": "#49509e",
|
||||
"description": "The official Application of Goatworks Global Hydrogen Network",
|
||||
"description": "The official Application of Solarworks Global Hydrogen Network",
|
||||
"orientation": "portrait-primary",
|
||||
"prefer_related_applications": false,
|
||||
"icons": [
|
||||
|
@ -1,10 +1,10 @@
|
||||
# Project-level configuration.
|
||||
cmake_minimum_required(VERSION 3.14)
|
||||
project(goatagent LANGUAGES CXX)
|
||||
project(solaragent LANGUAGES CXX)
|
||||
|
||||
# The name of the executable created for the application. Change this to change
|
||||
# the on-disk name of your application.
|
||||
set(BINARY_NAME "goatagent")
|
||||
set(BINARY_NAME "solaragent")
|
||||
|
||||
# Explicitly opt in to modern CMake behaviors to avoid warnings with recent
|
||||
# versions of CMake.
|
||||
|
@ -89,13 +89,13 @@ BEGIN
|
||||
BEGIN
|
||||
BLOCK "040904e4"
|
||||
BEGIN
|
||||
VALUE "CompanyName", "studio.smartsheep" "\0"
|
||||
VALUE "FileDescription", "goatagent" "\0"
|
||||
VALUE "CompanyName", "dev.solsynth" "\0"
|
||||
VALUE "FileDescription", "solaragent" "\0"
|
||||
VALUE "FileVersion", VERSION_AS_STRING "\0"
|
||||
VALUE "InternalName", "goatagent" "\0"
|
||||
VALUE "LegalCopyright", "Copyright (C) 2024 studio.smartsheep. All rights reserved." "\0"
|
||||
VALUE "OriginalFilename", "goatagent.exe" "\0"
|
||||
VALUE "ProductName", "goatagent" "\0"
|
||||
VALUE "InternalName", "solaragent" "\0"
|
||||
VALUE "LegalCopyright", "Copyright (C) 2024 dev.solsynth. All rights reserved." "\0"
|
||||
VALUE "OriginalFilename", "solaragent.exe" "\0"
|
||||
VALUE "ProductName", "solaragent" "\0"
|
||||
VALUE "ProductVersion", VERSION_AS_STRING "\0"
|
||||
END
|
||||
END
|
||||
|
@ -27,7 +27,7 @@ int APIENTRY wWinMain(_In_ HINSTANCE instance, _In_opt_ HINSTANCE prev,
|
||||
FlutterWindow window(project);
|
||||
Win32Window::Point origin(10, 10);
|
||||
Win32Window::Size size(1280, 720);
|
||||
if (!window.Create(L"goatagent", origin, size)) {
|
||||
if (!window.Create(L"solaragent", origin, size)) {
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
window.SetQuitOnClose(true);
|
||||
|
Reference in New Issue
Block a user