【问题标题】:Closure call with mismatched arguments: function '_MyAppState.build.<anonymous closure>' When presing a button参数不匹配的闭包调用:函数'_ AppState.build.<匿名闭包>' 当按下按钮时
【发布时间】:2021-08-22 19:44:48
【问题描述】:

我很新,我正在通过一个较旧的教程自己工作。但我有点卡在自动取款机上。

当我将 .toString() 添加到

Frage(
      fragen[frageIndex]['frageText'] as String
    ),
    ...(fragen[frageIndex]['antwort'] as List<Map<String, Object>>).map((antwort) {
      return Antwort( () => antwortFrage(antwort['summe']), antwort['text'].toString());
    }).toList()

在 Quiz.dart 中,当我单击应用程序中的按钮时出现以下错误:

Closure call with mismatched arguments: function '_MyAppState.build.<anonymous closure>'
Receiver: Closure: () => (int) => dynamic
Tried calling: _MyAppState.build.<anonymous closure>(10)
Found: _MyAppState.build.<anonymous closure>() => (int) => dynamic

如果我将其删除,则会发生以下错误:

error: The argument type 'Object?' can't be assigned to the parameter type 'String'. (argument_type_not_assignable at [flutter_complete_guide] lib\quiz.dart:26)

这里是完整的文件:

Main.dart

import 'package:flutter/material.dart';

import 'fragen.dart';
import 'antworten.dart';
import 'quiz.dart';
import 'ergebnis.dart';

// void main() {
//   runApp(MyApp());
// }
void main() => runApp(MyApp());

class MyApp extends StatefulWidget {
  @override
  State<StatefulWidget> createState() {
    return _MyAppState();
  }
}

class _MyAppState extends State<MyApp> {
  final _fragen = const [
    {
      'frageText': 'Was ist deine Lieblingsfarbe?',
      'antwort': [
        {'text': 'Schwarz', 'summe': 10},
        {'text': 'Rot', 'summe': 5},
        {'text': 'Blau', 'summe': 3},
        {'text': 'Silber', 'summe': 1},
      ],
    },
    {
      'frageText': 'Was ist dein Lieblingstier ?',
      'antwort': [
        {'text': 'Hund', 'summe': 5},
        {'text': 'Katze', 'summe': 5},
        {'text': 'Ente', 'summe': 1},
        {'text': 'Qualle', 'summe': 10},
      ],
    },
    {
      'frageText': 'Was ist dein Lieblingsessen?',
      'antwort': [
        {'text': 'Nudeln', 'summe': 3},
        {'text': 'Kartoffeln', 'summe': 5},
        {'text': 'Fleisch', 'summe': 10},
        {'text': 'Gemüse', 'summe': 1},
      ],
    },
  ];
  var _frageIndex = 0;
  var _totalSumme = 0;

   _antwortFrage(int summe) {

    _totalSumme += summe;

    setState(() {
      _frageIndex = _frageIndex + 1;
    });
    if (_frageIndex < _fragen.length) {
      print('yep');
    } else
      print('nope');
  }

  @override
  build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Überschrift'),
        ),
        body: _frageIndex < _fragen.length
            ? Quiz(
                antwortFrage: ()=> _antwortFrage,
                frageIndex: _frageIndex,
                fragen: _fragen,
              )
            : Ergebnis(_totalSumme),
      ),
    );
  }
}

ergebnis.dart

import 'package:flutter/material.dart';

class Ergebnis extends StatelessWidget {
  final int ergebnisSumme;

  Ergebnis(this.ergebnisSumme);
  @override
  Widget build(BuildContext context) {
    return Center(
      child: Text(
        'Keine Fragen mehr ;)',
        style: TextStyle(fontSize: 28.0, color: Colors.green),
      ),
    );
  }
}

fragen.dart

import 'package:flutter/material.dart';

class Frage extends StatelessWidget {
  final String frageText;

  Frage(this.frageText);

  @override
  Widget build(BuildContext context) {
    return Container(
      width: double.infinity,
      margin: EdgeInsets.all(10.0),
      child: Text(
        frageText,
        style: TextStyle(
          fontSize: 28.0,
        ),
        textAlign: TextAlign.center,
      ),
    );
  }
}

antworten.dart

import 'package:flutter/material.dart';

class Antwort extends StatelessWidget {
  final Function()? auswahlVerarbeitung;
  final String antwortText;

  Antwort(this.auswahlVerarbeitung, this.antwortText);

  @override
  Widget build(BuildContext context) {
    return Container(
      width: double.infinity,
      child: ElevatedButton(
        style: ElevatedButton.styleFrom(
          primary: Colors.blue[300],
          onPrimary: Colors.white,
        ),
        child: Text(antwortText),
        onPressed: auswahlVerarbeitung,
      ),
    );
  }
}

quiz.dart

import 'package:flutter/material.dart';
import './fragen.dart';
import './antworten.dart';



class Quiz extends StatelessWidget {
  final List<Map<String, Object>> fragen;
  final int frageIndex;
  final Function antwortFrage;

  Quiz({
    required this.fragen,
    required this.antwortFrage,
    required this.frageIndex,
  });

  @override
  Widget build(BuildContext context) {
    return Column(
      children: [
        Frage(
          fragen[frageIndex]['frageText'] as String
        ),
        ...(fragen[frageIndex]['antwort'] as List<Map<String, Object>>).map((antwort) {
          return Antwort( () => antwortFrage(antwort['summe']), antwort['text']);
        }).toList()
      ],
    );
  }
}

提前致谢

【问题讨论】:

    标签: flutter android-studio dart


    【解决方案1】:

    发现问题,是 Null 异常处理程序。

    通过在 yaml 文件中将 Flutter sdk 版本降级为 2.11.0 或删除 antworten.dart 中的 parentensies 来关闭它

    class Antwort extends StatelessWidget {
      final Function auswahlVerarbeitung;
      final String antwortText;
    

    【讨论】:

      猜你喜欢
      • 2021-12-09
      • 2021-12-10
      • 2021-09-29
      • 2022-01-14
      • 2022-12-21
      • 2013-12-01
      • 1970-01-01
      • 2022-08-13
      • 1970-01-01
      相关资源
      最近更新 更多