Отображает ли Flutter автоматически пользовательский интерфейс Cupertino в iOS и Material в Android с единой кодовой базой?

#flutter

#flutter

Вопрос:

Мне нужно знать, будет ли Flutter отображать стиль iOS Cupertino на iOS и Material на Android с единой кодовой базой. Я хочу знать это, прежде чем начинать разрабатывать свое приложение с помощью Flutter.

Если это не так, как я могу управлять двумя разными пользовательскими интерфейсами в одном коде? Я не могу использовать if / else везде в коде.

Ответ №1:

Вам следует попробовать приложение gallery:https://play.google.com/store/apps/details?id=io.flutter.demo.galleryamp;hl=en Там, когда вы нажимаете кнопку меню, вы можете настроить механику платформы как Mountain View (Android) или Cupertino (iOS). Таким образом, вы можете увидеть, как это будет выглядеть на любой платформе.

Вот пример выбора Cupertino или Material с кодом в зависимости от платформы:https://medium.com/flutter-io/do-flutter-apps-dream-of-platform-aware-widgets-7d7ed7b4624d Насколько я знаю, вы должны выбирать виджеты, подобные этому.

Ответ №2:

Эти возможности находятся в стадии разработки. Я предлагаю заглянуть в эту библиотеку: https://pub.dartlang.org/packages/flutter_platform_widgets

Помимо этого, вы многое уже можете сделать, даже без этой библиотеки. Все зависит от ваших ресурсов, требований и сложности вашего проекта.

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

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

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

1. Google напрямую участвует во внедрении этой функции во flutter?

2. После более чем годичного опыта работы с виджетами платформы flutter я бы сейчас не советовал их использовать. Им все еще требуется большая настройка (читай: дублированный код), и в конечном итоге мы снова перенесли все обратно в Material design.

3. @rgisi как насчет каркаса Cupertino? Мне нужна постоянная нижняя панель невигации, и Cupertino Scaffold / Tabbar, похоже, предлагает лучшее решение этого вопроса

Ответ №3:

С недавнего времени Flutter добавила адаптивные конструкторы для Switch, SwitchListTile и CircularProgressIndicator, которые помогут дальнейшему развитию платформенно-ориентированных виджетов в рамках единой кодовой базы. Пока это только три, ожидайте большего в будущем!

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

1. CircularProgressIndicator.adaptive() Также

2. Вот все адаптивные виджеты, выпущенные / доработанные во всех версиях Flutter вплоть до Flutter 2.2.0: Адаптивное текстовое поле, адаптивные значки, Адаптивная функция ввода текста, адаптивная дополнительная иконка для popup_menu, VisualDensity.adaptivePlatformDensity. flutter.dev/docs/development /tools /sdk/release-notes /…

Ответ №4:

Ниже приведена простая реализация:

 class AdaptiveSwitch extends StatelessWidget {
  const AdaptiveSwitch({Key key,
      @required this.value,
      @required this.onChanged,
      this.activeColor,
      this.dragStartBehavior = DragStartBehavior.start})
      : assert(dragStartBehavior != null),
        super(key: key);

  final bool value;

  final ValueChanged<bool> onChanged;

  final Color activeColor;

  final DragStartBehavior dragStartBehavior;

  @override
  Widget build(BuildContext context) {
    return Theme.of(context).targetPlatform = TargetPlatform.iOS
        ? CupertinoSwitch(
            value: value,
            activeColor: activeColor,
            onChanged: onChanged,
            dragStartBehavior: dragStartBehavior,
          )
        : Switch(
            value: value,
            activeColor: activeColor,
            onChanged: onChanged,
            dragStartBehavior: dragStartBehavior,
          );
  }
}