-
Notifications
You must be signed in to change notification settings - Fork 6
/
avatar_uploader.dart
48 lines (40 loc) · 1.59 KB
/
avatar_uploader.dart
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
import 'dart:io';
import 'package:flutter/cupertino.dart';
import 'package:flutter_tutorials/avatar-uploader-tutorial/data/services/media/media_service_interface.dart';
import 'package:flutter_tutorials/avatar-uploader-tutorial/data/services/service_locator.dart';
import 'package:flutter_tutorials/avatar-uploader-tutorial/ui/widgets/avatar_container.dart';
import 'package:flutter_tutorials/avatar-uploader-tutorial/ui/widgets/image_picker_action_sheet.dart';
class AvatarUploader extends StatefulWidget {
@override
_AvatarUploaderState createState() => _AvatarUploaderState();
}
class _AvatarUploaderState extends State<AvatarUploader> {
final MediaServiceInterface _mediaService = getIt<MediaServiceInterface>();
File? imageFile;
bool _isLoadingGettingImage = false;
Future<AppImageSource?> _pickImageSource() async {
AppImageSource? _appImageSource = await showCupertinoModalPopup(
context: context,
builder: (BuildContext context) => ImagePickerActionSheet(),
);
if (_appImageSource != null) {
_getImage(_appImageSource);
}
}
Future _getImage(AppImageSource _appImageSource) async {
setState(() => _isLoadingGettingImage = true);
final _pickedImageFile = await _mediaService.uploadImage(context, _appImageSource);
setState(() => _isLoadingGettingImage = false);
if (_pickedImageFile != null) {
setState(() => imageFile = _pickedImageFile);
}
}
@override
Widget build(BuildContext context) {
return AvatarContainer(
isLoading: _isLoadingGettingImage,
onTap: _pickImageSource,
imageFile: imageFile,
);
}
}