Flutter 如何在Flatter中创建动态ListView?
我试图使用传递到ListView.Builder中的TileList,但收到错误:错误:参数类型“(BuildContext,int,Items)→ 卡“无法分配给参数类型”(BuildContext,int)→ 小部件'。(参数类型不可分配) 我将_makeCard和_makeTyle定义为一个小部件,但没有成功Flutter 如何在Flatter中创建动态ListView?,flutter,dart,Flutter,Dart,我试图使用传递到ListView.Builder中的TileList,但收到错误:错误:参数类型“(BuildContext,int,Items)→ 卡“无法分配给参数类型”(BuildContext,int)→ 小部件'。(参数类型不可分配) 我将_makeCard和_makeTyle定义为一个小部件,但没有成功 import 'package:flutter/material.dart'; import 'package:flutter/painting.dart'; import 'pac
import 'package:flutter/material.dart';
import 'package:flutter/painting.dart';
import 'package:app_settings/app_settings.dart';
import 'package:coffee/models/settings_items.dart';
class Selections extends StatefulWidget {
@override
State<Selections> createState() => _Selections();
final List<String> menu;
Selections(this.menu);
}
class _Selections extends State<Selections> {
List items;
@override
void initState() {
items = getItems();
super.initState();
}
Card _makeCard(BuildContext context, int index, Items item) {
return Card(
elevation: 8.0,
margin: new EdgeInsets.symmetric(horizontal: 10.0, vertical: 6.0),
child: Container(
decoration: BoxDecoration(color: Color.fromRGBO(64, 75, 96, .0)),
child: _buildMenu(context, index, item),
),
);
}
ListTile _buildMenu(BuildContext context, int index, Items item) {
return ListTile(
contentPadding: EdgeInsets.symmetric(horizontal: 20.0, vertical: 10.0),
leading: Container(
padding: EdgeInsets.only(right: 12.0),
decoration: new BoxDecoration(
border: new Border(
right: new BorderSide(width: 1.0, color: Colors.blue),
),
),
child: Icon(
Icons.location_on,
color: Colors.redAccent,
),
),
title: Text(
item.title,
style: TextStyle(color: Colors.blue, fontWeight: FontWeight.bold),
),
onTap: () {
AppSettings.openLocationSettings();
},
);
}
@override
Widget build(BuildContext context) {
return Container(
child: ListView.builder(
itemBuilder: _makeCard,
itemCount: 2,
scrollDirection: Axis.vertical,
shrinkWrap: true),
);
}
List getItems() {
return [
Items(
title: "Turn on Location Services!"
),
Items(
title: "My Profile"
),
];
}
}
导入“包装:颤振/材料.省道”;
进口“包装:颤振/喷漆.省道”;
导入“包:应用程序设置/应用程序设置.dart”;
导入“包装:咖啡/模型/设置_items.dart”;
类选择扩展了StatefulWidget{
@凌驾
State createState()=>_Selections();
最终列表菜单;
选择(此菜单);
}
类_选择扩展状态{
清单项目;
@凌驾
void initState(){
items=getItems();
super.initState();
}
Card\u makeCard(BuildContext上下文、int索引、Items){
回程卡(
标高:8.0,
边距:新边集。对称(水平:10.0,垂直:6.0),
子:容器(
装饰:框装饰(颜色:color.fromRGBO(64,75,96,0)),
子项:_buildMenu(上下文、索引、项),
),
);
}
ListTile\u buildMenu(BuildContext上下文、int索引、Items){
返回列表块(
内容填充:边集。对称(水平:20.0,垂直:10.0),
领先:集装箱(
填充:仅限边缘设置(右侧:12.0),
装饰:新盒子装饰(
边界:新边界(
右:新边框(宽度:1.0,颜色:Colors.blue),
),
),
子:图标(
Icons.location_on,
颜色:Colors.redAccent,
),
),
标题:正文(
项目名称,
样式:TextStyle(颜色:Colors.blue,fontwweight:fontwweight.bold),
),
onTap:(){
AppSettings.openLocationSettings();
},
);
}
@凌驾
小部件构建(构建上下文){
返回容器(
子项:ListView.builder(
itemBuilder:\u makeCard,
物品计数:2,
滚动方向:轴垂直,
收缩膜:正确),
);
}
列出getItems(){
返回[
项目(
标题:“打开定位服务!”
),
项目(
标题:“我的个人资料”
),
];
}
}
将显示两个ListTile:一个显示文本“打开位置服务”,另一个显示文本“我的个人资料”。删除
\u makeCard
中的items参数,并在函数中检索它:
Card _makeCard(BuildContext context, int index) {
Items item = items[index];
return Card(
elevation: 8.0,
margin: new EdgeInsets.symmetric(horizontal: 10.0, vertical: 6.0),
child: Container(
decoration: BoxDecoration(color: Color.fromRGBO(64, 75, 96, .0)),
child: _buildMenu(context, index, item),
),
);
}
或
在build()
中,将a用于builder
参数,以便函数参数匹配:
return Container(
child: ListView.builder(
itemBuilder: (context, index) => _makeCard(context, index, items[index]),
itemCount: 2,
scrollDirection: Axis.vertical,
shrinkWrap: true),
);
你已经解决了这个问题,你能分享代码吗