我尝试了Flutter.io的listbuilder演示。这很好用,但是我想在页面中添加一个textview,所以我将listbuilder移动到一个单独的Widget中,抛出以下错误:
发生了例外情况。 FlutterError(无法测试一个从未布局过的渲染框。在此RenderBox上调用了hitTest()方法:RenderStack#894cd NEEDS-LAYOUT NEEDS-PAINT不幸的是,此对象的几何在此时尚不清楚,可能是因为它从来没有被布局。这意味着它无法准确地进行测试。如果您在布局阶段本身尝试执行命中测试,请确保您只搜索已完成布局的测试节点(例如节点的子节点, layout()方法已被调用)。)
完整代码:
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
void main() {
runApp(MyApp(
items: List<String>.generate(10, (i) => "Item $i"),
));
}
class MyApp extends StatelessWidget {
final List<String> items;
MyApp({Key key, @required this.items}) : super(key: key);
@override
Widget build(BuildContext context) {
final title = 'Long List';
return MaterialApp(
title: title,
home: Scaffold(
appBar: AppBar(
title: Text(title),
),
body: body(),
),
);
}
Widget body() {
return Container(
child: Column(children: <Widget>[
ListView.builder(
itemCount: items.length,
itemBuilder: (context, index) {
return ListTile(
title: Text('${items[index]}'),
);
},
)
]));
}
}
尝试删除Column
中的body()
:
Widget body() {
return Container(
child: /* Column(children: <Widget>[ */
ListView.builder(
itemCount: items.length,
itemBuilder: (context, index) {
return ListTile(
title: Text('${items[index]}'),
);
},
)
/* ]) */);
}
这是因为Column
似乎没有特定的大小来呈现儿童小部件。更多信息:https://flutter.io/docs/development/ui/layout/box-constraints#flex
更新@ 2019.02.18:
要为List添加兄弟节点,您可以尝试使用Expanded
将其包装,然后添加兄弟节点。
Widget body() {
return Container(
child: Column(children: <Widget>[
Text('DropdownButton'),
Expanded(
child: ListView.builder(
itemCount: items.length,
itemBuilder: (context, index) {
return ListTile(
title: Text('${items[index]}'),
);
},
),
),
])
),
}