currently, the ListView.builder widget is scrollable, and it creates an empty space at the top similar to the green area in the layout. Is it possible to standardize it so that there won’t be any gap at the top like the red area, even when scrolled? What I aim for is that when scrolled, the content should move downwards without leaving any empty space at the top. I’ve been trying to achieve this but haven’t succeeded.
Is this issue caused by the Expand widget or by the ListView widget? Could you also provide another solution so that I can try to achieve the same design using that alternative method?
import 'package:barber_book/widgets/dropdown_widget.dart';
import 'package:flutter/material.dart';
import 'package:barber_book/widgets/saat_widget.dart';
class SaatProvider extends StatefulWidget {
const SaatProvider({super.key});
@override
State<SaatProvider> createState() => _SaatProviderState();
}
class _SaatProviderState extends State<SaatProvider> {
@override
Widget build(BuildContext context) {
int baslangicSaat = 10;
int aralik = 45;
int sonSaat = 24;
List<String> stringList = [];
for (int i = baslangicSaat * 60; i <= sonSaat * 60; i += aralik) {
int saat = i ~/ 60;
int dakika = i % 60;
String saatDakika =
"${saat.toString().padLeft(2, '0')}:${dakika.toString().padLeft(2, '0')}";
stringList.add(saatDakika);
}
return Scaffold(
body: Padding(
padding: const EdgeInsets.fromLTRB(25, 50, 25, 10),
child: Column(
children: [
const Row(
mainAxisAlignment: MainAxisAlignment.start,
children: [
Text(
"KUAFÖRÜNÜZ",
style: TextStyle(
fontSize: 20,
fontFamily: "Caviar",
fontWeight: FontWeight.bold),
),
],
),
Padding(
padding: const EdgeInsets.only(top: 10.0),
child: Row(mainAxisAlignment: MainAxisAlignment.start, children: [
Container(
alignment: Alignment.center,
height: 75,
width: 340,
decoration: BoxDecoration(
border: Border.all(color: Colors.grey), // border rengi
borderRadius:
BorderRadius.circular(8), // border yuvarlaklığı
),
child: const DropdownWidget(),
),
]),
),
const Padding(
padding: EdgeInsets.only(top: 20.0),
child: Row(mainAxisAlignment: MainAxisAlignment.start, children: [
Text(
"BUGÜN",
style: TextStyle(
fontSize: 20,
fontFamily: "Caviar",
fontWeight: FontWeight.bold),
),
]),
),
Expanded(
child: ListView.builder(
itemCount: (stringList.length / 5).ceil(),
itemBuilder: (BuildContext context, int index) {
return Padding(
padding: const EdgeInsets.only(top: 5),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: List.generate(
5,
(subIndex) {
final elementIndex = index * 5 + subIndex;
if (elementIndex < stringList.length) {
return SaatWidget(
text: stringList[elementIndex], id: 1);
} else {
return const SizedBox.shrink();
}
},
),
),
);
},
),
),
const Padding(
padding: EdgeInsets.only(top: 15.0),
child: Row(mainAxisAlignment: MainAxisAlignment.start, children: [
Text(
"YARIN",
style: TextStyle(
fontSize: 20,
fontFamily: "Caviar",
fontWeight: FontWeight.bold),
),
]),
),
Expanded(
child: ListView.builder(
itemCount: (stringList.length / 5).ceil(),
itemBuilder: (BuildContext context, int index) {
return Padding(
padding: const EdgeInsets.only(top: 5),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: List.generate(
5,
(subIndex) {
final elementIndex = index * 5 + subIndex;
if (elementIndex < stringList.length) {
return SaatWidget(
text: stringList[elementIndex], id: 1);
} else {
return const SizedBox.shrink();
}
},
),
),
);
},
),
),
const Padding(
padding: EdgeInsets.only(top: 15.0),
child: Row(mainAxisAlignment: MainAxisAlignment.start, children: [
Text(
"ERTESI GÜN",
style: TextStyle(
fontSize: 20,
fontFamily: "Caviar",
fontWeight: FontWeight.bold),
),
]),
),
Expanded(
child: ListView.builder(
physics: const BouncingScrollPhysics(),
itemCount: (stringList.length / 5).ceil(),
itemBuilder: (BuildContext context, int index) {
return Padding(
padding: const EdgeInsets.only(top: 5),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: List.generate(
5,
(subIndex) {
final elementIndex = index * 5 + subIndex;
if (elementIndex < stringList.length) {
return SaatWidget(
text: stringList[elementIndex], id: 1);
} else {
return const SizedBox.shrink();
}
},
),
),
);
},
),
),
Padding(
padding: const EdgeInsets.fromLTRB(0, 40, 0, 0),
child: SizedBox(
width: 350,
height: 50,
child: ElevatedButton(
style: ElevatedButton.styleFrom(
backgroundColor: Colors.black,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(15)),
),
onPressed: () {},
child: const Text(
"İleri Tarih İçin Randevu Al",
style: TextStyle(fontSize: 20, color: Colors.white),
),
),
),
),
],
),
),
);
}
}
3