Вы можете обернуть свой виджет, который находится внутри Scaffold
body
, с помощью ListView
.
Затем вы должны удалить все флекс-виджеты из вашего Column
.
Ваш GridView
должен включать
shrinkWrap: true
физика: const ClampingScrollPhysics ()
Обращаем ваше внимание, что
import "package:flutter/material.dart";
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
Widget build(BuildContext context) {
return MaterialApp(
home: HomePage(),
);
}
}
class HomePage extends StatelessWidget {
Widget build(BuildContext context) {
return Material(
color: Colors.white, //DesignCourseAppTheme.nearlyWhite,
child: PageView(
scrollDirection: Axis.vertical,
children: [
Scaffold(
body: SafeArea(
child: ListView(
padding: EdgeInsets.symmetric(horizontal: 30),
children: <Widget>[
getAppBarUI(),
getCategoryUI(),
getPopularCourseUI(),
],
),
),
),
],
),
);
}
Widget getCategoryUI(){
return SizedBox(
height: 300,
child: PageView(
children: <Widget>[
Padding(
padding: const EdgeInsets.symmetric(vertical: 40.0,horizontal: 30.0),
child: Material(
color: Colors.blue,
elevation: 3.0,
borderRadius: BorderRadius.circular(20.0),
),
),
Padding(
padding: const EdgeInsets.symmetric(vertical: 40.0,horizontal: 30.0),
child: Material(
color: Colors.green,
elevation: 3.0,
borderRadius: BorderRadius.circular(20.0),
),
),
],
),
);
}
Widget getAppBarUI(){
return Text(
'Games for Fun!',
style: TextStyle(
fontFamily: "Netflix",
fontWeight: FontWeight.w800,
fontSize: 32.0,
letterSpacing: 0.27,
color: Colors.red, //HexColor('FF8C3B'),
),
);
}
Widget getPopularCourseUI() {
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Text(
'Featured Games',
style: TextStyle(
fontFamily: "Netflix",
fontWeight: FontWeight.w800,
fontSize: 24.0,
letterSpacing: 0.27,
color: Colors.red, //HexColor('FF8C3B'),
),
),
const SizedBox(height: 8.0),
GamesGridView(
callBack: () {},
)
],
);
}
}
class GamesGridView extends StatelessWidget {
final VoidCallback callBack;
const GamesGridView({Key key, this.callBack}) : super(key: key);
@override
Widget build(BuildContext context) {
return GridView.count(
shrinkWrap: true, //TODO: must be included
physics: const ClampingScrollPhysics(), //TODO: must be included
crossAxisCount: 2,
mainAxisSpacing: 50.0,
crossAxisSpacing: 50.0,
children: <Widget>[
RaisedButton(child: Text("Button"), onPressed: () {}),
RaisedButton(child: Text("Button"), onPressed: () {}),
RaisedButton(child: Text("Button"), onPressed: () {}),
RaisedButton(child: Text("Button"), onPressed: () {}),
RaisedButton(child: Text("Button"), onPressed: () {}),
RaisedButton(child: Text("Button"), onPressed: () {}),
RaisedButton(child: Text("Button"), onPressed: () {}),
],
);
}
}
Здесь getCategoryUI
может также прокручиваться по горизонтали.