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

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

Хорошая статья. Что под капотом, как реализовано и короткими словами — спасибо.
Думаю, 3/4 трудозатрат от разработки 2 нативных это не слишком профитно. Но, если билдить еще и десктопные приложения под 3 оси, то выигрыш должен быть уже бескомпромиссным?

на самом деле 3/4 это с учетом погружения в технологию, первый опыт первого приложения

по факту экономия порядка 30% по мнению более опытных команд, достигается за счет того что тестировать и выкатывать то все равно надо 2 приложения а разрабатывать по сути одно приложение одной командой =)

если увеличить количество платформ, то все равно добавится тестирование и выкладка на них, но не будет затрат на разработку, это да

"У приложения единый UI на всех платформах." - с каких пор это плюс? у всех свои гайдлайны да и пользователь чувствует не родное приложение.
Ionic - позволяет существующее приложение переиспользовать, React, Angular, Vue.

ну ionic и другие Web-фреймворки рендерят пользовательский интерфейс на WebView,

тут скорее про другое, никто не мешает для IOS делать ui на Cupertino widgets, а для Android на Material

просто у приложений будет общий UI слой, так-же это полезно когда стиль приложения не привязан к гайдлайну IOS/Android

зато благодаря движку flutter может гарантировать одинаковую работу приложения на всех версиях OS устройств

Да, WebView, не нужно другой язык изучать. тот же js, html,css.
Еще бы про xamarin хочется послушать, особенно от дотнетчика, вроде microsoft его ещё не убила.

У webView есть определенные проблемы с производительностью графики

С xamarin работал только давно, и он имел тогда кучу ограничений, формс не давал необходимой гибкости кастомизации а нативный ui убивал кроссплатформенность

Можно разветвить, можно использовать готовые пакеты, меняющие интерфейс в зависимости от платформы. Я предпочёл сделать свои класы с if для часто используемых элементов.

final bool isApple = !kIsWeb && (Platform.isMacOS || Platform.isIOS);

/// Button.
class MpButton extends StatelessWidget {
  const MpButton({Key? key, this.label, this.onPressed}) : super(key: key);
  final String? label;
  final Function? onPressed;

  @override
  Widget build(BuildContext context) {
    if (isApple) {
      return CupertinoButton.filled(
        child: Text(label!),
        onPressed: onPressed as void Function()?,
      );
    } else {
      return ElevatedButton(
        child: Text(
          label!,
          style: const TextStyle(color: Colors.white),
        ),
        onPressed: onPressed as void Function()?,
      );
    }
  }
}

Да спасибо, это и имел ввиду

P.S. В SDK есть Material и iOS виджеты, в сторонних пакетах Mac, Windows и Ubuntu.

Ооо, я эти платформы ещё не юзал, спасибо за информацию

В dart:io определены все поддерживаемые платформы:

  static final bool isLinux = (_operatingSystem == "linux");
  static final bool isMacOS = (_operatingSystem == "macos");
  static final bool isWindows = (_operatingSystem == "windows");
  static final bool isAndroid = (_operatingSystem == "android");
  static final bool isIOS = (_operatingSystem == "ios");
  static final bool isFuchsia = (_operatingSystem == "fuchsia");

Плюс можно узнать, например, запущен ли Flutter for web на десктопе или мобиле.

bool get isMobileDevice => !kIsWeb && (Platform.isIOS || Platform.isAndroid);
bool get isDesktopDevice =>
     !kIsWeb && (Platform.isMacOS || Platform.isWindows || Platform.isLinux);
bool get isMobileDeviceOrWeb => kIsWeb || isMobileDevice;
bool get isDesktopDeviceOrWeb => kIsWeb || isDesktopDevice;

слушай, а стало интересно, а можно определить на вебе мобила на ios или на android?

было бы классно менять интерфейс в зависимости от целевой платформы, даже через веб, но по идее конечно это лишнее

=)

Есть пакет только под web, он даже классы CSS позволяет подставлять в зависимости от операционки. Но я сам не пробовал, вообще я не лучшего мнения о производительности флаттера в вебе, даже не смотря на все последние улучшения. Если только для MVP использовать.

https://pub.dev/packages/platform_detect

Согласен с Вашим мнением

Всегда был kiwi на python, работает по тем же принципам, что и Flutter. Так что говорить, что удалось создать - это громко и не похоже на правду. А вот то, что удалось продвинуть - это да.

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

https://habr.com/ru/post/546684/

От себя же хочу добавить, что о Kivy узнал только что, а флаттер на слуху, возможно дело в том что kivy разрабатывает сообщество, а flutter это openSource разработанный, продвигаемый и поддерживаемый Google. Так что да Вы правы продвинуть его получилось однозначно лучше.

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