#flutter #dart #flutter-pageview #dismissible
#трепетание #dart #flutter-просмотр страницы #dismissible
Вопрос:
с помощью следующего примера кода получается очень уродливая анимация. Я бы даже сказал, это вообще не анимация. Следующая страница появится только после вызова setstate .
Как я могу создать плавную анимацию удаления с помощью просмотра страницы? Если это невозможно через просмотр страницы, есть ли какая-либо альтернатива, которая имеет функцию «привязки карт»?
Вот мой код:
class SwipeScreen extends StatefulWidget {
const SwipeScreen({Key key}) : super(key: key);
static const routeName = '/swipe';
@override
_SwipeScreenState createState() => _SwipeScreenState();
}
class _SwipeScreenState extends State<SwipeScreen> {
List<String> content = ['one', 'two', 'three', 'four', 'five'];
@override
Widget build(BuildContext context) {
return Scaffold(
body: PageView.builder(
scrollDirection: Axis.vertical,
itemCount: content.length,
controller: PageController(viewportFraction: 0.8),
itemBuilder: (context, index) {
return Dismissible(
key: ValueKey(content[index]),
child: Card(
child: Container(
height: MediaQuery.of(context).size.height * 0.8,
child: Text('test'),
),
),
onDismissed: (direction) {
setState(() {
content = List.from(content)..removeAt(index);
});
},
);
},
),
);
}
}
Комментарии:
1. Привет, я не вижу ни одного виджета просмотра страницы в вашем примере. Код, которым вы поделились, хорошо работает для меня.
2. Привет, извините за это. -ошибка копирования-вставки. Отредактировал его только что.
Ответ №1:
Замена PageView.builder()
на ListView.builder()
создаст более плавную анимацию.
Надеюсь, это то, что вы ищете!
Комментарии:
1. Спасибо за ответ. Причина, по которой я использую просмотр страницы, заключается в том, что он имеет функцию привязки. Так что карта всегда будет в центре экрана. Есть ли какая-либо возможность добиться этого и с помощью ListView?
Ответ №2:
К сожалению, PageView
виджет не предназначен для использования с Dismissible
виджетом, поскольку анимация при завершении удаления не реализована.
Вы все равно можете изменить свой просмотр страницы на a ListView
и установить физику PageScrollPhysics()
, чтобы анимация была отключена, но вы, вероятно, столкнетесь с некоторыми другими проблемами с размерами виджетов
Комментарии:
1. Эй, PageScrollPhysics выглядит довольно многообещающе. Просто чтобы убедиться, что я полностью понимаю ваш комментарий: как вы думаете, приложение столкнется с проблемами производительности в некоторые моменты? Или вы просто имеете в виду, что сам виджет будет очень сложным?
2. Виджет может быть сложным для получения того же поведения, что и просмотр страницы при прокрутке событий. Когда вы отклоняете элемент в середине списка, положение прокрутки может быть сдвинуто
3. Есть идеи по решению проблемы? С моей точки зрения, это должно происходить только в начале и конце списка. Может ли это быть решением сделать список бесконечным или как карусель? — Значение: если достигнут последний элемент, он снова должен указывать на первый. Может быть, где-то существует плагин, который уже это делает? Я только что нашел пакет swiper (довольно глючный) и пакет carousel (не удалось его анимировать правильно).
4. Я не знаю, это зависит от того, что именно вы хотите. в любом случае, я думаю, вы могли бы найти способ без использования пакета. Может быть, вы могли бы снова обратиться к просмотру страницы и реализовать анимацию
confirmDismiss
метода для вашей плитки и уменьшить ее размер? Удачи 🙂5. До сих пор это не работало. Я попробовал несколько разных подходов, но до сих пор безуспешно. Я не смог запустить анимацию для confirmDismiss. Может быть, кто-нибудь знает, как этого можно достичь?