Majid Hajian
mhadaily
Darren
Majid Hajian
mhadaily
import 'package:flutter/material.dart';
MaterialApp(
ThemeData(
name: "Majid Hajian",
location: "Oslo, Norway",
description: '''
Google Developer Expert
Passionate Software engineer,
Community Leader, Author and international Speaker
''',
main: "Head of DevRel at Invertase.io",
homepage: "https://www.majidhajian.com",
socials: {
twitter: "https://www.twitter.com/mhadaily",
github: "https://www.github.com/mhadaily"
},
author: {
Pluralsight: "www.pluralsight.com/authors/majid-hajian",
Apress: "Progressive Web App with Angular, Book",
PacktPub: "PWA development",
Udemy: "PWA development",
}
founder: "Softiware As (www.Softiware.com)"
devDependencies: {
tea: "Ginger",
mac: "10.14+",
},
community: {
FlutterVikings: "Orginizer",
FlutterCommunity: "Admin/Lead",
...more
},
),
);
Find me on the internet by
Head of DevRel at Invertase
Majid Hajian
flutter create geek_photos
flutter pub global activate flutterfire_cli
flutter pub add firebase_core
flutter pub add cloud_firestore
flutter pub add firebase_storage
mhadaily
mhadaily
import 'package:firebase_core/firebase_core.dart';
import 'package:flutter/foundation.dart';
import 'firebase_options.dart';
void main() {
WidgetsFlutterBinding.ensureInitialized();
Firebase.initializeApp(
options: DefaultFirebaseOptions.currentPlatform
);
runApp(const MyApp());
}
mhadaily
class Home extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: const Text("Vacation photos")),
body: Container(),
floatingActionButton: const FloatingActionButton(
onPressed: addPictures,
child: Icon(Icons.add),
),
);
}
}
// Basic homepage
mhadaily
Future<void> addPictures() async {
final filePickerResult = await FilePicker.platform.pickFiles();
if (filePickerResult == null) return;
for (var file in filePickerResult.files) {
final result = await FirebaseStorage.instance
.ref('photos/${file.name}')
.putData(
file.bytes!,
SettableMetadata(contentType: mime.lookupMimeType(file.name)),
);
await FirebaseFirestore.instance.collection('photos').add({
'createdAt': DateTime.now().toIso8601String(),
'imageUrl': result.ref.fullPath,
});
}
}
mhadaily
mhadaily
mhadaily
mhadaily
mhadaily
Future<String> getThumbnail(String photoPath) async {
final ext = path.extension(photoPath);
final name = path.basenameWithoutExtension(photoPath);
final thumbnailPath = 'photos/thumbnails/${name}_200x200$ext';
final ref = FirebaseStorage.instance.ref(thumbnailPath);
while (true) {
try {
await ref.getMetadata();
return ref.getDownloadURL();
} catch (e) {
await Future.delayed(const Duration(milliseconds: 1000));
}
}
}
mhadaily
mhadaily
mhadaily
Future<void> sendEmailWithPhoto(String url) async {
await FirebaseFirestore.instance
.collection('sharedPhotos')
.add({
'to': 'awesome@extensions.dev',
'message': {
'subject': 'Vacation photo 🏞',
'html': '<img src="$url" />',
'text': 'Check out this photo 👀',
}
});
}
mhadaily
mhadaily
const body = 'Hey, check my photo now! $photoUrl';
const smsBody = {
to: '$phoneNumber',
body: body,
};
const whatsappBody = {
from: 'whatsapp:+14155238886',
to: 'whatsapp:$phoneNumber',
body: body,
};
Future<void> sendSmsWithPhoto(
String photoUrl,
String phoneNumber,
) async {
await FirebaseFirestore.instance
.collection('messages')
.add({
to: '$phoneNumber',
body: 'Hey, check my photo now! $photoUrl',
});
}
Future<void> sendWhatsappMsgWithPhoto(
String photoUrl,
String phoneNumber,
) async {
await FirebaseFirestore.instance
.collection('messages')
.add({
from: `whatsapp:${TWILIO_FROM_NUMBER}`,
to: `whatsapp:${phoneNumber}`,
body: 'Hey, check my photo now! $photoUrl',
});
}
Find me on the internet by
Head of DevRel at Invertase
Majid Hajian
Slides
slides.com/mhadaily