ImageSlider.dart
import 'package:carousel_slider/carousel_slider.dart';
import 'package:flutter/material.dart';
class ImageSlider extends StatefulWidget {
final List<String> imgList;
// final url;
const ImageSlider({
super.key,
// required this.url,
required this.imgList,
});
@override
State<ImageSlider> createState() => _ImageSliderState();
}
class _ImageSliderState extends State<ImageSlider> {
int _current = 0;
final CarouselController _controller = CarouselController();
late final List<Widget> imageSliders;
@override
void initState() {
imageSliders = imageListToContainer(widget.imgList);
super.initState();
}
@override
Widget build(BuildContext context) {
return Column(
children: [
Expanded(
child: CarouselSlider(
items: imageSliders,
carouselController: _controller,
options: CarouselOptions(
autoPlay: true,
enlargeCenterPage: true,
enlargeStrategy: CenterPageEnlargeStrategy.height,
aspectRatio: 2.0,
onPageChanged: (index, reason) {
setState(() {
_current = index;
});
}),
),
),
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: widget.imgList.asMap().entries.map((entry) {
return GestureDetector(
onTap: () => _controller.animateToPage(entry.key),
child: Container(
width: 12.0,
height: 12.0,
margin:
const EdgeInsets.symmetric(vertical: 8.0, horizontal: 4.0),
decoration: BoxDecoration(
shape: BoxShape.circle,
color: (Theme.of(context).brightness == Brightness.dark
? Colors.white
: Colors.black)
.withOpacity(_current == entry.key ? 0.9 : 0.4)),
),
);
}).toList(),
),
],
);
}
}
List<Widget> imageListToContainer(List<String> imgList) {
return imgList
.map((item) => Container(
child: Container(
margin: const EdgeInsets.all(5.0),
child: ClipRRect(
borderRadius: const BorderRadius.all(Radius.circular(5.0)),
child: Stack(
children: <Widget>[
Image.network(item, fit: BoxFit.cover, width: 1000.0),
Positioned(
bottom: 0.0,
left: 0.0,
right: 0.0,
child: Container(
decoration: const BoxDecoration(
gradient: LinearGradient(
colors: [
Color.fromARGB(200, 0, 0, 0),
Color.fromARGB(0, 0, 0, 0)
],
begin: Alignment.bottomCenter,
end: Alignment.topCenter,
),
),
padding: const EdgeInsets.symmetric(
vertical: 10.0, horizontal: 20.0),
child: Text(
'No. ${imgList.indexOf(item)} image',
style: const TextStyle(
color: Colors.white,
fontSize: 20.0,
fontWeight: FontWeight.bold,
),
),
),
),
],
),
),
),
))
.toList();
}
shop_main_screen.dart
import 'package:flutter/material.dart';
import 'package:sample/widget/ImageSlider.dart';
class ShopMainScreen extends StatefulWidget {
const ShopMainScreen({
super.key,
});
@override
State<ShopMainScreen> createState() => _ShopMainScreenState();
}
class _ShopMainScreenState extends State<ShopMainScreen> {
// Future<List<Map<String, dynamic>>> webtoons =
// ImageApiService.getTodaysToons();
final List<String> imgList = [
'https://images.unsplash.com/photo-1520342868574-5fa3804e551c?ixlib=rb-0.3.5&ixid=eyJhcHBfaWQiOjEyMDd9&s=6ff92caffcdd63681a35134a6770ed3b&auto=format&fit=crop&w=1951&q=80',
'https://images.unsplash.com/photo-1522205408450-add114ad53fe?ixlib=rb-0.3.5&ixid=eyJhcHBfaWQiOjEyMDd9&s=368f45b0888aeb0b7b08e3a1084d3ede&auto=format&fit=crop&w=1950&q=80',
'https://images.unsplash.com/photo-1519125323398-675f0ddb6308?ixlib=rb-0.3.5&ixid=eyJhcHBfaWQiOjEyMDd9&s=94a1e718d89ca60a6337a6008341ca50&auto=format&fit=crop&w=1950&q=80',
'https://images.unsplash.com/photo-1523205771623-e0faa4d2813d?ixlib=rb-0.3.5&ixid=eyJhcHBfaWQiOjEyMDd9&s=89719a0d55dd05e2deae4120227e6efc&auto=format&fit=crop&w=1953&q=80',
'https://images.unsplash.com/photo-1508704019882-f9cf40e475b4?ixlib=rb-0.3.5&ixid=eyJhcHBfaWQiOjEyMDd9&s=8c6e5e3aba713b17aa1fe71ab4f0ae5b&auto=format&fit=crop&w=1352&q=80',
'https://images.unsplash.com/photo-1519985176271-adb1088fa94c?ixlib=rb-0.3.5&ixid=eyJhcHBfaWQiOjEyMDd9&s=a0c8d632e977f94e5d312d9893258f59&auto=format&fit=crop&w=1355&q=80'
];
@override
Widget build(BuildContext context) {
return SingleChildScrollView(
child: ImageSlider(
imgList: imgList,
),
);
}
}
carousel_slider.dart:144 >> int nextPage = carouselState!.pageController!.page!.round() + 1;
error>> Exception has occurred.
I'm flutter starter. I try that initialize value class outside or _ImageSliderState or initState. but Not working. I don't know why. Please Help me.
It has missing code(It is not working code). Edit initstate ==> imageSliders = imageListToContainer(widget.imgList);
imgList, this is the thing which you are bring from another page so why are you using this 'imageSliders'. imageSliders this list consist of null so don't use it use "widget.imgList" instead of imageSliders.