为什么 DropDownButton 在 Flutter 中不起作用?

Why DropDownButton doesn't work in Flutter?

提问人:Hana.HD 提问时间:11/15/2023 更新时间:11/15/2023 访问量:38

问:

我想在 Flutter 中制作一个简单的下拉按钮。我检查了所有内容,观看了教程,只是得到一个我根本不理解的错误.我真的不知道该怎么办......我在这里上传我的错误图像。 我是 Flutter 的新手。请帮帮我。谢谢。

Errors...

这是我的全部代码:

import "package:flutter/material.dart";

void main() => runApp(const MyApp());

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: MyPage(),
    );
  }
}

class MyPage extends StatefulWidget {
  MyPage({super.key});

  @override
  State<MyPage> createState() => _Example();
}

class _Example extends State<MyPage> {
  List<String> items = ['small', 'medium', 'large', 'extra-large'];
  String? selectedItem = 'samll';

  @override
  Widget build(BuildContext context) {
    return Scaffold(
        appBar: AppBar(
          title: const Text('HDBOOKS'),
        ),
        body: DropdownButton(
          value: selectedItem,
          items: items
              .map((e) => DropdownMenuItem(value: e, child: Text(e)))
              .toList(),
          onChanged: (item) => setState(() {
            selectedItem = item!;
          }),
        ));
  }
}

这是产品尺寸的下拉按钮,我只是希望不要出现这些我什至不理解的错误...... :(

Flutter Dart 用户界面 菜单下拉 按钮

评论


答:

1赞 Munsif Ali 11/15/2023 #1

遇到的错误表明提供给 DropdownButton 的值与项列表中的值不匹配。在您的例子中,问题是 selectedItem 的初始值中的拼写错误。它设置为 而不是 。samllsmall

像这样更正值

String? selectedItem = 'small';
1赞 Andreas Hadjimamas 11/15/2023 #2

您有一个与可用选项不匹配的拼写错误。 下面是现在工作的代码,并进行了一些改进String? selectedItem = **'samll'**;

import "package:flutter/material.dart";

void main() => runApp(const MyApp());

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: MyPage(),
    );
  }
}

class MyPage extends StatefulWidget {
  MyPage({super.key});

  @override
  State<MyPage> createState() => _Example();
}

class _Example extends State<MyPage> {
  List<String> items = ['small', 'medium', 'large', 'extra-large'];
  String? selectedItem = 'small';

  @override
  Widget build(BuildContext context) {
    return Scaffold(
        appBar: AppBar(
          title: const Text('HDBOOKS'),
        ),
        body: DropdownButton<String>(
          value: selectedItem,
          items: items.map<DropdownMenuItem<String>>((String value) {
            return DropdownMenuItem<String>(
              value: value,
              child: Text(
                value,
                style: TextStyle(fontSize: 30),
              ),
            );
          }).toList(),
          onChanged: (String? newValue) => setState(() {
            selectedItem = newValue!;
          }),
        ));
  }
}