Я хочу создать страницу регистрации, содержащую три изображения и разный текст. Итак, я использую изображение карусели, но когда я хочу установить контроллер карусели, я получаю сообщение об ошибке: "The argument type 'CarouselController' can't be assigned to the parameter type 'CarouselSliderController?'"
как я могу это исправить?
Вот мой код:
class OnboardingPage extends StatefulWidget {
const OnboardingPage({super.key});
@override
State<OnboardingPage> createState() => _OnboardingPageState();
}
class _OnboardingPageState extends State<OnboardingPage> {
int currentIndex = 0;
CarouselController carouselController = CarouselController();
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: lightBackgroundColor,
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
CarouselSlider(
items: [
Image.asset(
'assets/img_onboarding1.png',
height: 331,
),
Image.asset(
'assets/img_onboarding2.png',
height: 331,
),
Image.asset(
'assets/img_onboarding3.png',
height: 331,
),
],
options: CarouselOptions(
height: 331,
viewportFraction: 1,
enableInfiniteScroll: false,
onPageChanged: (index, reason) {
setState(() {
currentIndex = index;
});
},
),
carouselController: carouselController,
),
Ошибка очевидна:
The argument type 'CarouselController' can't be assigned to the parameter type 'CarouselSliderController?'
Поскольку в вашем коде вы используете CarouselSlider
:
CarouselSlider(
items: [
Вы должны передать CarouselSliderController
.
Но вы передали CarouselController
, который можно использовать вместо CarouselView
.
Итак, используйте CarouselSliderController
со своим кодом:
class OnboardingPage extends StatefulWidget {
const OnboardingPage({super.key});
@override
State<OnboardingPage> createState() => _OnboardingPageState();
}
class _OnboardingPageState extends State<OnboardingPage> {
int currentIndex = 0;
CarouselSliderController carouselController = CarouselSliderController();
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: lightBackgroundColor,
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
CarouselSlider(
items: [
Image.asset(
'assets/img_onboarding1.png',
height: 331,
),
Image.asset(
'assets/img_onboarding2.png',
height: 331,
),
Image.asset(
'assets/img_onboarding3.png',
height: 331,
),
],
options: CarouselOptions(
height: 331,
viewportFraction: 1,
enableInfiniteScroll: false,
onPageChanged: (index, reason) {
setState(() {
currentIndex = index;
});
},
),
carouselController: carouselController,
),
],
),
));
}
}
Кажется, вы используете carousel_slider и используете CarouselController материала.
попробуйте это:
...
class _OnboardingPageState extends State<OnboardingPage> {
int currentIndex = 0;
// Comment the controller of material package
//CarouselController carouselController = CarouselController();
// Add the controller of carousel_slider package
final CarouselSliderController carouselController =
CarouselSliderController();
@override
Widget build(BuildContext context) {
...
Поскольку вы используете последнюю версию флаттера — 3.24.0 и пакет carousel_slider. Flutter представил новый виджет CarouselView, который принимает контроллер типа CarouselController, поэтому carousel_slider изменил тип контроллера на CarouselSliderController. Пожалуйста, проверьте это carousel_slider журнал изменений 5.0.0. Итак, вам нужно изменить тип контроллера как
CarouselSliderController carouselController = CarouselSliderController();