import 'dart:async';
import 'dart:html';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
enum _DragState {
dragging,
notDragging,
}
class DropZone extends StatefulWidget {
@override
State createState() {
return _DropZoneState();
}
}
class _DropZoneState extends State {
StreamSubscription _onDragOverSubscription;
StreamSubscription _onDropSubscription;
final StreamController> _pointStreamController = new StreamController>.broadcast();
final StreamController<_DragState> _dragStateStreamController = new StreamController<_DragState>.broadcast();
@override
void dispose() {
this._onDropSubscription.cancel();
this._onDragOverSubscription.cancel();
this._pointStreamController.close();
this._dragStateStreamController.close();
super.dispose();
}
List _files = [];
void _onDrop(MouseEvent value) {
value.stopPropagation();
value.preventDefault();
_pointStreamController.sink.add(null);
_addFiles(value.dataTransfer.files);
}
void _addFiles(List newFiles) {
this.setState(() {
this._files = this._files..addAll(newFiles);
/// TODO
print(this._files);
});
}
void _onDragOver(MouseEvent value) {
value.stopPropagation();
value.preventDefault();
this._pointStreamController.sink.add(Point(value.layer.x.toDouble(), value.layer.y.toDouble()));
this._dragStateStreamController.sink.add(_DragState.dragging);
}
@override
void initState() {
super.initState();
this._onDropSubscription = document.body.onDrop.listen(_onDrop);
this._onDragOverSubscription = document.body.onDragOver.listen(_onDragOver);
}
Widget _fileDrop(BuildContext context) {
// styling
return Padding(
padding: const EdgeInsets.all(8.0),
child: Container(
height: MediaQuery.of(context).size.height - 200,
decoration: BoxDecoration(
border: Border.all(
color: Color.fromRGBO(125, 125, 125, 0.7)
)
),
),
);
}
@override
Widget build(BuildContext context) {
return _fileDrop(context);
}
}