Комментарии 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 его ещё не убила.
Можно разветвить, можно использовать готовые пакеты, меняющие интерфейс в зависимости от платформы. Я предпочёл сделать свои класы с 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?
было бы классно менять интерфейс в зависимости от целевой платформы, даже через веб, но по идее конечно это лишнее
=)
Всегда был kiwi на python, работает по тем же принципам, что и Flutter. Так что говорить, что удалось создать - это громко и не похоже на правду. А вот то, что удалось продвинуть - это да.
Не хочу разжигать войн, но один из разработчиков kivyMD в статье на хабре указал что flutter быстрее чем kivy для мобильных платформ.
https://habr.com/ru/post/546684/
От себя же хочу добавить, что о Kivy узнал только что, а флаттер на слуху, возможно дело в том что kivy разрабатывает сообщество, а flutter это openSource разработанный, продвигаемый и поддерживаемый Google. Так что да Вы правы продвинуть его получилось однозначно лучше.
Про Flutter: как бекендер в мобильную кроссплатформу лез