upload_file.dart 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. import 'dart:async';
  2. import 'dart:html';
  3. import 'dart:typed_data';
  4. import 'dart:ui' as ui;
  5. import 'package:flutter/cupertino.dart';
  6. class UploadFile extends StatefulWidget {
  7. // double width, height;
  8. Widget child;
  9. var callback;
  10. UploadFile(
  11. {Key? key,
  12. // required this.width,
  13. // required this.height,
  14. required this.child,
  15. required this.callback})
  16. : super(key: key);
  17. @override
  18. State<UploadFile> createState() => UploadFileState();
  19. }
  20. class UploadFileState extends State<UploadFile> {
  21. // InputElement input = InputElement(type: '');
  22. FileUploadInputElement uploadInput = FileUploadInputElement();
  23. @override
  24. void initState() {
  25. // TODO: implement initState
  26. Timer(const Duration(seconds: 1), () {
  27. // uploadInput.click();
  28. chooseFile();
  29. });
  30. super.initState();
  31. }
  32. chooseFile() async {
  33. uploadInput.accept = '.png,.jpg,.jpeg';
  34. uploadInput.multiple = false;
  35. // uploadInput.click();
  36. uploadInput.onChange.listen((e) {
  37. final files = uploadInput.files;
  38. if (files?.length == 1) {
  39. FileReader reader = FileReader();
  40. reader.onLoadEnd.listen((event) {
  41. setState(() {
  42. widget.callback(reader.result as Uint8List);
  43. // chooseImage = reader.result as Uint8List;
  44. });
  45. });
  46. reader.readAsArrayBuffer(files![0]);
  47. }
  48. });
  49. }
  50. @override
  51. Widget build(BuildContext context) {
  52. String _divId = "file_" + DateTime.now().toIso8601String();
  53. ui.platformViewRegistry.registerViewFactory(
  54. _divId,
  55. (int viewId) => uploadInput
  56. ..style.width = '100%'
  57. ..style.height = '100%'
  58. ..style.opacity = '0.0');
  59. return Stack(
  60. children: [
  61. widget.child,
  62. Positioned(
  63. left: 0,right: 0,top: 0,bottom: 0
  64. ,child: HtmlElementView(
  65. key: UniqueKey(),
  66. viewType: _divId,
  67. ))
  68. // SizedBox(
  69. // width: widget.width,
  70. // height: widget.height,
  71. // child: HtmlElementView(
  72. // key: UniqueKey(),
  73. // viewType: _divId,
  74. // ),
  75. // )
  76. // SizedBox()
  77. ],
  78. );
  79. }
  80. }