После некоторого использования флаттера мне все больше и больше нравится флаттер.Флаттер мощнее, чем мы думали. В этой статье рассказывается, как использовать флаттер для отображения очень красивого списка, сначала посмотрите на рендеры.
Стиль по-прежнему очень красивый, давайте завершим этот небольшой проект шаг за шагом.
Подготовка перед разработкой
- Мы будем использовать виджет, такой как FadeInImage, для загрузки сетевого изображения, для которого требуется значок загрузки, поэтому нам нужно настроить статические ресурсы в pubspec.yaml.В проекте можно использовать только настроенные статические ресурсы.
assets:
- assets/images/
- Необходимо имитировать некоторые фальшивые данные и некоторые часто используемые константы, поэтому для управления создается специальный файл Constant.dart.
colors # 颜色
data # list的数据
# ...
раздел панели приложений
- AppBar нуждается в прозрачном фоне, чтобы изображение позади могло отображаться, что выглядит очень захватывающим.
- Вам нужно установить высоты на 0, чтобы вы могли отменить специфичный для Android эффект тени.Вот код:
Scaffold(
appBar: AppBar(
backgroundColor: Colors.transparent,
elevation: 0,
title: Text(
'flutter awesome list',
style: TextStyle(
color: Colors.white,
),
),
),
body: HomeBody(),
);
Баннерный раздел
- Нам нужно использовать weidget Transform.translate(), чтобы переместить часть баннера вверх, чтобы вся панель приложения отображалась на баннере.Указанное здесь смещение равно смещению: Offset(0, -56), а 56 – это высота. панели приложений
- Следующая скошенная форма должна быть создана с помощью ClipPath(), который немного похож на холст.Код выглядит следующим образом:
class MyClipper extends CustomClipper<Path> {
@override
Path getClip(Size size) {
Path p = Path();
p.lineTo(size.width, 0.0);
p.lineTo(size.width, size.height / 4.75);
p.lineTo(0.0, size.height / 3.75);
p.close();
return p;
}
@override
bool shouldReclip(CustomClipper oldClipper) {
return true;
}
}
- Для отображения информации о пользователе используются виджеты ListTile и CircleAvatar. Использование относительно простое. Я напрямую вставляю код:
ListTile(
leading: CircleAvatar(
backgroundImage: NetworkImage(CONSTANT.userAvatar),
),
title: Text(
CONSTANT.userName,
style: CONSTANT.defaultTextStyle,
textScaleFactor: 1.5,
),
subtitle: Text(
CONSTANT.userProfile,
style: CONSTANT.defaultTextStyle,
),
)
Часть отображения списка
- Для отображения списка используется ListView.builder() с двумя обязательными параметрами itemCount и itemBuilder. Первый управляет количеством списков, а второй — отображением элементов. Поскольку стилей элементов по-прежнему много, они разделены на отдельные StatelessWidgets.Компонент: AwesomeListItem
- Мы оборачиваем AwesomeListItem с компонентом InkWell.InkWell — это компонент, который поставляется с флаттером.Особенностью этого компонента является то, что он имеет эффект растекания чернил при нажатии. При нажатии на элемент мы используем Navigator.push для перехода на страницу сведений.
- Для отображения изображений мы по-прежнему используем FadeInImage, и пользовательский опыт этого эффекта плавного появления по-прежнему очень хорош. Затем используйте Hero() для обертывания FadeInImage, который может обеспечить анимацию перехода между изображениями при переходе страницы, что очень мощно и круто.
Hero(
tag: index,
child: FadeInImage(
image: NetworkImage(data.image),
fit: BoxFit.cover,
placeholder: AssetImage('assets/images/loading.gif'),
),
)
Страница сведений
Последнее - это отображение страницы сведений. На этой странице нет стиля. Он показывает эффект перехода изображения при переходе со страницы списка. Заинтересованные студенты могут обогатить стиль и содержание следующей страницы.
конец
- адрес поста в блоге
- В статье размещен не весь код, заинтересованные студенты могут посмотреть исходный кодxch1029/awesomelist
- Инструмент генерации цвета отсюда
- картинка отсюда
- ВдохновленFlutterAwesomeList