Содержание
- 2. Глаза боятся, а попробовать хочется Flutter в действии Сатуров Евгений Android Flutter Teamlead, Surf saturov
- 3. Android/Flutter Teamlead FlutterDevPodcast PC Mobius GDG Voronezh Lead
- 4. Уже прочитали все статьи на Хабре про то, «как я запустил Hello World, и что из
- 5. Часть 0. То, что вы уже знаете про Flutter.
- 6. Flutter – мультиплатформенный open-source фреймворк; Приложения пишутся на Dart; Под капотом свой графический движок (Skia) и
- 7. *все картинки кликабельны
- 8. Архитектура фреймворка UI (контролы, анимации, стилизация, user input); Виджеты и стейт-менеджмент. Skia (графический движок); Dart (Runtime,
- 9. Архитектура фреймворка Skia (графический движок); Dart (Runtime, GC); Text (LibTxt). Отрисовка на канве; Нативные плагины. https://github.com/flutter/flutter
- 10. Всё своё ношу с собой Skia (графический движок); Dart (Runtime, GC); Text (LibTxt). Отрисовка на канве;
- 11. Типы сборок и компиляция Debug Release JIT AOT Low FPS; «Тяжёлое» приложение (> 40 Мб); Работает
- 12. Типы сборок и компиляция Android - Gradle; iOS – Xcode Build; Flutter Assemble – coming soon.
- 13. Часть 1. Наш опыт.
- 14. За последние полгода мы: Собрали команду; Написали 3 небольших приложения и стартанули большой финтех; Выработали ряд
- 15. Начинать работать с новой технологией надо так, чтобы о твоём позоре никто не узнал.
- 16. «Вселенная Парк»
- 17. «Вселенная Парк»
- 18. Карта экранов
- 19. 2 разработчика; 560 чел./час; 62% таски, 22% отладка, 15% на поболтать; 6 полноценных эпиков-фич; 76% попадание
- 20. Распределение времени
- 21. Не было написано ни строчки платформенного кода, всё покрыто плагинами: Yandex Mapkit Camera Permission Handler Shared
- 22. *чем два нативных приложения; Команда разработки на 40% меньше; Более линейные процессы; Больше времени остаётся на
- 23. NDA Финтех Расскажем в марте
- 24. Часть 2. Рекламная.
- 26. По-сравнению с двумя нативными приложениями - вероятно; Когда ты понимаешь, с какой стороны подступиться к задаче;
- 28. Нативный Look & Feel сам себя не сделает – это возможно, но вручную; Apple-юзеры всё ещё
- 29. Максимальная мимикрия
- 31. Нет бутылочных горлышек на рендеринге (прощай, JavaScript Bridge); Простота реализации асинхронных задач – миф (Future исполняется
- 33. Часть 3. Жизненная.
- 34. FLUTTER-ЛИД ПОСЛЕ СОБЕСЕДОВАНИЯ
- 35. Требуемый опыт: 1-3 года. Ищу Flutter-разработчика
- 36. Немного сухой статистики
- 37. Бэкграунд нашей Flutter-команды 6 1 1
- 38. Бэкграунд нашей Flutter-команды 6
- 39. Без «яблока» не обойтись Собрать билд локально; Настроить Firebase; Пофиксить специфичный баг вёрстки; Разобраться, почему не
- 40. Не Kotlin;;;;;;;;;;;;;;; Однопоточный (но есть Isolate); Нет модификаторов доступа: _приватность; Нет перегрузки функций; Mixins – интерфейсы
- 41. static String normalize(String inputString, {bool withPrefix = false}) { StringBuffer buff = StringBuffer(); for (var i
- 42. Future _findNearestShop() async { final userLocation = await _locInteractor.getLocationSafe().single; final shops = await getShops( lat: userLocation.latitude,
- 43. «Выучу только Flutter и Dart!»* * не сказал ни один успешный Flutter-разработчик
- 44. Flutter + Dart; Android + Kotlin; iOS + Swift; App Store Connect + TestFlight; Google Play
- 45. Периодически каждый из нас
- 46. https://pub.dev/flutter
- 47. https://pub.dev/flutter
- 48. Не очень хорошие популярные плагины https://pub.dev/packages/permission_handler - в вашем iOS-приложении будут указаны вообще все существующие пермишны,
- 49. Самое время собирать «звёздочки» Dagger Retrofit RxJava inject.dart Dio RxDart
- 50. import 'package:dio/dio.dart'; void getHttp() async { try { Response response = await Dio().get("http://www.google.com"); print(response); } catch
- 51. firebase_core firebase_messaging firebase_analytics firebase_auth firebase_storage firebase_database firebase_crashlytics firebase_admob Firebase что-то знает firebase_dynamic_links firebase_remote_config firebase_ml_vision firebase_performance firebase_in_app_messaging
- 52. Проверенные нами плагины https://pub.dev/packages/flutter_svg – поддержка векторной графики (позволяет использовать *.svg); https://pub.dev/packages/camera – удобное API для
- 53. Если у вас есть время
- 54. Хорошая новость: На Flutter можно написать вообще всё что угодно;
- 55. Плохая новость: На Flutter можно написать вообще всё что угодно; Для этого нужно знать очень много
- 56. Плохая новость номер два: На Flutter можно написать вообще всё что угодно; Для этого нужно знать
- 57. Да, можно. Dart (UI, бизнес-логика); Platform Channels + Native Plugins (Kotlin, Swift и т.д.); Platform Views;
- 58. История про бесшовную авторизацию. (из новейшего опыта)
- 59. Два нативных «легаси» приложения; Сложнейшая процедура инициализации сессии с необходимостью подписи сертификата ЭЦП в веб-версии сервиса;
- 60. Да, можно. Dart (UI, бизнес-логика); Platform Channels + Native Plugins (Kotlin, Swift и т.д.); Platform Views;
- 61. Схема авторизации Auth Credentials Authentication
- 62. Auth Credentials Authentication Auth Credentials Authentication
- 63. Platform Credentials Provider Provide Auth Credentials Flutter Credentials Provider Authentication
- 64. const _platform = MethodChannel(_authProviderChannelName); Инициализация MethodChannel
- 65. class PlatformAuthDataProvider { Future getCert(String userId, String pinHash) { return _platform.invokeMethod( getCertificateMethodName, [userId, pin], ); }
- 66. class PlatformAuthDataProvider { Future getCert(String userId, String pinHash) { return _platform.invokeMethod( getCertificateMethodName, [userId, pin], ); }
- 67. class PlatformAuthDataProvider { Future getCert(String userId, String pinHash) { return _platform.invokeMethod( "fghvfkajsr/m1kjnbaf", [userId, pin], ); }
- 68. Это вам не a.a.b.c()
- 69. Реверс-инжиниринг практически бесполезен; Обфускация в Dart существует, но… Note: that obfuscation support is not very well
- 70. MethodChannel( flutterView, authProviderChannelName ).setMethodCallHandler { call, result -> launch { val output: Any = when (call.method)
- 71. Platform Credentials Provider Provide Auth Credentials Flutter Credentials Provider Authentication Migrate Auth Credentials
- 72. Hot Reload спасает жизнь при разработке
- 73. Но на CI/CD запасайтесь поп-корном
- 74. Fastlane; Firebase App Distribution. Джентельменский деплой-набор
- 75. Часть 4. Вдохновляющая.
- 76. Подходы; Синтаксис языка; Архитектура. Всё это знакомо и привычно любому мобильному разработчику. Переход на Flutter –
- 77. Применение изменений: ≈ 2-3 сек. Синхронизация проекта: ≈ 5-10 сек. Больше времени с друзьями и близкими
- 78. Нет проверенных лучших практик; Нет надежды на то, что кто-то поможет (даже SOF); С каждой проблемой
- 80. Ссылки на меня https://twitter.com/saturovv https://www.facebook.com/saturov https://habr.com/ru/users/saturovv/ Telegram: @saturov
- 82. Скачать презентацию