aws_helper 0.0.3 aws_helper: ^0.0.3 copied to clipboard
A new Flutter plugin.
import 'dart:async';
import 'dart:io';
// ignore: import_of_legacy_library_into_null_safe
import 'package:aws_helper/aws_helper.dart';
import 'package:flutter/material.dart';
import 'package:image_picker/image_picker.dart';
import 'package:permission_handler/permission_handler.dart';
import 'custom_dialog.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: MainPage(),
);
}
}
class MainPage extends StatefulWidget {
@override
_MainPageState createState() => _MainPageState();
}
class _MainPageState extends State<MainPage> {
File _image = new File("");
final picker = ImagePicker();
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("S3 Helper"),
actions: [
IconButton(
icon: Icon(
Icons.cloud_upload_rounded,
),
onPressed: () {
uploadImageOnS3();
})
],
),
body: Column(
children: [
Center(
child: _image.path.isEmpty
? Text('No image selected.')
: Image.file(_image),
),
],
),
floatingActionButton: FloatingActionButton(
onPressed: () {
_onAddPhotoClicked(context);
},
tooltip: 'Pick Image',
child: Icon(Icons.add_a_photo),
),
);
}
_onAddPhotoClicked(context) async {
Permission permission;
if (Platform.isIOS) {
permission = Permission.photos;
} else {
permission = Permission.storage;
}
PermissionStatus permissionStatus = await permission.status;
print(permissionStatus);
if (permissionStatus == PermissionStatus.restricted) {
_showOpenAppSettingsDialog(context);
permissionStatus = await permission.status;
if (permissionStatus != PermissionStatus.granted) {
//Only continue if permission granted
return;
}
}
if (permissionStatus == PermissionStatus.permanentlyDenied) {
_showOpenAppSettingsDialog(context);
permissionStatus = await permission.status;
if (permissionStatus != PermissionStatus.granted) {
//Only continue if permission granted
return;
}
}
if (permissionStatus == PermissionStatus.denied) {
if (Platform.isIOS) {
_showOpenAppSettingsDialog(context);
} else {
permissionStatus = await permission.request();
}
if (permissionStatus != PermissionStatus.granted) {
//Only continue if permission granted
return;
}
}
if (permissionStatus == PermissionStatus.granted) {
print('Permission granted');
final pickedFile = await picker.getImage(source: ImageSource.gallery);
File image = File(pickedFile!.path);
setState(() {
_image = image;
});
}
}
_showOpenAppSettingsDialog(context) {
return CustomDialog.show(
context,
'Permission needed',
'Photos permission is needed to select photos',
positiveButtonText: 'Open settings',
onPressedPositive: () {
openAppSettings();
},
);
}
Future<void> uploadImageOnS3() async {
AwsHelper s3Helper = AwsHelper(
awsKey: "",
awsSecret: "",
region: Regions.AP_SOUTH_1,
bucketPath: "",
filePath: _image.path,
);
displayUploadDialog(s3Helper);
String uploadedImageUrl = await s3Helper.uploadFile;
Navigator.of(context).pop();
debugPrint(uploadedImageUrl);
}
Future displayUploadDialog(AwsHelper s3Helper) {
return showDialog(
context: context,
barrierDismissible: false,
builder: (context) => StreamBuilder(
stream: s3Helper.getUploadStatus,
builder: (BuildContext context, AsyncSnapshot snapshot) {
return buildFileUploadDialog(snapshot, context);
},
),
);
}
AlertDialog buildFileUploadDialog(
AsyncSnapshot snapshot, BuildContext context) {
return AlertDialog(
title: Container(
padding: EdgeInsets.all(6),
child: LinearProgressIndicator(
value: (snapshot.data != null) ? snapshot.data / 100 : 0,
valueColor:
AlwaysStoppedAnimation<Color>(Theme.of(context).primaryColorDark),
),
),
content: Padding(
padding: const EdgeInsets.symmetric(horizontal: 6),
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Expanded(child: Text('Uploading...')),
Text("${snapshot.data ?? 0}%"),
],
),
),
);
}
}