mirror of
https://github.com/KRTirtho/spotube.git
synced 2025-12-05 23:19:42 +00:00
63 lines
1.9 KiB
Dart
63 lines
1.9 KiB
Dart
import 'dart:io';
|
|
|
|
import 'package:flutter/material.dart';
|
|
import 'package:flutter_inappwebview/flutter_inappwebview.dart';
|
|
import 'package:path/path.dart';
|
|
import 'package:path_provider/path_provider.dart';
|
|
import 'package:fk_user_agent/fk_user_agent.dart';
|
|
|
|
Future<String?> getUserAgent() async {
|
|
if (Platform.isIOS || Platform.isAndroid) {
|
|
await FkUserAgent.init();
|
|
return FkUserAgent.userAgent;
|
|
}
|
|
return null;
|
|
}
|
|
|
|
final webViewEnvironment = Platform.isWindows
|
|
? getApplicationSupportDirectory().then((directory) async {
|
|
return await WebViewEnvironment.create(
|
|
settings: WebViewEnvironmentSettings(
|
|
userDataFolder: join(directory.path, 'inappwebview_data'),
|
|
),
|
|
);
|
|
})
|
|
: Future.value(null);
|
|
|
|
class WebviewPage extends StatelessWidget {
|
|
final String uri;
|
|
final void Function(String url)? onLoad;
|
|
const WebviewPage({super.key, required this.uri, this.onLoad});
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
return FutureBuilder(
|
|
future: Future.wait([webViewEnvironment, getUserAgent()]),
|
|
builder: (context, snapshot) {
|
|
if (snapshot.connectionState == ConnectionState.waiting) {
|
|
return const Center(child: CircularProgressIndicator());
|
|
}
|
|
|
|
return InAppWebView(
|
|
initialUrlRequest: URLRequest(url: WebUri(uri)),
|
|
webViewEnvironment: snapshot.data?[0] as WebViewEnvironment?,
|
|
initialSettings: InAppWebViewSettings(
|
|
userAgent: snapshot.data?[1] as String?,
|
|
),
|
|
onLoadStop: (controller, url) {
|
|
try {
|
|
if (onLoad != null && url != null) {
|
|
onLoad!(url.toString());
|
|
}
|
|
} catch (e, stack) {
|
|
debugPrint("[Webview][onLoad] Error: $e");
|
|
debugPrintStack(stackTrace: stack);
|
|
rethrow;
|
|
}
|
|
},
|
|
);
|
|
},
|
|
);
|
|
}
|
|
}
|