Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 如何在Flatter中创建动态ListView?_Flutter_Dart - Fatal编程技术网

Flutter 如何在Flatter中创建动态ListView?

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

我试图使用传递到ListView.Builder中的TileList,但收到错误:错误:参数类型“(BuildContext,int,Items)→ 卡“无法分配给参数类型”(BuildContext,int)→ 小部件'。(参数类型不可分配)

我将_makeCard和_makeTyle定义为一个小部件,但没有成功

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),
);

你已经解决了这个问题,你能分享代码吗