0

我想在DropdownButton我的一个屏幕上放一个。我已经遵循了几个示例,但我无法让它显示所选项目。它一直显示列表中的第一项。

String _trxnStatus = 'Listed';

DropdownButton<String>(
                hint: Text('Please choose transaction status'),
                value: _trxnStatus,
                onChanged: (value) {
                  setState(() {
                    _trxnStatus = value;
                  });
                },
                items: <String>['Listed', 'Under Contract', 'Closed'].map<DropdownMenuItem<String>>((String value) {
                  return DropdownMenuItem<String>(
                    value: value,
                    child: Text(value),
                  );
                }).toList(),
              ),

我已经通过调试器跟踪了该值。onChange工作正常并显示所选值。但是,当涉及到映射列表并DropdownMenuItem返回var value = 'Listed'.

我怎样才能让它工作?谢谢。

4

1 回答 1

2

您可能正在构建函数中初始化 _trxnStatus。您需要在构建函数之外初始化 _trxnStatus。请参阅下面的工作代码:

import 'package:flutter/material.dart';

final Color darkBlue = const Color.fromARGB(255, 18, 32, 47);

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      theme: ThemeData.dark().copyWith(scaffoldBackgroundColor: darkBlue),
      debugShowCheckedModeBanner: false,
      home: Scaffold(
        body: Center(
          child: MyWidget(),
        ),
      ),
    );
  }
}

class MyWidget extends StatefulWidget {
  @override
  _MyWidgetState createState() => _MyWidgetState();
}

class _MyWidgetState extends State<MyWidget> {
  String _trxnStatus = 'Listed';
  @override
  Widget build(BuildContext context) {
    return DropdownButton<String>(
      hint: Text('Please choose transaction status'),
      value: _trxnStatus,
      onChanged: (value) {
        setState(() {
          _trxnStatus = value;
        });
      },
      items: <String>['Listed', 'Under Contract', 'Closed']
          .map<DropdownMenuItem<String>>((String value) {
        return DropdownMenuItem<String>(
          value: value,
          child: Text(value),
        );
      }).toList(),
    );
  }
}
于 2020-12-23T22:32:33.323 回答