参数类型“对象?”不能分配给参数类型“字符串”

Posted

技术标签:

【中文标题】参数类型“对象?”不能分配给参数类型“字符串”【英文标题】:The argument type 'Object?' can't be assigned to the parameter type 'String' 【发布时间】:2021-07-17 16:51:12 【问题描述】:

These are the errors I get

这是我的 chart.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()));
  

不知道哪里出错了

【问题讨论】:

顺便说一句,这段代码来自 udemy 课程。 :) 我也面临同样的问题。 【参考方案1】:

方法groupedTransactionValues 正在返回Object 的映射。相反,返回dynamic 的映射,它是运行时确定的类型。换行:

List<Map<String, Object>> get groupedTransactionValues 

到:

List<Map<String, dynamic>> get groupedTransactionValues 

【讨论】:

你能帮我解决这个问题吗***.com/questions/67777283/… 为我工作。错误已修复。【参考方案2】:

我有一个错误:

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

【讨论】:

【参考方案3】:
double get totalSpending 
  return groupedTransactionValues.fold(0.0, (sum, item) 
  return sum + (item['amount'] as double); 

【讨论】:

这到底是做什么的?你能解释一下吗?【参考方案4】:

将对象更改为动态:

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

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

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

【讨论】:

以上是关于参数类型“对象?”不能分配给参数类型“字符串”的主要内容,如果未能解决你的问题,请参考以下文章

错误:参数类型“对象?”不能分配给参数类型“字符串”

参数类型“字符串”不能分配给参数类型“目录”

参数类型“字符串?”不能分配给参数类型“字符串”

错误:参数类型“字符串?”不能分配给参数类型“字符串”

参数类型“对象?”不能分配给参数类型'String'最新版本

“数字”类型的参数不能分配给“数字和字符串”类型的参数