Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter Can';对于如何在自定义小部件中使用ListView,找不到正确的布局选项_Flutter_Flutter Layout - Fatal编程技术网

Flutter Can';对于如何在自定义小部件中使用ListView,找不到正确的布局选项

Flutter Can';对于如何在自定义小部件中使用ListView,找不到正确的布局选项,flutter,flutter-layout,Flutter,Flutter Layout,我试图提取重用一个简单的小部件,然后在父小部件中引用它。自定义小部件只是使用一行来布局文本字段和按钮,在下面我希望有一个显示项目的列表视图。然后,我将customwidget嵌入到parent中,但它不断抛出错误。我还没有弄明白如何让自定义小部件在可以使用ListView或ColumnLayout的地方工作。下面是演示该问题的两个简化小部件 这是父窗口小部件,我在这里调用自定义窗口小部件playlicontrol() @覆盖 小部件构建(构建上下文){ 返回脚手架( appBar:appBar(

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

这是父窗口小部件,我在这里调用自定义窗口小部件playlicontrol()

@覆盖
小部件构建(构建上下文){
返回脚手架(
appBar:appBar(
标题:文本(“我的播放列表”),
),
主体:容器(
子:列(
crossAxisAlignment:crossAxisAlignment.start,
textDirection:textDirection.ltr,
儿童:[
容器(
对齐:对齐.center,
保证金:全部(20),
子项:文本('Test'),
),
播放列表控件(),
],
),
),
抽屉:侧抽屉(),
);
}
}
这是播放控制小部件

  @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'),
          ],
        ),
      )
    ],
  ),
);
}
}
@覆盖
小部件构建(构建上下文){
返回容器(
保证金:所有(10),
子:列(
儿童:[
容器(
孩子:排(
mainAxisAlignment:mainAxisAlignment.center,
儿童:[
容器(
宽度:200,
子项:TextField(),
),
钮扣(
最小宽度:30,
孩子:升起按钮(
textColor:Colors.white,
子项:文本('add'),
按下:(){},
)),
],
),
),
扩大(
子:ListView(
儿童:[
文本(“小部件1”),
文本('Widget 2'),
],
),
)
],
),
);
}
}
无论我尝试什么,它总是抱怨与高度相关的布局问题。我本以为将ListView包装成Expanded可以解决这个问题,但事实并非如此。只有当我使用容器并指定高度时,我才不会得到错误,但我想使用任何可用的空间


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

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

导入“包装:颤振/材料.省道”;
void main()=>runApp(MyApp());
类MyApp扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回材料PP(
标题:“颤振演示”,
家:脚手架(
appBar:appBar(
标题:文本(“我的播放列表”),
),
主体:容器(
子:列(
mainAxisSize:mainAxisSize.max,
crossAxisAlignment:crossAxisAlignment.start,
textDirection:textDirection.ltr,
儿童:[
容器(
对齐:对齐.center,
保证金:全部(20),
子项:文本('Test'),
),
播放列表控件(),
],
),
),
));
}
}
类播放控件扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
扩大回报(
子:容器(
保证金:所有(10),
子:列(
儿童:[
容器(
孩子:排(
mainAxisAlignment:mainAxisAlignment.center,
儿童:[
容器(
宽度:200,
子项:TextField(),
),
钮扣(
最小宽度:30,
孩子:升起按钮(
textColor:Colors.white,
子项:文本('add'),
按下:(){},
)),
],
),
),
扩大(
子:ListView(
儿童:[
文本(“小部件1”),
文本('Widget 2'),
],
),
)
],
),
),
);
}
}

尝试在
扩展的
中包装
播放控件
小部件
是的,尝试过了……不起作用。仅供参考,如果我使用singlechildscrollview和inside列…它允许我这样做。但是,我的目标是使用ListView.builder()动态创建列表……我认为问题在于列中的ListView。这个解决方案可以帮助我以前阅读该线程,因此我尝试使用推荐的带有“Expanded”的包装。根据文档,这应该将listView限制在剩余的空间内……但在我的例子中,它抛出了一个错误。一旦区分,如果我在父窗口小部件中使用expanded with listview,它就会工作。当我引用子窗口小部件时,会出现此问题。在容器上使用高度可以工作,但它不会动态使用可用空间。您在哪个容器上设置高度?子窗口小部件中的那个?
  @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'),
          ],
        ),
      )
    ],
  ),
);
}
}
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'),
                ],
              ),
            )
          ],
        ),
      ),
    );
  }
}