Notice: Undefined offset: 0 in /var/www/html/spargo/wp-content/themes/spargo/templates/content/entry-post-news.php on line 13

Notice: Trying to get property 'name' of non-object in /var/www/html/spargo/wp-content/themes/spargo/templates/content/entry-post-news.php on line 17
flutter UI: реализация аккордеонов в мобильном приложении

flutter UI: реализация аккордеонов в мобильном приложении

Многие разработчики знакомы с таким понятием, как «UI аккордеон» из мира web-разработки, ведь чаще всего этот элемент используется и внедряется именно на сайтах. Во всех стадиях развития frontend разработки аккордеоны внедрялись через библиотеку jQuery, нативном JavaScript, чистом CSS, а также через многочисленные фреймворки. В мобильной разработке аккордеоны также играют значимую роль в построении интерфейса, тем более, когда речь идет про отображение большого количества текстовой информации на относительно небольших устройствах. Как раз в ходе разработки мобильного приложения «Медицинский личный кабинет» внедрение аккордеонов оказалось вполне уместным на странице информации о лекарственном средстве, ведь если открыть упаковку любого препарата, то в ней будет огромная текстовая аннотация, и показывать все это сразу в открытом виде — просто неграмотно. Поэтому в данной статье я поделюсь тем, как мы реализовали этот элемент интерфейса. Для начала в папке UI компонентов создаем файл с оберткой, которую будем в последующем использовать на различных страницах, в нашем случае это accordion_panel.dart, и первым делом импортируем в него material.dart Далее создадим виджет StatefulWidget,  назовем его Accordion и пропишем конструктор: class Accordion extends StatefulWidget { final String title; final String content; const Accordion({Key? key, required this.title, required this.content}) : super(key: key); @override _AccordionState createState() => _AccordionState(); } А дальше опишем его состояние: class _AccordionState extends State { bool _showContent = false; @override Widget build(BuildContext context) { return Column( children: [ ListTile( onTap: () { setState(() { _showContent = !_showContent; }); }, title: Text(widget.title), trailing: Icon( _showContent ? Icons.arrow_drop_up : Icons.arrow_drop_down,) ), if (_showContent) Container( child: Text(widget.content), ) else Container(), ],); } } Небольшое пояснение к содержимому состояния: В случае с _AccordionState мы формируем наше отображение аккордеона по принципу создания колонки, содержащую в себе: ListTile – размещаем в нем заголовок аккордеона и иконку стрелочки, которая будет меняться в зависимости от клика, и на весь элемент вешаем событие onTap, который будет показывать нам содержимое; Container – показываем содержимое виджета Text, если кликнули по ListTile. Теперь переходим на страницу, где нужно отобразить аккордеон, и импортируем нашу заготовку. import '../../accordion_panel.dart'; Создаем виджет StatefulWidget с названием _AccordeonWidget и размещаем наши аккордеоны: class _AccordeonWidgetState extends State { @override Widget build(BuildContext context) { return Column( children: const [ Accordion( title: 'Описание лекарственной формы', content: 'Цитрамон, Таб. 240 мг+180 мг+30 мг: 6, 10, 12, 18, 20, 30, 50 шт., рег. №: Р N000499/01 от 04.08.10 - Бессрочно', ), Accordion( title: 'Режим дозирования', content: 'Способ применения и режим дозирования конкретного препарата зависят от его формы выпуска и других факторов. Оптимальный режим дозирования определяет врач. Следует строго соблюдать соответствие используемой лекарственной формы конкретного препарата показаниям к применению и режиму дозирования.', ), ], ); }} Вот и все, самый просто способ реализовать UI элемент аккордеонов.Естественно, к заготовке можно применить различные стили, согласно вашему дизайну, а также выводить динамически содержимое аккордеонов, в зависимости от выполняемых запросов. Если у вас есть предложения по улучшению кода, то буду рад обсудить их через почту

Notice: Undefined offset: 0 in /var/www/html/spargo/wp-content/themes/spargo/templates/content/entry-post-news.php on line 13

Notice: Trying to get property 'name' of non-object in /var/www/html/spargo/wp-content/themes/spargo/templates/content/entry-post-news.php on line 17
flutter UI: реализация адаптивного интерфейса

flutter UI: реализация адаптивного интерфейса

В ходе разработки приложений почти всегда стоит задача внедрения адаптивного дизайна в интерфейс. Так, например, приложение необходимо адаптировать под разрешения планшетов, а в отдельных случаях, под экраны небольших ноутбуков и стационарных мониторов. Рассмотрим часто используемые способы реализации адаптивного интерфейса, но начнем с главного: - определим размеры экранов (Breakpoints), при достижении которых будем скрывать и/или менять отображение виджетов в приложении, и вынесем эти параметры в отдельный .dart файл, в виде нового абстрактного класса: abstract class Breakpoints { static const breakpointsSm = 576.0; static const breakpointsMd = 768.0; static const breakpointsLg = 1023.0; static const breakpointsXl = 1440.0; } В качестве примера, скроем виджет AppBar в случае, когда размер пользовательского экрана достигнет параметра 768px. Для этого необходимо: получить размер устройства пользователя: final screenSize = MediaQuery.of(context).size.width скрыть AppBar, ссылаясь на ранее созданный Breakpoints appBar: screenSize >= Breakpoints.breakpointsMd ? AppBar( title: Text('Назад'), ) : null, Готово. Теперь, при достижении разрешения экрана в 768px виджет AppBar будет скрыт. Также мы можем реализовать логику показа определенных наборов виджетов, в зависимости от разрешения экрана. Для этого будем использовать конструктор LayoutBuilder. LayoutBuilder( builder: (BuildContext context, BoxConstraints constraints) { if (constraints.maxWidth < Breakpoints.breakpointsSm) { return _mobileContent(); } else if (constraints.maxWidth < Breakpoints.breakpointsLg) { return _tabletContent(); } else { return _desktopContent(); } }, ), Обратите внимание и учитывайте, что Media Query - использует полный размер экрана устройства, а LayoutBuilder - размер конкретного виджета. Это отличие позволяет выстраивать разные виджеты/контент-блоки под разные размеры и типы устройств, что существенно улучшит пользовательский опыт при работе с приложением.

Notice: Undefined offset: 0 in /var/www/html/spargo/wp-content/themes/spargo/templates/content/entry-post-news.php on line 13

Notice: Trying to get property 'name' of non-object in /var/www/html/spargo/wp-content/themes/spargo/templates/content/entry-post-news.php on line 17
flutter: таймаут выполнения HTTP-запросов для приложения

flutter: таймаут выполнения HTTP-запросов для приложения

Стандартная потребность - установить свой таймаут при выполнении HTTP-запросов целиком на всё приложение. flutter позволяет сделать это быстро и красиво, за счет переопределения метода создания экземпляра HTTP-клиента. При этом все запросы, выполняемые приложением (даже в подключаемых внешних package/lib), будут использовать установленное значение таймаута. Например, требуется задать таймаут 30 секунд. Последовательность следующая: 1. Переопределяем метод создания HTTP-клиента. import 'dart:io'; class AppHttpOverrides extends HttpOverrides { @override HttpClient createHttpClient(SecurityContext? context) { return super.createHttpClient(context) ..connectionTimeout = const Duration(seconds: 30); } } 2. Прописываем переопределенный метод при старте приложения. void main() async { HttpOverrides.global = new AppHttpOverrides(); ... } Все запросы, выполняемые приложением, будут отрабатывать с таймаутом 30 секунд. Готово!
Навигация
Используя данный сайт, вы даете согласие на использование файлов cookie, данных об IP-адресе и местоположении, помогающих нам сделать его удобнее для вас.>