【问题标题】:Flutter SingleChildScrollView not working on a ListViewFlutter SingleChildScrollView 在 ListView 上不起作用
【发布时间】:2021-03-02 18:34:54
【问题描述】:

我有一个包含文本小部件的活动,在它下面有一个 listView.builder 小部件。但是scrollView不适用于listView,当我尝试滚动并按下屏幕两侧时,它可以工作,但是如果我按下listview(或某个项目)并尝试滚动,它就不起作用!如果你看到下面的代码,我做了很大的填充(25),所以当我按下侧面时我可以滚动。我尝试了很多解决方案。

class _RnvState extends State<Rnv> {
@override
Widget build(BuildContext context) {
Size size = MediaQuery.of(context).size;
return MaterialApp(
  home: Scaffold(
    body: SingleChildScrollView(
      child: Container(
        decoration: BoxDecoration(
          image: DecorationImage(
            image: AssetImage("assets/index.jpg"),
            fit: BoxFit.cover,
          ),
        ),
        child: Padding(
          padding: EdgeInsets.all(25),
          child: Column(
            children: <Widget>[
              Text(
                'Your meetings:',
                style: TextStyle(
                  fontSize: 24,
                  wordSpacing: 2,
                  fontWeight: FontWeight.bold,
                ),
              ),
              Rdv(),
            ],
          ),
        ),
      ),
    ),
  ),
);
}
}

Rdv 小部件:

 class Rdv extends StatefulWidget {
  @override
 _RdvState createState() => _RdvState();
 }

class _RdvState extends State<Rdv> {
@override
Widget build(BuildContext context) {
Size size = MediaQuery.of(context).size;

return  ListView.builder(
    shrinkWrap: true,
    itemBuilder: (context, index) {
      return InkWell(
        onTap: () {},
        child: Container(
          width: size.width - (size.width * 0.2),
          child: Card(
            color: Colors.blueGrey[600].withOpacity(0.7),
            child: Padding(
              padding: const EdgeInsets.all(20.0),
              child: Row(
                mainAxisAlignment: MainAxisAlignment.spaceBetween,
                children: <Widget>[
                  Flexible(
                    child: Column(
                      crossAxisAlignment: CrossAxisAlignment.start,
                      mainAxisAlignment: MainAxisAlignment.center,
                      children: <Widget>[
                        Text(
                          '${myList[index]['name']}',
                          overflow: TextOverflow.visible,
                          maxLines: 2,
                          style: TextStyle(
                            fontSize: 22,
                            fontWeight: FontWeight.bold,
                            letterSpacing: 2,
                            color: Colors.white,
                          ),
                        ),
                        SizedBox(
                          height: size.height - (size.height * 0.99),
                        ),
                        Text(
                          '${myList[index]['specialite']}',
                          style: TextStyle(
                            fontSize: 20,
                            color: Colors.white,
                          ),
                        ),
                        SizedBox(
                          height: size.height - (size.height * 0.99),
                        ),
                        Text(
                          '${myList[index]['ville']}',
                          style: TextStyle(
                              fontSize: 20,
                              color: Colors.amber[200],
                              fontWeight: FontWeight.bold),
                        ),
                      ],
                    ),
                  ),
                  Column(
                    mainAxisAlignment: MainAxisAlignment.center,
                    crossAxisAlignment: CrossAxisAlignment.center,
                    children: <Widget>[
                      Text(
                        '${myList[index]['date']}',
                        style: TextStyle(
                          fontSize: 22,
                          color: Colors.white,
                        ),
                      ),
                      Text(
                        '${myList[index]['heur']}',
                        style: TextStyle(
                          fontSize: 22,
                          color: Colors.white,
                        ),
                      ),
                    ],
                  ),
                ],
              ),
            ),
          ),
        ),
      );
    },
    itemCount: myList.length,
  );
}
}

【问题讨论】:

    标签: flutter


    【解决方案1】:

    您可以将此属性添加到 SingleChildScrollview:

    不允许用户滚动的滚动物理特性。

    NeverScrollableScrollPhysics

    physics: NeverScrollableScrollPhysics()
    

    编辑:您还可以查看 this solution 映射每个列表项的位置:

    Column(
      children: <Widget>[
        ...itemList.map((item) {
           return Text(item);
        }).toList(),
      ],
    ),
    

    【讨论】:

    • 这不起作用,但我找到了解决方法!我在 listView.builder 小部件中添加了这一行 primary: false
    【解决方案2】:

    我找到了解决问题的方法,方法是在 ListView.builder 小部件中添加 primary: false, 属性,所以现在看起来像这样:

    return Container(
      child: ListView.builder(
        primary: false,
        shrinkWrap: true,
        itemBuilder: (context, index) {
          return InkWell(
    

    【讨论】:

      猜你喜欢
      • 2021-08-31
      • 1970-01-01
      • 2021-03-15
      • 2020-09-06
      • 2020-09-04
      • 1970-01-01
      • 2022-08-05
      • 2021-06-27
      • 2021-11-08
      相关资源
      最近更新 更多