Как стать автором
Обновить

Комментарии 53

Таки Гугл кинет всех с Андроидом в 23-м году? И «Все на Фуксию!»:-) Надо будет почитать про flutter.
А потом, в 26-м «Все на Герань!». Только недавно начал себя более менее уверенно чувствовать в Angular (после довольно плотной работы с Angular.js)… А уже и vue на пятки наступает, и react&redux сбоку толкается. Теперь вот ещё Polymer да dart с flutter'om.

Фронтендер, как вечный новичок в этом непостоянном мире. Никакого спокойствия.
Это конкуренция, которая в итоге приведет к лучшей технологии.

Не, не кинул. Но ситуация в стране изменилась.

Коммент из будущего.

Прочитал дату своего коммента, поразился, как из другой реальности...

Я вот тоже изучаю flutter.
Писать наверное удобнее всего на нем UI(Во всяком случае для меня)
Но вот он жутко тормознутый… я об этом писал в других топиках про flutter на хабре, но с тех пор впечатление о тормознутости только усилилось.
В релизной сборке? И на какой версии системы?
flutter doctor
Doctor summary (to see all details, run flutter doctor -v):
[✓] Flutter (Channel beta, v0.8.2, on Linux, locale ru_RU.utf8)
[!] Android toolchain - develop for Android devices (Android SDK 27.0.3)
    ✗ Android license status unknown.
[✓] Android Studio (version 3.0)

Ну вот такое окружение.

Про релизную сборку вопрос открыт — в статье описано, почему дебажная сборка может лагать.

Про версию системы я не корректно выразился. Я хотел узнать про версию Android\ios. Слышал, что на 4 Android может лагать.

Сам я на эмуляторе с 8 Android, на ios симуляторах, на реальном устройстве с 8 Android лагов не встречал даже на дебажной сборке.
Да это дебажная сборка… релизная не сильно отличается по скорости.
А вот в моем опыте Android 4 работает лучше чем 5 й.(причем 5й по железу лучше)
6й также как 4 й работает.Я не проверял на 8м но дело в том, что всё относительно… я разрабатываю на java. И вот думаю… а повторю что-то на flutter… и отличия по производительности огромные.Ладно я смерился что apk в 12 раз больше… ладно оперативки в 10 раз больше потребляет… Но слишком медленно… Да… возможно нет ещё опыта (и возможно криворукий)… но беру примеры, в группе samples что сам flutter предлагает к изучению.(и там есть что-то подобное задачки) и вот эти рекомендованные, сделанные специалистами. тоже тормозят
Ну я вот собрал релизную сборку Startup Name Generator из офф доков и она по сравнению с дебаг версией работает сильно лучше (на iOS)
НЛО прилетело и опубликовало эту надпись здесь
Я не понимаю, как может быть удобным это месиво элементов стилей и значений текстовой строки?
Про привыкание не надо, зачем привыкать, скажем, к кровати без матраса?

Согласен на все 100% — код на Flutter безобразен и хаотичен! Просто не понятно, как обычные два текстовых поля могут занимать 118 строк кода, который представляет собой ужаснейшую кашу?!

Код действительно выглядит как каша.
Но дело не в фреймворке, а в моем решении не разбивать приложение на модули в первой части.

Это конечно же не все. Смешивание данных и отображения тоже является плохим подходом. Дальше я постараюсь показать как разделить эти две сущности. И даже то, как вынести стилизацию — в Flutter это очень простая задача (не в сравнении с веб, но в сравнении с другими нативными или околонативными решениями).
Вот мне наоборот ближе именно flutter.По java мне наоборот не нравится, что файлы логики и кода разбросаны.И сделать красивый насыщенный дизайн на java непросто.И flutter он очень продуман писать на нем UI… И можно быстро получить хороший дизайн(Почти как в вебе).Это меня и подкупило.Вот в примерах есть сложные интерфейсы и просто изящный дизайн.И смотря код… там оно просто как будто сделано «мимоходом»,-играючи… Поднять такое на java или kotlin будет весьма непросто и точно не играючи.Если бы не его тормознутость.
И смотря код… там оно просто как будто сделано «мимоходом»,-играючи…

Смотря на код простейшего экрана с двумя полями, который сделан — такое ощущение — с помощью молотка и зубила, мне страшно представить, как будет выглядеть код более менее сложного UI.

Там почти такая же парадигма(техническая философия) как и React.
После React довольно легко привыкнуть, хотя это индивидуально.За эти внешние неудобства кода следует некоторая бонусная «оплата»… Много разных кнопок на любой вкус, легко делать градиенты, отступы, нахлесты, вертикальный скролинг(или как его называют ) sliding(слайдинг), закругления, отдельные темы,- всё просто делается из коробки.Т.е можно получить насыщенный интерфейс как в вебе.На java(kotlin) это на порядок сложнее.
После React довольно легко привыкнуть

К такому нельзя привыкнуть.


Много разных кнопок на любой вкус, легко делать градиенты, отступы, нахлесты, вертикальный скролинг(или как его называют ) sliding(слайдинг), закругления, отдельные темы

Это можно сделать везде, это отнюдь не плюсы.

Описывать UI не на декларативном DSL, а на обычно ЯП, да еще с довольно громоздким синтаксисом. Куча скобочек и всего этого. Это выглядит довольно громоздко и неудобно.
Я раньше тоже так думал, но на самом деле оказалось в некоторых моментах даже удобнее. Веселее всего когда хочется сделать UI зависимым от условий. В декларативном стиле впихиваются свои специальные конструкции, а здесь пишешь как писал. Когда есть визуальная среда разработки интерфейса(компонентики накидывать), тогда вообще нет никакой разницы что там под капотом. Непривычно писать интерфейс кодом обычного ЯП, но быстро привыкаешь всё повторяющееся выделять в отдельные компоненты(функции) и в итоге получается даже компактнее и красивее чем в декларативных языках.
В декларативном стиле впихиваются свои специальные конструкции, а здесь пишешь как писал.

Ну вроде, у реакта такая же фишка. Особо своего DSL нет, пишешь на JS. Но разметка-то все же на HTML JSX.

Этим летом я попробовал Flutter — для сравнения с RN

Качество реализации мне понравилось гораздо больше, чем React Native
А вот впечатления от Dart, от того как сделано управление состояниями, и как сделано построение UI. После react-native и react-redux -это какая-то дичь, будет жаль если так и останется.

Правда для redux я тоже использую reduxsauce и redux-saga, может быть появяться какие-то библиотеки, которые сделают кодинг более кратким и приятным.
Главное не забивать гвозди раньше времени. Flutter до сих пор не выкатил первую версию.

Интересно, что именно не понравилось в управлении состоянием? Хранение состояние внутри виджета? Использование setState для обновления?

У Flutter только недавно появился InheritedModel в добавок к InheritedWidget.

А коммьюнити только начинает решать существующие проблемы и перетаскивать хорошие решения на платформу, в том числе и redux-подобные.
А есть какая-либо информация, сколько места занимает на диске среда для разработки? Например, у меня есть ноутбук с небольшим жестким диском — 120Гб. Сколько места у меня останется на диске после установки всего нужного, что описано на странице(Допустим под MAC OS) flutter.io/docs/get-started/install?
Сама папка с флаттером у меня 1Гб (мак). Может оно еще где что по-мелочам оставляет. Но по сравнению с икскодом и андроидстудио + сдк — копейки.
XCode занимает где-то под 6гб, и Flutter 300мб + кеш (у меня сейчас 600мб)
Чего не хватает таким статьям — это бенчмарков произовдительности замеренной профайлерами. Да удобно, да быстро, но насколько это оптимизируемо.
Простой пример — таблица с большим количеством элементов, которой прилетает большое количество сигналов по обновление состояния. Сделайте бенчмарк и покажите насколько флаттер эффективен. С анимациями, с многопоточностью и т.д.
Есть такая концепци, как протекающая абстракция, которую ввёл Спольски. Суть в том, что на сколько бы не был прекрасна ваша абстракция, вы всё равно столкнётесь с проблемами, которые заложены в архитектуре нижних слоёв. Что-то мне подсказывает, что нативная разработка не будет заменена подобными фрейморками, только лишь из-за того, что существует это фундаментальная проблема.
Бенчмарки интересная штука, но данная серия посвящена основам фреймворка, а не его пиару или даже сравнению с альтернативными решениями.

В основе Flutter графический движок используемый в браузере Chrome, который себя уже давно хорошо зарекомендовал. Он легко выполняют свою работу не проваливаясь ниже 60fps.

В добавок к этому виджеты Flutter интересным образом оптимизированы. Вот, к примеру, трюк со списком из списков (1000х1000 элементов). Отрисовывается и отлично работает даже в development режиме с включенным Hot-reload. И продолжает так же хорошо работать при увеличении каждого списка в 10 раз. (MacBook Pro 2015, 16гб, версия без видюхи)

тяжелая гифка
image

код
import 'package:flutter/widgets.dart';
import 'dart:math';

main() => runApp(App());

class App extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Directionality(
      child: Container(
        child: ListScreen(),
        color: Color(0xFF386DA7),
      ),
      textDirection: TextDirection.ltr,
    );
  }
}

class ListScreen extends StatelessWidget {
  final double cellSize = 60;
  final itemsAmount = 1000;
  final rng = new Random();

  @override
  Widget build(BuildContext context) {
    return ListView.builder(
      itemCount: itemsAmount,
      itemExtent: cellSize,
      itemBuilder: (BuildContext context, int index) {
        return ListView.builder(
          itemCount: itemsAmount,
          itemExtent: cellSize,
          scrollDirection: Axis.horizontal,
          itemBuilder: (BuildContext context, int index) {
            return Container(
              color: Color(0xFF000000 + rng.nextInt(0xFFFFFF)),
              child: Text(rng.nextInt(0xFFFFFF).toRadixString(16)),
            );
          },
        );
      },
    );
  }
}



Этот пример будет работать даже с картинками загруженными из интернета.
Читать документацию времени нет, а писать очередную статью про основы есть? :D
(: Да, звучит не логично.

Дело в том, что я не занимаюсь мобильной разработкой, и в ближайшее время не планирую ею заниматься. Но меня очень заинтересовал Flutter и мне захотелось разобраться с ним.

Записывать — это один из способов лучше запомнить, а объяснять — лучший способ разобраться, ведь так? )
Абсолютно согласен) Сам это практикую :D

здесь должен быть анекдот про Достоевского и чукчу

НЛО прилетело и опубликовало эту надпись здесь
Есть ли какие приемущества перед Qt (QML) для мобильных устройств? Пока я вижу довольно зашумлённый синтаксис и странную «декларативность» языка…

Лучше, чем QML и Kivy Language нет ничего в плане описания UI за последние 1000 лет!

НЛО прилетело и опубликовало эту надпись здесь
Но я действительно хочу вызвать эту функцию
Если вместо
...
onTap: () {
   _onPressed();
},

написать
...
 onTap: _onPressed,

то получится то же самое — будет вызвана функция _onPressed.
НЛО прилетело и опубликовало эту надпись здесь
В некоторых случаях это будет расово более верным, даже если нужно передать параметры.
Скажем, виджет Switch вполне проглотит такую запись:
Switch(
  value: _value,
  onChanged: _onChanged,
),

если функция _onChanged объявлена так:
void _onChanged(bool value) {
  setState((){
    _value = !_value;
  });
}

Подскажите пожалуйста, если я захочу на flutter приложение интернет магазин, можно будет в нем иметь интеграцию с моимскладом например? Чтобы товары обновлять, наличие обновлять на складах? Или этот вопрос использования апи моего склада например им все

В теории через API можно подключить что угодно и Flutter не исключение.

Благодарю за классную статью!

У меня последний код не запустился с ошибками. Неужели этот код уже не актуален через 3 года для текущей версии Flutter?

lib/main.dart:95:47: Error: An optional named parameter can't start with '_'. _CounterButton(this._count, {@required this._onPressed}); ^^^^^^^^^^ lib/main.dart:62:13: Error: No named parameter with the name 'onPressed'. onPressed: () { ^^^^^^^^^ lib/main.dart:95:3: Context: Found this candidate, but the arguments don't match. _CounterButton(this._count, {@required this._onPressed}); ^^^^^^^^^^^^^^

FAILURE: Build failed with an exception.

НЛО прилетело и опубликовало эту надпись здесь

За 3 года в нем поменялось абсолютно всё...

какой хороший язык - не тот, что эти enterprise-языки. Кажется даже гошечка такого не делает, хотя не сильно старше Dart

Они сами не ожидали что Flutter так взлетит, поэтому пришлось допиливать Dart до современного уровня развития языков программирования

Но надо сказать что при использовании Swift тоже что-то приходится править с выходом новой версии, просто изначально он был уже неплох )

Спасибо за статью. Очень хорошо написано.
Пока что Flutter выглядит, как большая бочка с навозом.
НЛО прилетело и опубликовало эту надпись здесь

А в следующей статье мы рассмотрим ...

С учётом того, как здорово и достаточно легко к усвоению у вас получилось написать этот материал для новичков, спустя столько времени я всё ещё жду следующую часть ;) Просмотры это доказывают!

Так что можете считать это "спасибом" из будущего. Что удивительно, всё +- актуальным остаётся и по сей день.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации