单独的小部件中的Listbuilder无法正常工作

问题描述 投票:0回答:1

我尝试了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]}'),
          );
        },
      )
    ]));
  }
}
flutter flutter-layout
1个回答
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:

要为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]}'),
              );
            },
          ),
        ),
      ])
    ),
  }
© www.soinside.com 2019 - 2024. All rights reserved.