颤振 addAll 没有为 Iterable 定义
Posted
技术标签:
【中文标题】颤振 addAll 没有为 Iterable 定义【英文标题】:flutter addAll isn't defined for Iterable 【发布时间】:2022-01-21 00:04:37 【问题描述】:对于第 22 行的以下问题,我需要您的帮助。 Flutter 说,“addAll 没有为 Iterable 定义”。我需要更改代码中的哪些内容,或者您需要其他信息吗?
import 'package:flutter/material.dart';
import 'package:MyApp/jsonApi/dataModels/dataModelPlaces.dart';
import 'package:MyApp/jsonApi/parsers/repositoryPlaces.dart';
class ShareAppScreen extends StatefulWidget
@override
_ShareAppScreenState createState() => _ShareAppScreenState();
class _ShareAppScreenState extends State<ShareAppScreen>
//List<DataModelPlaces> _places = <DataModelPlaces>[];
Iterable<DataModelPlaces> _places = <DataModelPlaces>[];
Iterable<DataModelPlaces> _placesDisplay = <DataModelPlaces>[];
bool _isPlacesLoading = false;
@override
void initState()
super.initState();
fetchPlaces().then((pvalue)
setState(()
_isPlacesLoading = false;
_places.addAll(pvalue); //<- here I have a problem that addAll isn't defined for Iterable
_placesDisplay = _places;
print('User display pin Records: $pvalue.data!.length');
var i=0;
while (i < pvalue.data!.length)
print('User display Lat of $i: $pvalue.data![i].attributes!.latitude');
print('User display Long of $i: $pvalue.data![i].attributes!.latitude');
i++;
);
);
List stocksList = [
CompanyStocks(name: "Intel Corp", price: 56.96),
CompanyStocks(name: "HP Inc", price: 32.43),
CompanyStocks(name: "Apple Inc", price: 133.98),
CompanyStocks(name: "Microsoft Corporation", price: 265.51)
];
@override
Widget build(BuildContext context)
return Scaffold(
appBar: AppBar(
title: Text('Users List $_places.length'),
),
body: SafeArea(
child: Container(
child: ListView.builder(
itemCount: stocksList.length,
itemBuilder: (context, index)
return Card(
child: Padding(
padding: EdgeInsets.all(10),
child: ListTile(
title: Text(
stocksList[index].name,
style: TextStyle(
fontSize: 20,
),
),
leading: CircleAvatar(
child: Text(
stocksList[index].name[0],
style: TextStyle(fontSize: 15, fontWeight: FontWeight.bold),
),
),
trailing: Text("\$ $stocksList[index].price"),
),
),
);
,
),
),
),
);
class CompanyStocks
String name;
double price;
CompanyStocks(required this.name,required this.price);
最后,我需要一个 DataModelPlaces 的变量“_places”和“_placesDisplay”,我可以使用它们来代替正在工作但不是 _places / _placesDisplay 的列表“stocksList”
非常感谢
罗马
【问题讨论】:
Iterable 没有addAll
方法。见api.dart.dev/stable/dart-core/Iterable-class.html。请改用List
。
【参考方案1】:
Iterable 没有.addAll
。 您需要先将其转换为List
,以便您可以向其中添加所有元素,例如:
更新:我的错。 toList()
将返回一个新列表!您应该尝试以下替代方法
// This wrong since it will return a new list (wrong)
// _places.toList().addAll(pvalue)
或者,您可以将定义更改为 List
而不是 Iterable
:
来自:
Iterable<DataModelPlaces> _places = <DataModelPlaces>[];
Iterable<DataModelPlaces> _placesDisplay = <DataModelPlaces>[];
收件人:
List<DataModelPlaces> _places = <DataModelPlaces>[];
List<DataModelPlaces> _placesDisplay = <DataModelPlaces>[];
更新:
如 cmets 中所述,您要确保 fetchPlaces
返回 Iterable
以便使用 _places.addAll(pvalue)
否则,如果它是单个对象,请使用 _places.add(pvaule)
。
【讨论】:
我已经尝试过了,但后来出现错误“无法将参数类型 'DataModelPlaces' 分配给 'Iterable_places.addAll(pvalue)
,请确保pvalue
(又名fetchPlaces
)实际上给你一个Iterable 或一个List,但不是DataModelPlaces
的单个值。如果它是单个值,您可以简单地使用.add
而不是.addAll
。
我已经尝试了你的建议。可迭代toList()
正在生成一个新列表。执行我上面提到的替代方法(即将_places
和_placesDisplay
的Iterable<DataModelPlaces>
更改为List<DataModelPlaces>
)。然后可以去掉toList()
,直接在_places
后面加上pvalue
比如_places.add(pvalue)
。
我已经更新了我的答案和我的混乱。以上是关于颤振 addAll 没有为 Iterable 定义的主要内容,如果未能解决你的问题,请参考以下文章