当前位置: 首页 > 知识库问答 >
问题:

找不到有关如何在自定义小部件中使用ListView的正确布局选项

仉梓
2023-03-14

我试图提取重用一个简单的小部件,然后在父小部件中引用它。自定义小部件只是使用一行来布局一个文本字段和一个按钮,下面我想要一个显示项目的列表视图。然后,我将customwidget嵌入到parent中,但它会不断抛出错误。我还没有弄明白如何让自定义小部件在可以使用ListView或column layout的地方工作。下面是演示该问题的两个简化小部件。

这是父窗口小部件,我将其称为custom widget PlayControl()

   @override
 Widget build(BuildContext context) {
   return Scaffold(
   appBar: AppBar(
    title: Text('My Playlists'),
  ),
  body: Container(
    child: Column(
      crossAxisAlignment: CrossAxisAlignment.start,
      textDirection: TextDirection.ltr,
      children: <Widget>[
        Container(
          alignment: Alignment.center,
          margin: EdgeInsets.all(20),
          child: Text('Test'),
        ),
        PlayListControl(),
      ],
    ),
  ),
  drawer: SideDrawer(),
);
 }
}

这是播放控制小部件。

  @override
 Widget build(BuildContext context) {
   return Container(
  margin: EdgeInsets.all(10),
    child: Column(
    children: <Widget>[
      Container(
        child: Row(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Container(
              width: 200,
              child: TextField(),
            ),
            ButtonTheme(
                minWidth: 30,
                child: RaisedButton(
                  textColor: Colors.white,
                  child: Text('add'),
                  onPressed: () {},
                )),
          ],
        ),
      ),
      Expanded(
        child: ListView(
          children: <Widget>[
            Text('Widget 1'),
            Text('Widget 2'),
          ],
        ),
      )
    ],
  ),
);
}
}

无论我尝试什么,它总是抱怨与高度相关的布局问题。我本以为用扩展包装列表视图会解决这个问题,但事实并非如此。只有当我使用容器并指定高度时,我才不会出错,但我想使用任何可用的空间。

如何让PlayControl()小部件在父控件中正确呈现?

共有1个答案

谭曦
2023-03-14

您忘记在扩展的小部件中包装PlayControl的第一个容器。。

import 'package:flutter/material.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
        title: 'Flutter Demo',
        home: Scaffold(
          appBar: AppBar(
            title: Text('My Playlists'),
          ),
          body: Container(
            child: Column(
              mainAxisSize: MainAxisSize.max,
              crossAxisAlignment: CrossAxisAlignment.start,
              textDirection: TextDirection.ltr,
              children: <Widget>[
                Container(
                  alignment: Alignment.center,
                  margin: EdgeInsets.all(20),
                  child: Text('Test'),
                ),
                PlayListControl(),
              ],
            ),
          ),
        ));
  }
}

class PlayListControl extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Expanded(
      child: Container(
        margin: EdgeInsets.all(10),
        child: Column(
          children: <Widget>[
            Container(
              child: Row(
                mainAxisAlignment: MainAxisAlignment.center,
                children: <Widget>[
                  Container(
                    width: 200,
                    child: TextField(),
                  ),
                  ButtonTheme(
                      minWidth: 30,
                      child: RaisedButton(
                        textColor: Colors.white,
                        child: Text('add'),
                        onPressed: () {},
                      )),
                ],
              ),
            ),
            Expanded(
              child: ListView(
                children: <Widget>[
                  Text('Widget 1'),
                  Text('Widget 2'),
                ],
              ),
            )
          ],
        ),
      ),
    );
  }
}
 类似资料:
  • 我在使用AppCompat时突然想到,我一直在使用<code>按钮位于我的布局XML文件中。我通过<code>view.getClass()做了一个测试。getSimpleName()并确认,即使我在XML中将其声明为,被加载的类实际上是。 这是怎么回事,在引擎盖下?

  • 本文向大家介绍WPF的ListView控件自定义布局用法实例,包括了WPF的ListView控件自定义布局用法实例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了WPF的ListView控件自定义布局用法。分享给大家供大家参考,具体如下: 概要: 以源码的形式贴出,免得忘记后,再到网上查资料。在VS2008+SP1环境下调试通过 引用的GrayscaleEffect模块,可根据参考资料《G

  • 正在开发一个应用程序,采取学生考勤,我想得到的名单上勾选的名字“考勤”,当我点击一个“考勤”在相同的自定义列表视图。拜托,我该怎么做? 这是我的密码...自定义视图 ListAdapter公共类StudentListAdapter1扩展了BaseAdapter{private Context mContext;private List mStudentList; } 考勤activityprote

  • 问题内容: 我真的很想把头发拔出来。一些背景。我有一个项目列表,所有项目旁边都有复选框。取消选择复选框后,将出现一个按钮,您可以从列表中删除该项目。乍一看似乎是倒退,但我们只希望“选定”的项目有资格进行进一步处理,等等。这是我的布局: 我无法使这3个物品在行中垂直居中以挽救生命。,,,没有它的工作原理。我敢肯定,我的问题是要在某个地方翻转一下,但我确实对此持怀疑态度。 编辑:我知道textview

  • 在我的vadin应用程序中,一个扩展AbstractJavaScriptComponent的自定义小部件有几个文件,如下所示。这些文件在浏览器中可用 null

  • 我正在使用log4j2和滚动appender文件。我想使用自定义布局,但它不能正常工作。 我在JBoss工作。我已将具有cusotmize布局的lib放在libs目录中,因此它位于类路径中。 在log4j2.xml,我已经把以下配置: 但是没有正确记录! 提前谢谢 贾米拉