Android 在简单颤振应用程序中使用列中的GridView的问题
我最近开始学习颤振,因此正在构建一个我称之为“Basketly”的教学应用程序 UIs结构非常简单:Android 在简单颤振应用程序中使用列中的GridView的问题,android,user-interface,flutter,dart,gridview,Android,User Interface,Flutter,Dart,Gridview,我最近开始学习颤振,因此正在构建一个我称之为“Basketly”的教学应用程序 UIs结构非常简单: @override Widget build(BuildContext context) { return new Scaffold( appBar: new AppBar( title: new Text('Basketly - dein Einkauf'), actions: <Widget>[
@override
Widget build(BuildContext context) {
return new Scaffold(
appBar: new AppBar(
title: new Text('Basketly - dein Einkauf'),
actions: <Widget>[
new FlatButton.icon(
label: new Text("Einstellungen"),
onPressed: () {
/*nav to settings */
Navigator.push(context,
MaterialPageRoute(builder: (context) => SettingsView()));
},
icon: new Icon(Icons.settings),
),
],
),
body: new Column(
mainAxisSize: MainAxisSize.max,
children: <Widget>[
new Text(
"Einkaufswagen",
style: new TextStyle(
fontSize: 12.0,
color: Colors.amber,
fontWeight: FontWeight.w600,
fontFamily: "Roboto"),
),
Expanded(
child: new GridView.count(
crossAxisCount: 6,
children: this.widget.basketItems,
),
),
new Divider(color: Colors.grey),
new Text(
"Produkte",
style: new TextStyle(
fontSize: 12.0,
color: Colors.amber,
fontWeight: FontWeight.w600,
fontFamily: "Roboto"),
),
new GridView.count(
crossAxisCount: 6,
children: this.widget.allItems,
shrinkWrap: true),
new Divider(color: Colors.grey),
//TODO here we input some expandeable gridviews or something
new MetaProdCategory("Reinigungsmittel"),
new MetaProdCategory("Getränke"),
new MetaProdCategory("Obst"),
new MetaProdCategory("Milch & Käse"),
new MetaProdCategory("Gemüse"),
new Row( children: <Widget>[
new Switch(onChanged: switchChanged, value: false),
new Text("Vegan"),
new Switch(onChanged: switchChanged, value: false),
new Text(
"Bio",
),
new Switch(onChanged: switchChanged, value: false),
new Text(
"Regional",
),
new Switch(onChanged: switchChanged, value: false),
new Text(
"Fair",
),
]),
]));
…包括一些日志记录,以确保一切正常工作:
log("---------basketItems:");
this.widget.basketItems.forEach((element) {
log(element.stringify());
});
log("----------allItems:");
this.widget.allItems.forEach((element) {
log(element.stringify());
});
[log] you tapped on Brot
[log] addToBasket called
[log] ---------basketItems:
[log] Brot true
[log] ----------allItems:
[log] Bier false
[log] Senf false
[log] Lauch false
[log] Steak false
[log] Bergkäse false
[log] Mehl false
[log] Kürbis false
[log] Oliven false
[log] Pfeffer false
现在开始解决问题强>
当我标记其中一个ProdCategories(本例中为Brot)时,根据日志,一切都按预期工作:
log("---------basketItems:");
this.widget.basketItems.forEach((element) {
log(element.stringify());
});
log("----------allItems:");
this.widget.allItems.forEach((element) {
log(element.stringify());
});
[log] you tapped on Brot
[log] addToBasket called
[log] ---------basketItems:
[log] Brot true
[log] ----------allItems:
[log] Bier false
[log] Senf false
[log] Lauch false
[log] Steak false
[log] Bergkäse false
[log] Mehl false
[log] Kürbis false
[log] Oliven false
[log] Pfeffer false
正如您所看到的,Brot现在驻留在basketItems中,并从allItems中删除—正如预期的那样
…但不知何故,UI在Einkaufswagen GridView中没有显示Brot。
我不知道我做错了什么,因为几个小时没有成功,我一直在解决这个问题。
在GridView周围的Flitter中似乎有很多bug,特别是在专栏中使用时——但我怀疑对于我所需要的可用性必须有一个合适的解决方案
这个怎么样
new GridView.builder(
itemBuilder: (BuildContext context, int index) {
return this.widget.basketItems[index];
},
gridDelegate: new SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 2,
),
itemCount: this.widget.basketItems.length,
shrinkWrap: true),
及
你可以使用“GridView.builder”而不是“GridView.count”。我的朋友做得很好!一个问题:为什么它会起作用?你认为以前的问题是什么。。。如何避免这样的情况,即没有预防性地抛出错误/警告?您好,Gewure,“GridView.count”是横轴上固定数量的平铺。“GridView.builder”是根据需要创建的。请参阅
new GridView.builder(
itemBuilder: (BuildContext context, int index) {
return this.widget.allItems[index];
},
gridDelegate: new SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 6,
),
itemCount: this.widget.allItems.length,
shrinkWrap: true),