import 'dart:convert';
import 'dart:io';
import 'dart:typed_data';
import 'package:flutter/material.dart';
import 'package:flutter_inappwebview/flutter_inappwebview.dart';
import 'package:path_provider/path_provider.dart';
class InAppWebViewExampleScreen extends StatefulWidget {
@override
_InAppWebViewExampleScreenState createState() =>
new _InAppWebViewExampleScreenState();
}
class _InAppWebViewExampleScreenState extends State<InAppWebViewExampleScreen> {
late InAppWebViewController webView;
late Uint8List screenshotBytes;
@override
void initState() {
super.initState();
}
@override
void dispose() {
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text("InAppWebView")),
body: Container(
child: Column(children: <Widget>[
Expanded(
child: InAppWebView(
initialUrlRequest:
URLRequest(url: WebUri("https://github.com/flutter")),
onWebViewCreated: (InAppWebViewController controller) {
webView = controller;
},
onLoadStart: (InAppWebViewController controller, WebUri? url) {},
onLoadStop: (InAppWebViewController controller, WebUri? url) async {
try {
var canvasHeight = await controller.evaluateJavascript(
source:
"Math.max(document.documentElement.scrollHeight, document.body.scrollHeight);");
await controller.setOptions(
options: InAppWebViewGroupOptions(
crossPlatform: InAppWebViewOptions(
useShouldOverrideUrlLoading: true,
mediaPlaybackRequiresUserGesture: false,
),
android: AndroidInAppWebViewOptions(
useHybridComposition: true,
),
));
screenshotBytes = (await controller.takeScreenshot(
screenshotConfiguration: ScreenshotConfiguration(
compressFormat: CompressFormat.PNG,
//androidHeight: int.parse(canvasHeight.toString())
)))!;
showDialog(
context: context,
builder: (context) {
return AlertDialog(
content: SingleChildScrollView(
child: Image.memory(screenshotBytes),
),
);
},
);
} catch (e) {
print("Screenshot error: $e");
}
},
))
])));
}
}
class FullPageScreenshot extends StatefulWidget {
@override
_FullPageScreenshotState createState() => _FullPageScreenshotState();
}
class _FullPageScreenshotState extends State<FullPageScreenshot> {
late InAppWebViewController webViewController;
Future<void> _takeFullPageScreenshot() async {
try {
// Take screenshot of visible area only
Uint8List? imageBytes = await webViewController.takeScreenshot(
screenshotConfiguration: ScreenshotConfiguration(
compressFormat: CompressFormat.PNG,
),
);
if (imageBytes != null) {
final directory = await getApplicationDocumentsDirectory();
File imgFile = File('${directory.path}/screenshot.png');
await imgFile.writeAsBytes(imageBytes);
print('Screenshot saved to ${imgFile.path}');
ScaffoldMessenger.of(context).showSnackBar(SnackBar(content: Text('Screenshot saved!')));
}
} catch (e) {
print("Screenshot error: $e");
ScaffoldMessenger.of(context).showSnackBar(SnackBar(content: Text('Failed to take screenshot')));
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Full Page Screenshot'),
actions: [
IconButton(
icon: Icon(Icons.camera),
onPressed: _takeFullPageScreenshot,
),
],
),
body: InAppWebView(
initialUrlRequest: URLRequest(url: WebUri('https://upsoftech.com/biodata/public/templates/temp.html')),
onWebViewCreated: (controller) {
webViewController = controller;
},
// Add more configuration if needed
),
);
}
}
Comments
Post a Comment