我是Flutter的新手。如何在Flutter中将ListView保留在屏幕底部?我尝试将2个小部件放在一列中,然后在第一个小部件(文本)周围放置Expanded,这样它就应该占据剩余的屏幕和底部的ListView。但是什么也没有出现。如果我将ListView替换为Text小部件,它将起作用。不确定将ListView放在底部将需要什么。
import 'package:flutter/material.dart';
final Color darkBlue = Color.fromARGB(255, 18, 32, 47);
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
theme: ThemeData.dark().copyWith(scaffoldBackgroundColor: darkBlue),
debugShowCheckedModeBanner: false,
home: Scaffold(
body: SafeArea(
child: Column(children: <Widget>[
Expanded(
child: Text('Here I\'m taking all the space.'),
),
Align(
alignment: Alignment.bottomCenter,
child: MyWidget(),
//child: Text("if use Text widget, it works"),
),
]),
),
),
);
}
}
class MyWidget extends StatelessWidget {
@override
Widget build(BuildContext context) {
return ListView(scrollDirection: Axis.horizontal, children: _getListIcon());
}
_getListIcon() {
List<Widget> widgets = [];
for (int i = 0; i < 10; i++) {
widgets.add(RaisedButton(
onPressed: () => {},
color: Colors.orange,
padding: EdgeInsets.all(10.0),
child: Column(
children: <Widget>[Icon(Icons.add), Text("Add")],
)));
}
return widgets;
}
}
答案 0 :(得分:1)
而不是使用Alignment小部件,而是尝试像这样更改列的轴上的对齐方式:
Column(
mainAxisAlignment: MainAxisAlignment.end
children: <Widget>[
Expanded(
child: Text('Here I\'m taking all the space.'),
),
YourListView(),
],
),
这也适用于交叉轴。作为参考,您可能想看看Column和MainAxisAlignment
的flutter文档我希望这可以解决您的问题。
答案 1 :(得分:1)
我没发现任何问题。
我建议对代码进行一些改进
您无需在列
中使用 Align 小部件class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
theme: ThemeData.dark().copyWith(scaffoldBackgroundColor: darkBlue),
debugShowCheckedModeBanner: false,
home: Scaffold(
body: SafeArea(
child: Column(children: <Widget>[
Spacer(),
MyWidget(),
]),
),
),
);
}
}
就像这样,如果您想将列表设为空白,则将其设置为固定高度,请使用 SizedBox 这样的>
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
theme: ThemeData.dark().copyWith(scaffoldBackgroundColor: darkBlue),
debugShowCheckedModeBanner: false,
home: Scaffold(
body: SafeArea(
child: Column(children: <Widget>[
Spacer(),
SizedBox(height:50,child:MyWidget()),
]),
),
),
);
}
}