Флаттер Материал в Купертино вопросы трансформации - PullRequest
0 голосов
/ 03 марта 2019

Я работаю над проектом, который почти на 80% выполнен.Весь мой проект сделан на материале дизайна.Теперь я пытаюсь переместить тему пользовательского интерфейса Купертино для Android и IOS.

Поскольку я пытаюсь перейти от дизайна материалов к пользовательскому интерфейсу Купертино, я сталкиваюсь с множеством проблем, особенно в следующих областях.

  1. TextFormField : Я не могу найти TextFormField в дизайне Купертино для использования с формами ...
  2. Validator : Как проверить CupertinoTextField , поскольку нет метода проверки
  3. App Drawer: Прямо сейчас у меня есть App Drawer.Когда я перехожу к дизайну пользовательского интерфейса Cuprtino как для IOS, так и для Android, я должен уронить App Drawer?
  4. Как указать ширину CupertinoButton?
  5. ListTitle вызывает исключение при попыткемигрировать в Купртио.Исключение составляет «Определенный виджет, который не смог найти предка материала: ListTitle»

Кроме того, как я могу смешать виджет не Cuprtino на внутренней странице CupertinoPageScaffold?

Спасибо за ваше время

1 Ответ

0 голосов
/ 03 апреля 2019
  1. TextFormField : я не могу найти TextFormField в дизайне Купертино для использования с формами ...
  2. Validator: Как проверить CupertinoTextField , поскольку нет метода проверки

В Купертино нет TextField с методами проверки и формы.В разработке для iOS вы должны написать свой собственный код проверки формы и вызвать их соответствующим образом.Это не исключение и во Флаттере.Один из типичных подходов - создать внутренний класс _FormData для хранения TextEditingController для каждого CupertinoTextField, а затем проверить их в вашем onPressed обратном вызове.

App Drawer: прямо сейчас у меня есть App Drawer.Когда я перехожу к дизайну пользовательского интерфейса Cuprtino как для IOS, так и для Android, я должен оставить App Drawer?

Опять же, виджет Drawer существует только в Material design.Все ящики, которые вы можете увидеть в различных приложениях для iOS на рынке, являются заказными UIView, изготовленными сторонними поставщиками. Руководство по интерфейсу Apple Apple четко указывало, что:

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

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

Как указать ширину купертино-кнопки?

Вы можете обернуть CupertinoButton с помощью Container, SizedBox или FractionallySizedBox.

Container(
    width: 300 // or whatever width you want,
    child: CupertinoButton(
        child: Text('Submit'),
        color: Theme.of(context).primaryColor,
        onPressed: () {
            // Write your callback here
        },
    ),
)

или

SizedBox(
    width: 300 // or whatever you want,
    child: CupertinoButton(
        child: Text('Submit'),
        color: Theme.of(context).primaryColor,
        onPressed: () {
            // Write your callback here
        },
    ),
)

или

FractionallySizedBox(
    widthFactor: 0.5 // or whatever you want,
    child: CupertinoButton(
        child: Text('Submit'),
        color: Theme.of(context).primaryColor,
        onPressed: () {
            // Write your callback here
        },
    ),
)

В общем, Container должно сработать.Если вы поместите свой CupertinoButton в виджет Flex (например, ListView, Column), вы можете использовать SizedBox или FractionallySizedBox.Вы можете обратиться к документации API SizedBox и FractionallySizedBox

ListTitle вызывает исключение, когда я пытаюсь перейти на Cuprtio.Исключение составляет «Определенный виджет, который не смог найти предка материала: ListTitle»

Как говорится в журнале ошибок:

В дизайне материалов большинствоВиджеты концептуально «напечатаны» на листе материала.В библиотеке материалов Flutter этот материал представлен виджетом материалов.Например, виджет «Материал» отображает всплески чернил.Из-за этого многие виджеты библиотеки материалов требуют наличия виджета «Материал» в дереве над ними .Чтобы ввести виджет «Материал», вы можете либо напрямую включить один , либо использовать виджет, который содержит сам материал , например Card, Dialog, Drawer илиScaffold.

Полагаю, вы пытаетесь использовать ListTile (это виджет Материал) в CupertinoPageScaffold или CupertinoTabView, которые, очевидно, являются виджетами Купертино.Вот как я это решил:

Material(
    type: MaterialType.transparency,
    child: ListTile(
        ...
    )
)
...