Я пытаюсь создать приложение, в котором будет загружаться список бронирований. Когда пользователь прокручивает эти бронирования, прокрутка очень прерывистая. Я провел тестирование во всех режимах отладки, профиля и выпуска, но проблема с прерывистой прокруткой все еще остается. Это верно как для iOS, так и для Android. Вот что я уже пробовал -
- Я уже пробовал использовать const AlwaysScrollableScrollPhysics (),
- Пробовал использовать без анимации и с анимацией. В обоих случаях присутствует прерывистая прокрутка.
- Я пробовал cached.network.image. Присутствует прерывистая прокрутка.
Конструктору ListView требуется более 16 мсек для построения ListTile даже в режиме профиля.
return ListView.builder(
physics: const AlwaysScrollableScrollPhysics(),
itemCount: widget.bookings.length,
scrollDirection: Axis.vertical,
itemBuilder: (context, int index) {
var count = 10;
var animation = Tween(begin: 0.0, end: 1.0).animate(CurvedAnimation(
parent: animationController,
curve: Interval((1 / count) * index, 1.0,
curve: Curves.fastOutSlowIn)));
animationController.forward();
return BookingListCard(
booking: widget.bookings[index],
bookings: widget.bookings,
animation: animation,
animationController: animationController,
);
},
);
AnimatedBuilder(
animation: animationController,
builder: (BuildContext context, Widget child) {
return FadeTransition(
opacity: animation,
child: new Transform(
transform: new Matrix4.translationValues(
0.0, 50 * (1.0 - animation.value), 0.0),
child: Padding(
padding:
const EdgeInsets.only(left: 0, right: 0, top: 0, bottom: 0),
child: InkWell(
splashColor: Colors.transparent,
onTap: () {
callback();
},
child: Padding(
padding: const EdgeInsets.only(top: 8.0),
child: Card(
color: AppTheme.halfWhite,
elevation: 0,
child: ListTile(
onTap: () {
Navigator.of(context)
.push(_createRoute(booking, booking.id));
},
leading: Container(
width: _size,
height: _size,
decoration: BoxDecoration(
shape: BoxShape.circle,
image: DecorationImage(
image: NetworkImage(booking.guest.imageUrl),
fit: BoxFit.fill,
),
),
),
title: Padding(
padding: const EdgeInsets.only(top: 10.0),
child: Text(
booking.guest.firstName,
style: AppTheme.title,
),
),
subtitle: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Row(
children: <Widget>[
Text(
'${(DateFormat("E, d MMM").format(DateTime.parse(booking.checkIn))).toUpperCase()} ',
style: AppTheme.caption,
),
Image.asset(
"assets/images/arrow.png",
width: 12,
height: 12,
),
Text(
' ${(DateFormat("E, d MMM").format(DateTime.parse(booking.checkOut))).toUpperCase()}',
style: AppTheme.caption,
)
],
),
Padding(
padding:
const EdgeInsets.only(top: 8.0, bottom: 8.0),
child: DashedDivider(
color: Colors.black.withOpacity(0.6),
dashWidth: 0.1),
),
Text(
'${(booking.status).toUpperCase()}',
style: TextStyle(
color: statusColorFinder(booking.status),
fontFamily: AppTheme.fontName,
fontWeight: FontWeight.bold,
fontSize: 12,
letterSpacing: 0.4,
height: 0.9,
),
),
],
),
// trailing: Icon(Icons.more_vert),
trailing: booking.status == 'Pending' ? MyBullet() : null,
isThreeLine: false,
),
),
),
),
),
),
);
},
);
ListView.builder
пример из официальной документации? он тоже идет рывками? - person pskink   schedule 23.12.2019ListView
и больше ничего? без асинхронных задач, без изоляторов и т. д.? - person pskink   schedule 23.12.2019