命名参数“value”未定义?

问题描述 投票:0回答:1
import 'package:flutter/material.dart';
import 'package:flutter_tts/flutter_tts.dart';
import 'package:flutter_dropdown/flutter_dropdown.dart';

class Language {
  final String code;
  final String name;

  Language({required this.code, required this.name});
}

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Text-to-Speech Example',
      home: TextToSpeechScreen(),
    );
  }
}

class TextToSpeechScreen extends StatefulWidget {
  @override
  _TextToSpeechScreenState createState() => _TextToSpeechScreenState();
}

class _TextToSpeechScreenState extends State<TextToSpeechScreen> {
  final FlutterTts flutterTts = FlutterTts();
  Language selectedLanguage = Language(code: 'en-US', name: 'English (United States)'); // Default language is English
  TextEditingController textEditingController = TextEditingController();

  // Define a list of languages
  List<Language> languages = [
    Language(code: 'en-US', name: 'English (United States)'),
    Language(code: 'es-ES', name: 'Spanish (Spain)'),
    Language(code: 'fr-FR', name: 'French (France)'),
    Language(code: 'de-DE', name: 'German (Germany)'),
    // Add more languages as needed
  ];

  // Function to speak the entered text
  Future<void> speakText() async {
    await flutterTts.setLanguage(selectedLanguage.code);
    await flutterTts.setPitch(1.0); // Adjust the pitch if needed
    await flutterTts.speak(textEditingController.text);
  }

  @override
  void dispose() {
    textEditingController.dispose();
    flutterTts.stop();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Text-to-Speech Example'),
      ),
      body: Center(
        child: Padding(
          padding: const EdgeInsets.all(16.0),
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              // Language selection dropdown
              DropDown<Language>(
                items: languages,
                hint: Text('Select Language'),
                onChanged: (Language? value) {
                  setState(() {
                    selectedLanguage = value!;
                  });
                },
                value: selectedLanguage,
                // Customize how the dropdown items are displayed
                itemAsString: (Language item) => item.name,
              ),
              SizedBox(height: 20.0),
              // Text input field
              TextField(
                controller: textEditingController,
                decoration: InputDecoration(
                  hintText: 'Enter text to speak',
                  border: OutlineInputBorder(),
                ),
              ),
              SizedBox(height: 20.0),
              // Speak button
              ElevatedButton(
                onPressed: speakText,
                child: Text('Speak Text'),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

我这里有问题

          DropDown<Language>(
            items: languages,
            hint: Text('Select Language'),
            onChanged: (Language? value) {
              setState(() {
                selectedLanguage = value!;
              });
            },
            value: selectedLanguage,
            // Customize how the dropdown items are displayed
            itemAsString: (Language item) => item.name,
          ),

特别是在本节值中,itemAsString ?

            value: selectedLanguage,
            itemAsString: (Language item) => item.name,

我收到此错误?

未定义命名参数“value”。 尝试将名称更正为现有命名参数的名称,或使用名称“value”定义命名参数

未定义命名参数“itemAsString”。 尝试将名称更正为现有命名参数的名称,或使用名称“itemAsString”定义命名参数

flutter dart flutter-dependencies dart-pub
1个回答
0
投票

您遇到的错误“未定义命名参数‘值’”是因为您使用的

DropDown
小部件在其
value
回调中没有名为
onChanged
的命名参数。相反,它使用
selectedValue
设置最初选择的值,并使用
onChanged
定义选择项目时的回调。

要解决此问题,您应该按如下方式更新代码:

在您的

DropDown
小部件中替换此行:

onChanged: (Language? value) {

与:

onChanged: (Language? selectedLanguage) {

因此,您的

DropDown
小部件代码应如下所示:

DropDown<Language>(
  items: languages,
  hint: Text('Select Language'),
  onChanged: (Language? selectedLanguage) {
    setState(() {
      this.selectedLanguage = selectedLanguage!;
    });
  },
  selectedValue: selectedLanguage,
  displayItem: (Language item) => item.name,
)

通过进行此更改,您将使用

selectedLanguage
变量作为选定值,这与您在
selectedValue
小部件中设置的
DropDown
属性一致。

© www.soinside.com 2019 - 2024. All rights reserved.