我尝试了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]}'),
);
},
)
]));
}
}
答案 0 :(得分:0)
尝试删除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:
要为列表添加同级,可以尝试用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]}'),
);
},
),
),
])
),
}