颤振Dart-NoSuchMethodError:方法“ map”在null上被调用

问题描述

在构建时收到错误:

NoSuchMethodError:方法“ map”在null上被调用。 接收者:null 尝试致电: 地图(关闭:Transaction =>容器)

════════ Exception caught by widgets library ═══════════════════════════════════════════════════════
The following NoSuchMethodError was thrown building TransactionList(dirty):
The method 'map' was called on null.
Receiver: null
Tried calling: map<Container>(Closure: (Transaction) => Container)

The relevant error-causing widget was: 
  TransactionList file:///C:/.../AndroidStudioProjects/money_tracker/lib/Widgets/user_transactions.dart:44:9
When the exception was thrown,this was the stack: 
#0      Object.noSuchMethod (dart:core-patch/object_patch.dart:53:5)
#1      TransactionList.build (package:money_tracker/models/transaction_list.dart:14:30)
#2      StatelessElement.build (package:flutter/src/widgets/framework.dart:4576:28)
#3      ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4502:15)
#4      Element.rebuild (package:flutter/src/widgets/framework.dart:4218:5)
...
════════════════════════════════════════════════════════════════════════════════════════════════════

我相信该错误与user_transactions.dart文件中的TransactionList(_userTransactions)行有关,但不确定如何解决。

代码:

来自main.dart:

import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:gradient_app_bar/gradient_app_bar.dart';
import 'package:money_tracker/Widgets/user_transactions.dart';

void main() {
  runApp(Home());
}

class Home extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: GradientAppBar(
          centerTitle: true,gradient: LinearGradient(
            colors: [Colors.green,Color(0xff01655e)],),title: Text(
            'Money Tracker',style: TextStyle(color: Colors.white),//          backgroundColorStart: Color(0xff01655e),actions: <Widget>[
            Icon(Icons.add),],body: Column(
          mainAxisAlignment: MainAxisAlignment.start,children: <Widget>[
            Container(
              width: double.infinity,margin: EdgeInsets.all(15.0),child: Card(
                //Card is a freestyle container
                color: Color(0xff01655e),child: Text('Chart'),elevation: 5.0,UserTransactions(),);
  }
}

来自user_transactions.dart:

import 'package:flutter/material.dart';
import 'package:money_tracker/models/transaction_list.dart';
import 'new_transaction.dart';
import '../models/transaction.dart';

class UserTransactions extends StatefulWidget {
  @override
  _UserTransactionsState createState() => _UserTransactionsState();
}

class _UserTransactionsState extends State<UserTransactions> {
  final List<Transaction> _userTransactions = [
    Transaction(
      id: '1',title: 'course',amount: 11.99,dateTime: DateTime.now(),Transaction(
      id: '2',title: 'milk',amount: 2.87,];

  void _addNewTransaction(String txTitle,double amount) {
    final newTx = Transaction(
        title: txTitle,amount: amount,id: DateTime.now().toString());

    setState(() {
      _userTransactions.add(newTx);
    });
  }

  @override
  Widget build(BuildContext context) {
    return Column(
      children: <Widget>[
        NewTransaction(_addNewTransaction),TransactionList(_userTransactions),);
  }
}

从transaction_list.dart:

import 'package:flutter/material.dart';
import 'transaction.dart';
import 'package:intl/intl.dart';

class TransactionList extends StatelessWidget {
  TransactionList(List<Transaction> userTransactions,{this.transactions});
  final List<Transaction> transactions;

  @override
  Widget build(BuildContext context) {
    return Column(
      children: transactions.map((tx) {
        return Container(
          margin: EdgeInsets.fromLTRB(20.0,10.0,20.0,10.0),padding: EdgeInsets.all(0.5),decoration: BoxDecoration(
            border: Border.all(color: Colors.grey,width: 2.0),borderRadius: BorderRadius.all(
              Radius.circular(15.0),child: Row(
            mainAxisAlignment: MainAxisAlignment.spaceEvenly,children: <Widget>[
              Container(
                child: Text(
                  '\$${tx.amount}',style: TextStyle(
                    fontWeight: FontWeight.bold,fontSize: 20.0,Column(
                crossAxisAlignment: CrossAxisAlignment.start,children: <Widget>[
                  Text(tx.title,style: TextStyle(
                          fontWeight: FontWeight.bold,fontSize: 18.0)),Text(
                    DateFormat().format(tx.dateTime),style: TextStyle(color: Colors.grey),)
                ],);
      }).toList(),);
  }
}

来自transaction.dart:

class Transaction {
  Transaction(
      {@required this.id,@required this.title,@required this.amount,@required this.dateTime});

  final String id;
  final String title;
  final double amount;
  final DateTime dateTime;
}

来自new_transaction.dart:

class NewTransaction extends StatelessWidget {
  final Function addTx;
  final title = TextEditingController();
  final amount = TextEditingController();

  NewTransaction(addNewTransaction,{this.addTx});
  @override
  Widget build(BuildContext context) {
    return Card(
      elevation: 5.0,child: Container(
        width: double.infinity,child: Column(
          children: <Widget>[
            Text(
              'Add New Transaction',style: TextStyle(
                fontWeight: FontWeight.bold,TextField(
              decoration: InputDecoration(labelText: 'Title'),controller: title,//              onChanged: (value) {
//                title = value;
//              },TextField(
              decoration: InputDecoration(labelText: 'Amount'),controller: amount,//              onChanged: (value) {
//                amount = value;
//              },Padding(
              padding: EdgeInsets.all(8.0),child: FlatButton(
                padding: EdgeInsets.all(10.0),color: Colors.green,onPressed: () {
                  addTx(
                    title.text,double.parse(amount.text),);
                },child: Text(
                  'Add',style: TextStyle(
                    color: Colors.white,fontWeight: FontWeight.bold,)
          ],);
  }
}

解决方法

该错误表示transactionsnull。您没有将任何内容传递给该参数。

您的TransactionList构造函数有2个参数,但是仅使用了一个。更改为

TransactionList(List<Transaction> userTransactions,{this.transactions});

TransactionList(this.transactions);

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...