gpt4 book ai didi

listview - 在构建期间调用 setState() 或 markNeedsBuild

转载 作者:IT老高 更新时间:2023-10-28 12:29:10 26 4
gpt4 key购买 nike

class MyHome extends StatefulWidget {
@override
State<StatefulWidget> createState() => new MyHomePage2();
}

class MyHomePage2 extends State<MyHome> {
List items = new List();

buildlist(String s) {
setState(() {
print("entered buildlist" + s);
List refresh = new List();
if (s == 'button0') {
refresh = [
new Refreshments("Watermelon", 250),
new Refreshments("Orange", 275),
new Refreshments("Pine", 300),
new Refreshments("Papaya", 225),
new Refreshments("Apple", 250),
];
} else if (s == 'button1') {
refresh = [
new Refreshments("Pina Colada", 250),
new Refreshments("Bloody Mary", 275),
new Refreshments("Long Island Ice tea", 300),
new Refreshments("Screwdriver", 225),
new Refreshments("Fusion Cocktail", 250),
];
} else if (s == 'button2') {
refresh = [
new Refreshments("Virgin Pina Colada", 250),
new Refreshments("Virgin Mary", 275),
new Refreshments("Strawberry Flush", 300),
new Refreshments("Mango Diver", 225),
new Refreshments("Peach Delight", 250),
];
} else {
refresh = [
new Refreshments("Absolute", 250),
new Refreshments("Smirnoff", 275),
new Refreshments("White Mischief", 300),
new Refreshments("Romanov", 225),
new Refreshments("Blender's Pride", 250),
];
}

for (var item in refresh) {
items.add(new ItemsList(item));
}
});
}

@override
Widget build(BuildContext context) {
var abc = MediaQuery.of(context).size;

print(abc.width);

var width = abc.width / 4;

Text text = new Text("Dev");
Text text2 = new Text("Sneha");
Text text3 = new Text("Prashant");
Text text4 = new Text("Vikesh");

var pad = const EdgeInsets.all(10.0);

Padding pad1 = new Padding(child: text, padding: pad);
Padding pad2 = new Padding(child: text2, padding: pad);
Padding pad3 = new Padding(child: text3, padding: pad);
Padding pad4 = new Padding(child: text4, padding: pad);

ListView listView = new ListView(children: <Widget>[
new Image.asset('images/party.jpg'),
pad1,
pad2,
pad3,
pad4
]);

Drawer drawer = new Drawer(child: listView);

return new Scaffold(
drawer: drawer,

appBar: new AppBar(
title: new Text('Booze Up'),
),
body: new Column(children: <Widget>[
new ListView.builder(
scrollDirection: Axis.horizontal,
itemCount: 4,
itemBuilder: (BuildContext context, int index) {
return new Column(children: <Widget>[
new Container(
child: new Flexible(
child: new FlatButton(
child: new Image.asset('images/party.jpg',
width: width, height: width),
onPressed: buildlist('button' + index.toString()),
)),
width: width,
height: width,
)
]);
},
),
new Expanded(
child: new ListView(
padding: new EdgeInsets.fromLTRB(10.0, 10.0, 0.0, 10.0),
children: items,
scrollDirection: Axis.vertical,
)),
]),

floatingActionButton: new FloatingActionButton(
onPressed: null,
child: new Icon(Icons.add),
), // This trailing comma makes auto-formatting nicer for build methods.
);
}
}

class Refreshments {
String name;
int price;

Refreshments(this.name, this.price);
}

class ItemsList extends StatelessWidget {
final Refreshments refreshments;

ItemsList(this.refreshments);

@override
Widget build(BuildContext context) {
return new ListTile(
onTap: null,
title: new Text(refreshments.name),
);
}
}

Full code

我有两个错误:

1] 水平视口(viewport)被赋予了无限的高度。水平视口(viewport)被赋予了无限量的垂直空间来展开。

2] 在构建期间调用 setState() 或 markNeedsBuild一个垂直的 renderflex 溢出了 99488 像素。

请帮帮我。我正在创建这个应用程序,在每个图像上单击一个列表,如下所示。图片将排成一行,列表应显示在行下方。

谢谢。

最佳答案

在我的例子中,我在 build 方法完成构建小部件的过程之前调用了 setState 方法。

如果您在 build 方法完成之前显示 snackBaralertDialog 以及在许多其他情况。因此,在这种情况下,您应该使用如下所示的回调函数:

WidgetsBinding.instance.addPostFrameCallback((_){

// Add Your Code here.

});

或者你也可以使用 SchedulerBinding 来做同样的事情:

SchedulerBinding.instance.addPostFrameCallback((_) {

// add your code here.

Navigator.push(
context,
new MaterialPageRoute(
builder: (context) => NextPage()));
});

关于listview - 在构建期间调用 setState() 或 markNeedsBuild,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47592301/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com