在Flutter中,如何将ListView放置在屏幕底部

时间:2020-08-05 21:33:14

标签: flutter listview dart layout

我是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;
  }
}

2 个答案:

答案 0 :(得分:1)

而不是使用Alignment小部件,而是尝试像这样更改列的轴上的对齐方式:

Column(
   mainAxisAlignment: MainAxisAlignment.end
   children: <Widget>[
      Expanded(
         child: Text('Here I\'m taking all the space.'),
      ),
      YourListView(),
    ],
),

这也适用于交叉轴。作为参考,您可能想看看ColumnMainAxisAlignment

的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()),
          ]),
        ),
      ),
    );
  }
}