webviewx
webviewx copied to clipboard
The token is not passed on android only
the dart code below displays a web pdf by authenticating with a token to a backend via the webviewx pub: , the token however on android is not passed and the page displays an error of authentication, what should I change to ensure that the token is also passed on android? How to solve this error by WebViewX?
import 'dart:developer';
import 'dart:io';
import 'dart:math';
import 'package:flutter/material.dart';
import 'package:webviewx/webviewx.dart';
class WebViewXPage extends StatefulWidget {
final Url, Token;
WebViewXPage(this.Url, this.Token);
@override
_WebViewXPageState createState() => _WebViewXPageState();
}
class _WebViewXPageState extends State<WebViewXPage> {
late WebViewXController webviewController;
final initialContent =
'<h4> This is some hardcoded HTML code embedded inside the webview <h4> <h2> Hello world! <h2>';
final executeJsErrorMessage =
'Failed to execute this task because the current content is (probably) URL that allows iframe embedding, on Web.\n\n'
'A short reason for this is that, when a normal URL is embedded in the iframe, you do not actually own that content so you cant call your custom functions\n'
'(read the documentation to find out why).';
Size get screenSize => MediaQuery.of(context).size;
@override
void dispose() {
webviewController.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: Container(
padding: const EdgeInsets.all(10.0),
child: Column(
children: <Widget>[
Container(
decoration: BoxDecoration(
border: Border.all(width: 0.2),
),
child: _buildWebViewX(),
),
],
),
),
),
);
}
Widget _buildWebViewX() {
return WebViewX(
key: const ValueKey('webviewx'),
initialContent: widget.Url,
initialSourceType: SourceType.html,
height: screenSize.height - 150,
width: screenSize.width,
onWebViewCreated: (controller) =>{ webviewController = controller, _setUrl()},
onPageFinished: (src) => debugPrint('The page has finished loading: $src\n'),
jsContent: const {
EmbeddedJsContent(
js: "function testPlatformIndependentMethod() { console.log('Hi from JS') }",
),
EmbeddedJsContent(
webJs: "function testPlatformSpecificMethod(msg) { TestDartCallback('Web callback says: ' + msg) }",
mobileJs:
"function testPlatformSpecificMethod(msg) { TestDartCallback.postMessage('Mobile callback says: ' + msg) }",
),
},
webSpecificParams: const WebSpecificParams(
printDebugInfo: true,
),
mobileSpecificParams: const MobileSpecificParams(
androidEnableHybridComposition: true,
),
navigationDelegate: (navigation) {
debugPrint(navigation.content.sourceType.toString());
return NavigationDecision.navigate;
},
);
}
void _setUrl() {
webviewController.loadContent(widget.Url, SourceType.urlBypass, headers: {'Cmdbuild-authorization': widget.Token});
}
Widget buildSpace({
Axis direction = Axis.horizontal,
double amount = 0.2,
bool flex = true,
}) {
return flex
? Flexible(
child: FractionallySizedBox(
widthFactor: direction == Axis.horizontal ? amount : null,
heightFactor: direction == Axis.vertical ? amount : null,
),
)
: SizedBox(
width: direction == Axis.horizontal ? amount : null,
height: direction == Axis.vertical ? amount : null,
);
}
}
You didn't specify a type for the variable Url
or Token
. Can you try specifying it? I guess both should be Strings