-
Notifications
You must be signed in to change notification settings - Fork 4
Expand file tree
/
Copy pathpayload.dart
More file actions
68 lines (57 loc) · 1.28 KB
/
payload.dart
File metadata and controls
68 lines (57 loc) · 1.28 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
import 'dart:io';
abstract class Payload<T> {
late T value;
late String name;
late int length = 0;
late String? path;
Future<String> readAsString();
Stream<dynamic> readAsStream();
}
class FilePayload extends Payload<File> {
FilePayload(File newValue) {
value = newValue;
length = newValue.lengthSync();
name = newValue.uri.pathSegments.last;
path = newValue.path;
}
@override
Future<String> readAsString() {
return value.readAsString();
}
@override
Stream<List<int>> readAsStream() {
return value.openRead();
}
}
class DataPayload extends Payload<String> {
DataPayload(String newValue) {
value = newValue;
length = -1;
path = null;
name = "file";
}
@override
Future<String> readAsString() {
throw ArgumentError("Remote url doesn't not support input streams");
}
@override
Stream<File> readAsStream() {
throw ArgumentError("Remote url doesn't not support input streams");
}
}
class StreamPayload extends Payload<Stream> {
StreamPayload(Stream stream) {
value = stream;
name = 'file';
stream.length.then((value) => length = value);
path = null;
}
@override
Future<String> readAsString() {
return value.join();
}
@override
Stream<dynamic> readAsStream() {
return value;
}
}