'error getting value, NoSuchMethodError : (function)

what this mean error:

issue's

my goals is when i'm click the button, result will be display value control flow function, this my code:

data:

var question = const [
    {
      'questionHere': 'which ur hate friend as?',
      'answer': [
        {'name': 'Dendi', 'score': 0},
        {'name': 'Yogi', 'score': 10},
        {'name': 'Vali', 'score': 7},
        {'name': 'Odir', 'score': 10},
        {'name': 'Vega', 'score': 8},
      ],
    },
    {
      'questionHere': 'What is ur fav Smoke?',
      'answer': [
        {'name': 'Marlboro', 'score': 10},
        {'name': 'Sampurna', 'score': 7},
        {'name': 'Surya', 'score': 8},
        {'name': 'Surya Pro mild', 'score': 5},
      ],
    }
  ];

main.dart

import 'package:flutter/material.dart';
import 'package:trying/widget/quiz.dart';
import 'package:trying/widget/result.dart';

void main() => runApp(MaterialApp(
      home: HomePage(),
    ));

class HomePage extends StatefulWidget {
  HomePage({Key? key}) : super(key: key);

  @override
  State<HomePage> createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {
  var _questionNumber = 0;
  var _totalScore = 0;
 

  void _questionInc(int score) {
    _totalScore += score;
    setState(() {
      _questionNumber++;
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: _questionNumber < question.length
          ? Quiz(question, _questionInc, _questionNumber)
          : Result(_totalScore),
    );
  }
}

result.dart

import 'package:flutter/material.dart';

class Result extends StatelessWidget {
  final int resultScore;
  Result(this.resultScore);

this case about score will be display, but i still get error

  String get score {
    String resultText = '';
    if (resultScore <= 10) {
      resultText = 'bego';
    } else if (resultScore < 8) {
      resultText = 'a';
    } else {
      return resultText;
    }
    throw Exception();
  }

  @override
  Widget build(BuildContext context) {
    return Center(
      child: Text(score),
    );
  }
}

this button widget

increment.dart

import 'package:flutter/material.dart';

class Inc extends StatelessWidget {
  final VoidCallback selectInc;
  final String answer;
  Inc(this.selectInc, this.answer);

  @override
  Widget build(BuildContext context) {
    return Container(
        margin: EdgeInsets.all(16),
        width: double.infinity,
        height: 20,
        child: ElevatedButton(
          onPressed: selectInc,
          child: Text(answer),
        ));
  }
}

Quis.dart

import 'package:flutter/material.dart';
import './question.dart';
import './increment.dart';

class Quiz extends StatelessWidget {
  final Function questionInc;
  final int questionIndex;
  final List<Map<String, Object>> questionData;

  Quiz(this.questionData, this.questionInc, this.questionIndex);
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Column(
        children: [
          Question(questionData[questionIndex]['questionHere'] as String),
          ...(questionData[questionIndex]["answer"]
                  as List<Map<String, Object>>)
              .map((e) => Inc(questionInc(), e["name"] as String))
              .toList()
        ],
      ),
    );
  }
}

so how to fixed this problem, how to know even value has return?



Solution 1:[1]

In your class, Quiz. Make questionInc as VoidCallback and also when calling Inc pass it as reference.

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Tyler2P