将列表视图放入列中

问题描述 投票:0回答:2

我想将listview(1000多个项目)放入一列,我尝试了Expanded,没有工作。在列中,有一个swiper和listview。

有什么解决方案吗?这是我的代码:

Widget build(BuildContext context) {
    return DefaultTabController(
      length: _list.length,
      child: Scaffold(
        appBar: AppBar(
          title: Text("ListView in Column"),
          centerTitle: true,
          bottom: TabBar(
            isScrollable: false,
            tabs: _list.map((String ss) {
              return Tab(text: ss);
            }).toList(),
          ),
        ),
        body: Column(
          children: <Widget>[
            Container(
              height: 200,
              width: MediaQuery.of(context).size.width,
              child: Swiper(
                itemBuilder: (BuildContext context, int index) {
                  return _swiperImage[index];
                },
                itemCount: _swiperImage.length,
                autoplay: true,
                loop: true,
                pagination: SwiperPagination(),
                control: SwiperControl(),
                onTap: (index) =>
                    Fluttertoast.showToast(msg: 'Clicked ${index + 1}'),
              ),
            ),
            Expanded(
              child: ListView.builder(
                shrinkWrap: true,
                itemBuilder: (BuildContext context, int index) {
                  return ListItemExamStrategyWidget(_listExamStrategy[index]);
                },
                itemCount: _listExamStrategy.length,
              ),
            )
          ],
        ),
      ),
    );
  }

enter image description here

dart flutter flutter-layout
2个回答
1
投票

一些变化:

  • 把你的Column包裹在SingleChildScrollView里面。 body: SingleChildScrollView( child: Column(
  • Expanded中删除ListView小部件父级
  • 将你的ListView的物理学设置为NeverScrollableScrollPhysics ListView.builder( shrinkWrap: true, physics: NeverScrollableScrollPhysics(),

1
投票

它在带有swiper和扩展小部件的列中工作,该小部件包含带有1000个文本的listview

这是我的工作代码

    final List<String> _list = <String>['tab-1', 'tab-2'];
  final List<String> _swiperImage = <String>[
    'http://via.placeholder.com/350x150',
    'http://via.placeholder.com/350x150'
  ];

  @override
  Widget build(BuildContext context) {
      return DefaultTabController(
        length: _list.length,
        child: Scaffold(
          appBar: AppBar(
            title: const Text('ListView in Column'),
            centerTitle: true,
            bottom: TabBar(
              isScrollable: false,
              tabs: _list.map((String ss) {
                return Tab(text: ss);
              }).toList(),
            ),
          ),
          body: Column(
            children: <Widget>[
              Container(
                height: 200,
                width: MediaQuery.of(context).size.width,
                child: Swiper(
                    itemBuilder: (BuildContext context, int index) {
                      return new Image.network(
                        _swiperImage[index],
                        fit: BoxFit.fill,
                      );
                    },
                    itemCount: _swiperImage.length,
                    autoplay: true,
                    loop: true,
                    pagination: const SwiperPagination(),
                    control: const SwiperControl(),
                    onTap: (int index) {
                      print('----------$index');
                    }),
              ),
              new Expanded(
                child: ListView.builder(
                  shrinkWrap: true,
                  itemBuilder: (BuildContext context, int index) {
                    return new Container(
                      padding: const EdgeInsets.all(15.0),
                      child: new Text('index ${index.toString()}'),
                    );
                  },
                  itemCount: 100,
                ),
              )
            ],
          ),
        ),
      );
  }

Sample screen

© www.soinside.com 2019 - 2024. All rights reserved.