fixing android build
This commit is contained in:
Binary file not shown.
|
Before Width: | Height: | Size: 33 KiB After Width: | Height: | Size: 22 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 26 KiB After Width: | Height: | Size: 22 KiB |
@@ -1,3 +1,7 @@
|
|||||||
org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError
|
org.gradle.jvmargs=-Xmx8G -XX:MaxMetaspaceSize=4G -XX:ReservedCodeCacheSize=512m -XX:+HeapDumpOnOutOfMemoryError
|
||||||
android.useAndroidX=true
|
android.useAndroidX=true
|
||||||
android.enableJetifier=true
|
android.enableJetifier=true
|
||||||
|
# This builtInKotlin flag was added automatically by Flutter migrator
|
||||||
|
android.builtInKotlin=false
|
||||||
|
# This newDsl flag was added automatically by Flutter migrator
|
||||||
|
android.newDsl=false
|
||||||
|
|||||||
@@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME
|
|||||||
distributionPath=wrapper/dists
|
distributionPath=wrapper/dists
|
||||||
zipStoreBase=GRADLE_USER_HOME
|
zipStoreBase=GRADLE_USER_HOME
|
||||||
zipStorePath=wrapper/dists
|
zipStorePath=wrapper/dists
|
||||||
distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-all.zip
|
distributionUrl=https\://services.gradle.org/distributions/gradle-8.11.1-all.zip
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ pluginManagement {
|
|||||||
|
|
||||||
plugins {
|
plugins {
|
||||||
id("dev.flutter.flutter-plugin-loader") version "1.0.0"
|
id("dev.flutter.flutter-plugin-loader") version "1.0.0"
|
||||||
id("com.android.application") version "8.7.0" apply false
|
id("com.android.application") version "8.9.1" apply false
|
||||||
// START: FlutterFire Configuration
|
// START: FlutterFire Configuration
|
||||||
id("com.google.gms.google-services") version("4.3.15") apply false
|
id("com.google.gms.google-services") version("4.3.15") apply false
|
||||||
// END: FlutterFire Configuration
|
// END: FlutterFire Configuration
|
||||||
|
|||||||
Binary file not shown.
|
Before Width: | Height: | Size: 3.1 MiB |
Binary file not shown.
BIN
assets/peak.png
BIN
assets/peak.png
Binary file not shown.
|
Before Width: | Height: | Size: 70 KiB |
14
lib/browser.dart
Normal file
14
lib/browser.dart
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
/// Platform-aware browser API abstraction.
|
||||||
|
///
|
||||||
|
/// On web, provides real browser localStorage and location APIs.
|
||||||
|
/// On non-web platforms (Android, iOS, desktop), returns no-op stubs.
|
||||||
|
///
|
||||||
|
/// Usage:
|
||||||
|
/// ```dart
|
||||||
|
/// import 'package:qpay/browser.dart';
|
||||||
|
/// Browser.localStorage.setItem('key', 'value');
|
||||||
|
/// Browser.localStorage.getItem('key');
|
||||||
|
/// Browser.location.href = 'https://example.com';
|
||||||
|
/// ```
|
||||||
|
export 'platform/browser_stub.dart'
|
||||||
|
if (dart.library.html) 'platform/browser_web.dart';
|
||||||
@@ -1,8 +1,9 @@
|
|||||||
|
import 'package:flutter/foundation.dart';
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter_web_plugins/flutter_web_plugins.dart';
|
|
||||||
import 'package:provider/provider.dart';
|
import 'package:provider/provider.dart';
|
||||||
import 'package:qpay/auth_state.dart';
|
import 'package:qpay/auth_state.dart';
|
||||||
import 'package:qpay/routes.dart';
|
import 'package:qpay/routes.dart';
|
||||||
|
import 'package:qpay/url_strategy.dart';
|
||||||
import 'package:qpay/screens/transaction_controller.dart';
|
import 'package:qpay/screens/transaction_controller.dart';
|
||||||
import 'package:qpay/screens/onboarding/onboarding_controller.dart';
|
import 'package:qpay/screens/onboarding/onboarding_controller.dart';
|
||||||
import 'package:qpay/theme/app_theme.dart';
|
import 'package:qpay/theme/app_theme.dart';
|
||||||
@@ -26,7 +27,9 @@ String resolveEnvFile(String env) {
|
|||||||
|
|
||||||
void main() async {
|
void main() async {
|
||||||
WidgetsFlutterBinding.ensureInitialized();
|
WidgetsFlutterBinding.ensureInitialized();
|
||||||
usePathUrlStrategy();
|
if (kIsWeb) {
|
||||||
|
usePathUrlStrategy();
|
||||||
|
}
|
||||||
await Firebase.initializeApp(options: DefaultFirebaseOptions.currentPlatform);
|
await Firebase.initializeApp(options: DefaultFirebaseOptions.currentPlatform);
|
||||||
|
|
||||||
await dotenv.load(fileName: resolveEnvFile(appEnv));
|
await dotenv.load(fileName: resolveEnvFile(appEnv));
|
||||||
|
|||||||
18
lib/platform/browser_stub.dart
Normal file
18
lib/platform/browser_stub.dart
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
/// Stub implementation of browser APIs for non-web platforms.
|
||||||
|
class BrowserStorage {
|
||||||
|
String? getItem(String key) => null;
|
||||||
|
void setItem(String key, String value) {}
|
||||||
|
void removeItem(String key) {}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Stub for window.location
|
||||||
|
class BrowserLocation {
|
||||||
|
String get href => '';
|
||||||
|
set href(String value) {}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Browser utility class for non-web platforms.
|
||||||
|
class Browser {
|
||||||
|
static final BrowserStorage localStorage = BrowserStorage();
|
||||||
|
static final BrowserLocation location = BrowserLocation();
|
||||||
|
}
|
||||||
22
lib/platform/browser_web.dart
Normal file
22
lib/platform/browser_web.dart
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
import 'package:web/web.dart' as web;
|
||||||
|
|
||||||
|
/// Web implementation of browser APIs using package:web.
|
||||||
|
class BrowserStorage {
|
||||||
|
String? getItem(String key) => web.window.localStorage.getItem(key);
|
||||||
|
void setItem(String key, String value) =>
|
||||||
|
web.window.localStorage.setItem(key, value);
|
||||||
|
void removeItem(String key) =>
|
||||||
|
web.window.localStorage.removeItem(key);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Web implementation for window.location
|
||||||
|
class BrowserLocation {
|
||||||
|
String get href => web.window.location.href;
|
||||||
|
set href(String value) => web.window.location.href = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Browser utility class using package:web.
|
||||||
|
class Browser {
|
||||||
|
static final BrowserStorage localStorage = BrowserStorage();
|
||||||
|
static final BrowserLocation location = BrowserLocation();
|
||||||
|
}
|
||||||
3
lib/platform/url_strategy_stub.dart
Normal file
3
lib/platform/url_strategy_stub.dart
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
/// Stub for path URL strategy on non-web platforms.
|
||||||
|
/// Does nothing since URL strategies are web-only.
|
||||||
|
void usePathUrlStrategy() {}
|
||||||
6
lib/platform/url_strategy_web.dart
Normal file
6
lib/platform/url_strategy_web.dart
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
import 'package:flutter_web_plugins/flutter_web_plugins.dart';
|
||||||
|
|
||||||
|
/// Web implementation that sets the path URL strategy.
|
||||||
|
void usePathUrlStrategy() {
|
||||||
|
flutter_web_plugins.usePathUrlStrategy();
|
||||||
|
}
|
||||||
@@ -3,7 +3,7 @@ import 'package:flutter_dotenv/flutter_dotenv.dart';
|
|||||||
import 'package:go_router/go_router.dart';
|
import 'package:go_router/go_router.dart';
|
||||||
import 'package:qpay/models/responsive_policy.dart';
|
import 'package:qpay/models/responsive_policy.dart';
|
||||||
import 'package:qpay/screens/gateway/gateway_controller.dart';
|
import 'package:qpay/screens/gateway/gateway_controller.dart';
|
||||||
import 'package:web/web.dart' as web;
|
import 'package:qpay/browser.dart';
|
||||||
|
|
||||||
class GatewayWebScreen extends StatefulWidget {
|
class GatewayWebScreen extends StatefulWidget {
|
||||||
const GatewayWebScreen({super.key});
|
const GatewayWebScreen({super.key});
|
||||||
@@ -50,7 +50,7 @@ class _GatewayWebScreenState extends State<GatewayWebScreen> {
|
|||||||
final transactionId =
|
final transactionId =
|
||||||
controller.transactionController.model.confirmationData['id'];
|
controller.transactionController.model.confirmationData['id'];
|
||||||
if (transactionId != null) {
|
if (transactionId != null) {
|
||||||
web.window.localStorage.setItem(
|
Browser.localStorage.setItem(
|
||||||
'pendingTransactionId',
|
'pendingTransactionId',
|
||||||
transactionId.toString(),
|
transactionId.toString(),
|
||||||
);
|
);
|
||||||
@@ -60,7 +60,7 @@ class _GatewayWebScreenState extends State<GatewayWebScreen> {
|
|||||||
// After payment, the gateway will redirect back to this app's host.
|
// After payment, the gateway will redirect back to this app's host.
|
||||||
// index.html then reads the saved transaction ID and navigates to
|
// index.html then reads the saved transaction ID and navigates to
|
||||||
// /poll/:id so the app can immediately start polling for the result.
|
// /poll/:id so the app can immediately start polling for the result.
|
||||||
web.window.location.href = url;
|
Browser.location.href = url;
|
||||||
}
|
}
|
||||||
|
|
||||||
@override
|
@override
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ import 'package:provider/provider.dart';
|
|||||||
import 'package:qpay/screens/gateway/gateway_controller.dart';
|
import 'package:qpay/screens/gateway/gateway_controller.dart';
|
||||||
import 'package:qpay/screens/transaction_controller.dart';
|
import 'package:qpay/screens/transaction_controller.dart';
|
||||||
import 'package:qpay/widgets/step_loading_widget.dart';
|
import 'package:qpay/widgets/step_loading_widget.dart';
|
||||||
import 'package:web/web.dart' as web;
|
import 'package:qpay/browser.dart';
|
||||||
|
|
||||||
class PollScreen extends StatefulWidget {
|
class PollScreen extends StatefulWidget {
|
||||||
final String? transactionId;
|
final String? transactionId;
|
||||||
@@ -39,8 +39,8 @@ class _PollScreenState extends State<PollScreen> {
|
|||||||
// Priority 2: localStorage (for when gateway redirect causes page reload
|
// Priority 2: localStorage (for when gateway redirect causes page reload
|
||||||
// and the route param path is not available due to hub redirect override)
|
// and the route param path is not available due to hub redirect override)
|
||||||
if (transactionId == null && kIsWeb) {
|
if (transactionId == null && kIsWeb) {
|
||||||
transactionId = web.window.localStorage.getItem('pendingTransactionId');
|
transactionId = Browser.localStorage.getItem('pendingTransactionId');
|
||||||
web.window.localStorage.removeItem('pendingTransactionId');
|
Browser.localStorage.removeItem('pendingTransactionId');
|
||||||
}
|
}
|
||||||
|
|
||||||
// Priority 3: in-memory confirmation data (normal SPA navigation)
|
// Priority 3: in-memory confirmation data (normal SPA navigation)
|
||||||
|
|||||||
6
lib/url_strategy.dart
Normal file
6
lib/url_strategy.dart
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
/// Platform-aware path URL strategy.
|
||||||
|
///
|
||||||
|
/// On web, sets the path URL strategy via [usePathUrlStrategy].
|
||||||
|
/// On non-web platforms, this is a no-op.
|
||||||
|
export 'platform/url_strategy_stub.dart'
|
||||||
|
if (dart.library.html) 'platform/url_strategy_web.dart';
|
||||||
@@ -120,6 +120,10 @@ flutter:
|
|||||||
|
|
||||||
icons_launcher:
|
icons_launcher:
|
||||||
image_path: "assets/velocity-icon-black.png"
|
image_path: "assets/velocity-icon-black.png"
|
||||||
|
adaptive_background_color: "#ffffff"
|
||||||
|
adaptive_foreground_image: "assets/velocity-icon-black.png"
|
||||||
|
adaptive_round_image: "assets/velocity-icon-black.png"
|
||||||
|
notification_image: "assets/velocity-icon-black.png"
|
||||||
platforms:
|
platforms:
|
||||||
android:
|
android:
|
||||||
enable: true
|
enable: true
|
||||||
|
|||||||
Reference in New Issue
Block a user