Dart 将listview放置到列中

Dart 将listview放置到列中,dart,flutter,flutter-layout,Dart,Flutter,Flutter Layout,我想将一个列表视图(1000多个项目)放到一列中,我尝试了展开,但没有成功。 在该列中,有一个swiper和一个listview 有什么解决办法吗? 这是我的密码: Widget build(BuildContext context) { return DefaultTabController( length: _list.length, child: Scaffold( appBar: AppBar( title: Text(

我想将一个列表视图(1000多个项目)放到一列中,我尝试了
展开
,但没有成功。 在该列中,有一个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,
              ),
            )
          ],
        ),
      ),
    );
  }
小部件构建(构建上下文){
返回DefaultTabController(
长度:_list.length,
孩子:脚手架(
appBar:appBar(
标题:文本(“列中的列表视图”),
标题:对,
底部:选项卡栏(
isScrollable:错误,
选项卡:_list.map((字符串ss){
返回选项卡(文本:ss);
}).toList(),
),
),
正文:专栏(
儿童:[
容器(
身高:200,
宽度:MediaQuery.of(context).size.width,
孩子:游泳运动员(
itemBuilder:(构建上下文,int索引){
返回_swiperImage[索引];
},
itemCount:_swiperImage.length,
自动播放:对,
循环:对,
分页:SwiperPagination(),
控件:SwipControl(),
onTap:(索引)=>
flatterToast.showtoos(消息:'Clicked${index+1}'),
),
),
扩大(
子项:ListView.builder(
收缩膜:对,
itemBuilder:(构建上下文,int索引){
返回ListItemExamStrategyWidget(_ListXamStrategy[index]);
},
itemCount:_listExamStrategy.length,
),
)
],
),
),
);
}
一些变化:

  • 将您的
    包装在
    SingleChildScrollView

    body: SingleChildScrollView(
      child: Column(
    
  • 列表视图中删除
    扩展的
    小部件父项

  • 列表视图的物理设置为
    NeverScrollableScrollPhysics

    ListView.builder(
            shrinkWrap: true,
            physics: NeverScrollableScrollPhysics(),
    
    • 一些变化:

      • 将您的
        包装在
        SingleChildScrollView

        body: SingleChildScrollView(
          child: Column(
        
      • 列表视图中删除
        扩展的
        小部件父项

      • 列表视图的物理设置为
        NeverScrollableScrollPhysics

        ListView.builder(
                shrinkWrap: true,
                physics: NeverScrollableScrollPhysics(),
        

      它在一列中工作,带有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,
                      ),
                    )
                  ],
                ),
              ),
            );
        }
      
      final List _List=['tab-1','tab-2'];
      最终列表_swiperImage=[
      'http://via.placeholder.com/350x150',
      'http://via.placeholder.com/350x150'
      ];
      @凌驾
      小部件构建(构建上下文){
      返回DefaultTabController(
      长度:_list.length,
      孩子:脚手架(
      appBar:appBar(
      标题:常量文本(“列中的列表视图”),
      标题:对,
      底部:选项卡栏(
      isScrollable:错误,
      选项卡:_list.map((字符串ss){
      返回选项卡(文本:ss);
      }).toList(),
      ),
      ),
      正文:专栏(
      儿童:[
      容器(
      身高:200,
      宽度:MediaQuery.of(context).size.width,
      孩子:游泳运动员(
      itemBuilder:(构建上下文,int索引){
      返回新的Image.network(
      _swiperImage[索引],
      fit:BoxFit.fill,
      );
      },
      itemCount:_swiperImage.length,
      自动播放:对,
      循环:对,
      分页:常量SwiperPagination(),
      控件:常量SwipControl(),
      onTap:(int索引){
      打印('-----------$index');
      }),
      ),
      新扩展(
      子项:ListView.builder(
      收缩膜:对,
      itemBuilder:(构建上下文,int索引){
      退回新货柜(
      填充:常数边集全部(15.0),
      子项:新文本('index${index.toString()}'),
      );
      },
      物品计数:100,
      ),
      )
      ],
      ),
      ),
      );
      }
      

      它在一列中工作,带有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,
                      ),
                    )
                  ],
                ),
              ),
            );
        }
      
      final List _List=['tab-1','tab-2'];
      最终列表_swiperImage=[
      'http://via.placeholder.com/350x150',
      'http://via.placeholder.com/350x150'
      ];
      @凌驾
      小部件构建(构建上下文){
      返回DefaultTabController(
      长度:_list.length,
      孩子:脚手架(
      appBar:appBar(
      标题:常量文本(“列中的列表视图”),
      标题:对,
      底部:选项卡栏(
      isScrollable:错误,
      选项卡:_list.map((字符串ss){
      返回选项卡(文本:ss);
      }).toList(),
      ),
      ),
      正文:专栏(
      儿童:[
      容器(
      身高:200,
      宽度:MediaQuery.of(context).size.width,
      孩子:游泳运动员(
      itemBuilder:(构建上下文,int索引){
      返回新的Image.network(
      _swiperImage[索引],
      fit:BoxFit.fill,
      );
      },
      itemCount:_swiperImage.length,
      自动播放:对,
      循环:对,
      分页:常量SwiperPagination(),
      控件:常量SwipControl(),
      onTap:(int索引){
      打印('-----------$index');
      }),
      ),
      新扩展(
      孩子