flutter 无法将参数类型“Object?”赋给参数类型“String”

lf3rwulv  于 2022-12-24  发布在  Flutter
关注(0)|答案(6)|浏览(155)

These are the errors I get

这是我的图表.dart文件

import 'package:flutter/material.dart';
import 'package:udemy_expenses_app/widgets/chart_bar.dart';
import '../models/tanscations.dart';
import 'package:intl/intl.dart';
import './chart_bar.dart';

class Chart extends StatelessWidget {
  final List<Transaction> recentTransactions;
  Chart(this.recentTransactions);
  List<Map<String, Object>> get groupedTransactionValues {
  return List.generate(7, (index) {
   final weekDay = DateTime.now().subtract(
    Duration(
      days: index,
    ),
  );
  double totalSum = 0.0;
  for (var i = 0; i < recentTransactions.length; i++) {
    if (recentTransactions[i].date.day == weekDay.day &&
        recentTransactions[i].date.month == weekDay.month &&
        recentTransactions[i].date.year == weekDay.year) {
      totalSum += recentTransactions[i].amount;
    }
  }

  return {
    'day': DateFormat.E().format(weekDay).substring(0, 1),
    'amount': totalSum,
  };
});
}

double get totalSpending {
  return groupedTransactionValues.fold(0.0, (sum, item) {
  return sum + item['amount']; 
  //  Error: A value of type 'Object?' can't be assigned to a variable of type 'num'.
 });
}

@override
Widget build(BuildContext context) {
  return Card(
    elevation: 6,
    margin: EdgeInsets.all(20),
    child: Row(
        children: groupedTransactionValues.map((data) {
      return ChartBar(
        data['day'],
        // Error: The argument type 'Object?' can't be assigned to the parameter type 'String'.
        data['amount'],
        // Error: The argument type 'Object?' can't be assigned to the parameter type 'String'.
        (data['amount'] as double) / totalSpending,
      );
    }).toList()));
  }
}

我不知道我哪里做错了

yrwegjxp

yrwegjxp1#

方法groupedTransactionValues返回Object的Map。相反,返回dynamic的Map,这是运行时确定的类型。更改行:

List<Map<String, Object>> get groupedTransactionValues {

致:

List<Map<String, dynamic>> get groupedTransactionValues {
pinkon5k

pinkon5k2#

在以下位置将对象更改为动态:

(List<Map<String, Object>> get groupedTransactionValues { )

如果错误未解决,请尝试添加:

data['day'] as String,
 data['amount'] as double,
uidvcgyl

uidvcgyl3#

我有一个错误:

The argument type 'Object' can't be assigned to the parameter type 'Error'.

在本例中:

try {
  ...
} catch (e) {
  yield OnePageLoadFailed(error: e);
}

它在catch中给出了一个错误,因为它的类型是**Object,而我的OnePageLoadFailed需要的类型是Error**,所以我把它保留为:

} on Error catch (e) {
  yield OnePageLoadFailed(error: e);
}

我希望你能帮助解决别人的问题,以及我,特别是在Null Safety条目。:D

zy1mlcev

zy1mlcev4#

double get totalSpending {
  return groupedTransactionValues.fold(0.0, (sum, item) {
  return sum + (item['amount'] as double); 
}
tktrz96b

tktrz96b5#

参数类型“Object?”不能赋给参数类型“String”。因此,必须如下所示对其进行更改,以便将其分别视为String和double。

return sum + item['amount'];

使用

return sum + (item['amount'] as double);

同样地,代替

data['day']

使用

(data['day'] as String)
vi4fp9gy

vi4fp9gy6#

尝试转换

List<Map<String, Object>> get groupedTransactionValues {

List<Map<String, dynamic>> get groupedTransactionValues {

那么

double get totalSpending {
return groupedTransactionValues.fold(0.0, (sum, item) {
  return sum + double.parse(item['amount']);
});

}
将项['amount']解析为双精度
对我来说非常有效!

相关问题