adding packages

This commit is contained in:
2026-01-15 14:38:46 -08:00
parent ef86e3ab6a
commit 6869cf47e5
5253 changed files with 726695 additions and 34 deletions
@@ -0,0 +1,278 @@
import 'package:easy_web_view/easy_web_view.dart';
import 'package:flutter/material.dart';
class BasicExample extends StatefulWidget {
const BasicExample({Key? key}) : super(key: key);
@override
_BasicExampleState createState() => _BasicExampleState();
}
class _BasicExampleState extends State<BasicExample> {
String src = 'https://flutter.dev';
String src2 = 'https://flutter.dev/community';
String src3 = 'http://www.youtube.com/embed/IyFZznAk69U';
static ValueKey key = const ValueKey('key_0');
static ValueKey key2 = const ValueKey('key_1');
static ValueKey key3 = const ValueKey('key_2');
bool _isHtml = false;
bool _blockNavigation = false;
bool _isMarkdown = false;
bool _useWidgets = false;
bool _editing = false;
bool _isSelectable = false;
bool _showSummernote = false;
bool open = false;
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('Easy Web View'),
leading: IconButton(
icon: const Icon(Icons.access_time),
onPressed: () {
setState(() {
print("Click!");
open = !open;
});
},
//tooltip: "Menu",
),
actions: <Widget>[
Builder(builder: (context) {
return IconButton(
icon: Icon(_editing ? Icons.close : Icons.settings),
onPressed: () {
if (mounted) {
setState(() {
_editing = !_editing;
});
}
},
);
}),
],
),
body: _editing
? SingleChildScrollView(
child: Column(
children: <Widget>[
SwitchListTile(
title: const Text('Html Content'),
value: _isHtml,
onChanged: (val) {
if (mounted) {
setState(() {
_isHtml = val;
if (val) {
_isMarkdown = false;
src = htmlContent;
} else {
src = url;
}
});
}
},
),
SwitchListTile(
title: const Text('Block Html Navigation'),
value: _blockNavigation,
onChanged: (val) {
if (mounted) {
setState(() {
_blockNavigation = val;
});
}
},
),
SwitchListTile(
title: const Text('Markdown Content'),
value: _isMarkdown,
onChanged: (val) {
if (mounted) {
setState(() {
_isMarkdown = val;
if (val) {
_isHtml = false;
src = markdownContent;
} else {
src = url;
}
});
}
},
),
SwitchListTile(
title: const Text('Use Widgets'),
value: _useWidgets,
onChanged: (val) {
if (mounted) {
setState(() {
_useWidgets = val;
});
}
},
),
SwitchListTile(
title: const Text('Selectable Text'),
value: _isSelectable,
onChanged: (val) {
if (mounted) {
setState(() {
_isSelectable = val;
});
}
},
),
SwitchListTile(
title: const Text('Show Summernote'),
value: _showSummernote,
onChanged: (val) {
if (mounted) {
setState(() {
_showSummernote = val;
if (val) {
_isMarkdown = false;
_isHtml = true;
src = summernoteHtml;
} else {
src = url;
}
});
}
},
),
],
),
)
: Stack(
children: <Widget>[
Row(
children: <Widget>[
Expanded(
flex: 1,
child: EasyWebView(
src: src,
onLoaded: (_) {
print('$key: Loaded: $src');
},
isMarkdown: _isMarkdown,
convertToWidgets: _useWidgets,
key: key,
)),
Expanded(
flex: 1,
child: EasyWebView(
onLoaded: (_) {
print('$key2: Loaded: $src2');
},
src: src2,
key: key2,
isMarkdown: _isMarkdown,
convertToWidgets: _useWidgets,
),
),
],
),
Column(
children: <Widget>[
Expanded(
flex: 3,
child: Container(),
),
Expanded(
flex: 1,
child: SizedBox(
width: (open) ? 500 : 0,
child: EasyWebView(
src: src3,
onLoaded: (_) {
print('$key3: Loaded: $src3');
},
isMarkdown: _isMarkdown,
convertToWidgets: _useWidgets,
key: key3,
),
)),
],
)
],
));
}
String get htmlContent => """
<!DOCTYPE html>
<html>
<head>
<title>Page Title</title>
</head>
<body>
<h1>This is a Heading</h1>
<p>This is a paragraph.</p>
</body>
</html>
""";
String get markdownContent => """
# This is a heading
## Here's a smaller heading
This is a paragraph
* Here's a bulleted list
* Another item
1. And an ordered list
1. The numbers don't matter
> This is a qoute
[This is a link to Flutter](https://flutter.dev)
""";
String get embeedHtml => """
<iframe width="560" height="315" src="https://www.youtube.com/embed/rtBkU4pvHcw?controls=0" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
""";
String get url => 'https://flutter.dev';
String summernoteHtml = '''
<html>
<head>
<meta charset="UTF-8">
<script src="https://code.jquery.com/jquery-3.4.1.slim.min.js" integrity="sha384-J6qa4849blE2+poT4WnyKhv5vZF5SrPo0iEjwBvKU7imGFAV0wwj1yYfoRSJoZ+n" crossorigin="anonymous"></script>
<link href="https://cdn.jsdelivr.net/npm/summernote@0.8.18/dist/summernote-lite.min.css" rel="stylesheet">
<script src="https://cdn.jsdelivr.net/npm/summernote@0.8.18/dist/summernote-lite.min.js"></script>
</head>
<body>
<div id="summernote"></div>
<script>
window.onload = function () {
\$('#summernote').summernote({
height: 400,
tabsize: 2,
callbacks: {
onChange: function() {
\$('#html-content').text(\$('#summernote').summernote('code'));
window.parent.postMessage(\$('#summernote').summernote('code'), '*');
if (window.Test != null) {
window.Test.postMessage(\$('#summernote').summernote('code'));
}
}
},
toolbar: [
['style', ['style']],
['font', ['bold', 'underline', 'clear']],
['color', ['color']],
['para', ['ul', 'ol', 'paragraph']],
['table', ['table']],
['insert', ['link', 'picture']],
['view', ['codeview']]
]
});
}
</script>
<div id="html-content" style="display: none"></div>
</body>
</html>
''';
}
@@ -0,0 +1,118 @@
import 'dart:convert';
import 'dart:developer';
import 'dart:typed_data';
import 'package:file_saver/file_saver.dart';
import 'package:easy_web_view/easy_web_view.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:async/async.dart';
import 'package:flutter/services.dart';
class HtmlToPdfTest extends StatefulWidget {
const HtmlToPdfTest({Key? key}) : super(key: key);
@override
State<HtmlToPdfTest> createState() => _HtmlToPdfTestState();
}
class _HtmlToPdfTestState extends State<HtmlToPdfTest> {
final _templateMemoizer = AsyncMemoizer<String>();
EasyWebViewControllerWrapperBase? _controller;
final _key = const ValueKey('test_html_to_pdf');
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('Test HTML To PDF'),
actions: [
if (_controller != null)
IconButton(
onPressed: () async {
final msg = {
'id': 'htmltopdf',
// 'width': 1024,
'format': [1000, 800]
};
if (kIsWeb) {
_controller!.postMessageWeb(msg, '*');
} else {
_controller!
.evaluateJSMobile('htmlToPDF(${jsonEncode(msg)})');
}
},
icon: const Icon(Icons.check_box),
),
],
),
body: FutureBuilder<String>(
future: _templateMemoizer.runOnce(
() => rootBundle.loadString('assets/test_html_to_pdf.html')),
builder: (context, snapshot) {
final invoiceSrc = snapshot.data;
if (invoiceSrc == null) {
return const Center(child: CircularProgressIndicator());
}
return EasyWebView(
src: invoiceSrc,
onLoaded: (controller) {
setState(() {
_controller = controller;
});
},
key: _key,
options: WebViewOptions(
crossWindowEvents: [
CrossWindowEvent(
name: 'ParentChannel',
eventAction: (eventMessage) async {
if (eventMessage is Map) {
final id = eventMessage['id'];
if (id == 'htmltopdf') {
final res = eventMessage['result'];
log(res.runtimeType.toString());
if (res is Uint8List) {
await save(
name: 'easy_web_view_invoice',
bytes: res,
ext: 'pdf',
mimeType: MimeType.pdf,
);
log(res.runtimeType.toString());
}
}
}
// log('Event message: $eventMessage');
},
),
],
),
);
},
),
);
}
}
Future<void> save({
required String name,
required Uint8List bytes,
required String ext,
required MimeType mimeType,
}) async {
if (kIsWeb) {
await FileSaver.instance.saveFile(
name: 'easy_web_view_invoice',
bytes: bytes,
ext: 'pdf',
mimeType: MimeType.pdf,
);
} else {
await FileSaver.instance.saveAs(
name: 'easy_web_view_invoice',
bytes: bytes,
ext: 'pdf',
mimeType: MimeType.pdf,
);
}
}