Пакеты, которыми мы часто пользуемся ч.2
Hola, Amigos! На связи вся команда Flutter в Amiga. Дополним наш список из must-have пакетов и виджетов на Flutter, которые используем сами.
1. Пакет cached_network_image
Если вы еще не используете
cached_network_image в своих проекта, то пора начать это делать. Особенно, если у вас список с картинками.
Есть пара существенных плюсов для использования этого пакета:
- изображения сохраняются в файлы на устройстве;
- увеличивается скорость отображения изображений при повторном обращении.
2. Adaptive Scaffold
Adaptive Scaffold — это пакет от команды Flutter, который облегчает создание адаптивных макетов в приложениях. Он предоставляет набор виджетов и инструментов для создания макетов, которые могут адаптироваться к разным размерам экрана и ориентациям устройств.
Основная цель пакета Flutter Adaptive Scaffold — упростить разработку макетов, которые нужно адаптировать под разные платформы и устройства с неодинаковыми размерами экрана.
AdaptiveScaffold внутренне построен на AdaptiveLayout, но абстрагируется от некоторых сложностей с помощью пресетов, основанных на спецификации Material 3 Design.
3. Библиотека grouped_list
Данная библиотека — удобные инструменты для группировки и отображения данных в списке. Она помогает справиться с типичной задачей объединения элементов списка по заданному критерию и отображения группированных данных.
Вот пример использования библиотеки для группировки списка контактов по первой букве их имен:
import 'package:flutter/material.dart';
import 'package:grouped_list/grouped_list.dart';
class Contact {
final String name;
final String phoneNumber;
Contact({required this.name, required this.phoneNumber});
}
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
final List<Contact> contacts = [
Contact(name: 'Alice', phoneNumber: '1234567890'),
Contact(name: 'Bob', phoneNumber: '9876543210'),
Contact(name: 'Charlie', phoneNumber: '5555555555'),
// Дополнительные контакты...
];
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Grouped List',
home: Scaffold(
appBar: AppBar(
title: Text('Grouped List'),
),
body: GroupedListView<Contact, String>(
elements: contacts,
groupBy: (contact) => contact.name.substring(0, 1),
groupSeparatorBuilder: (String value) => Padding(
padding: const EdgeInsets.all(8.0),
child: Text(
value,
style: TextStyle(fontSize: 20, fontWeight: FontWeight.bold),
),
),
itemBuilder: (context, contact) => ListTile(
title: Text(contact.name),
subtitle: Text(contact.phoneNumber),
),
),
),
);
}
}
В этом примере мы определяем список контактов и используем
GroupedListView для создания списка, где контакты будут сгруппированы по первой букве их имен.
groupBy принимает функцию, которая возвращает ключ группы для каждого элемента, и
groupSeparatorBuilder используется для создания виджета, разделяющего каждую группу.
itemBuilder определяет, как будет отображаться каждый элемент списка.
Это лишь пример использования "grouped_list" в Flutter, и библиотека предлагает и другие возможности для настройки и работы с группированными списками.