当我更改下拉按钮时,它会影响到下一个按钮

问题描述 投票:0回答:1

[当我向列表中添加新列表元素并尝试更改成绩时。这件事没有我想要的那样有效。它影响下一项,可能是算法错误。希望你能理解这个问题。我试图为每个dropdownButton添加一个变量,但我无法弄清楚。我应该用什么来解决这个问题?

import 'package:flutter/material.dart';

class GecmisDersler extends StatefulWidget {
  @override
  State<StatefulWidget> createState() {
    // TODO: implement createState
    return _GecmisDersler();
  }
}

double _width = 300;
double _height = 50;
BorderRadiusGeometry _borderRadius = BorderRadius.circular(55);

class Dersler {
  double width;
  double height;
  AnimatedContainer animatedContainer;

  Dersler(double width, double height, AnimatedContainer animatedContainer) {
    this.width = width;
    this.height = height;
    this.animatedContainer = animatedContainer;
  }
}

class Notlar {
  int id;
  String name;

  Notlar(this.id, this.name);

  static List<Notlar> getCompanies() {
    return <Notlar>[
      Notlar(1, 'AA'),
      Notlar(2, 'BA'),
      Notlar(3, 'BB'),
      Notlar(4, 'CB'),
      Notlar(5, 'CC'),
      Notlar(6, 'DC'),
      Notlar(7, 'DD'),
      Notlar(8, 'FD'),
      Notlar(9, 'FF'),
      Notlar(10, 'F0'),
    ];
  }
}

List<Notlar> _companies = Notlar.getCompanies();
List<DropdownMenuItem<Notlar>> _dropdownMenuItems;
Notlar _selectedCompany;
Notlar s;

class _GecmisDersler extends State<GecmisDersler> {
  void initState() {
    _dropdownMenuItems = buildDropdownMenuItems(_companies);
    _selectedCompany = _dropdownMenuItems[0].value;
    super.initState();
  }

  Notlar selectedCompany;

  List<DropdownMenuItem<Notlar>> buildDropdownMenuItems(List companies) {
    List<DropdownMenuItem<Notlar>> items = List();
    for (Notlar company in companies) {
      items.add(
        DropdownMenuItem(
          value: company,
          child: Text(company.name),
        ),
      );
    }
    return items;
  }

  var currentSelectedValue;
  static const deviceTypes = ["Mac", "Windows", "Mobile"];

  Widget typeFieldWidget() {
    return Container(
      padding: EdgeInsets.symmetric(horizontal: 20),
      child: FormField<String>(
        builder: (FormFieldState<String> state) {
          return InputDecorator(
            decoration: InputDecoration(
                border: OutlineInputBorder(
                    borderRadius: BorderRadius.circular(5.0))),
            child: DropdownButtonHideUnderline(
              child: DropdownButton<String>(
                hint: Text("Select Device"),
                value: currentSelectedValue,
                isDense: true,
                onChanged: (newValue) {
                  setState(() {
                    currentSelectedValue = newValue;
                  });
                  print(currentSelectedValue);
                },
                items: deviceTypes.map((String value) {
                  return DropdownMenuItem<String>(
                    value: value,
                    child: Text(value),
                  );
                }).toList(),
              ),
            ),
          );
        },
      ),
    );
  }

  List<ExpansionTile> list = [];
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Uni-Grade'),
        actions: <Widget>[
          Padding(
            padding: EdgeInsets.only(right: 30),
            child: GestureDetector(
              onTap: () {
                setState(() {
                  list.add(
                    ExpansionTile(
                      title: Text('1. Dönem'),
                      children: <Widget>[
                        Row(
                          mainAxisAlignment: MainAxisAlignment.start,
                          children: <Widget>[
                            SizedBox(
                              width: 200,
                              child: TextField(
                                decoration: InputDecoration(
                                    border: OutlineInputBorder(),
                                    labelText: ' Ders Adı'),
                              ),
                            ),
                            SizedBox(
                              width: 65,
                              child: TextField(
                                keyboardType: TextInputType.number,
                                decoration: InputDecoration(
                                    border: OutlineInputBorder(),
                                    labelText: 'ECTS'),
                              ),
                            ),
                            SizedBox(
                              height: 30,
                              width: 80,
                              child: new DropdownButton(
                                value: _selectedCompany,
                                items: _dropdownMenuItems,
                                onChanged: (Notlar selectedCompany) {
                                  setState(() {
                                    _selectedCompany = selectedCompany;
                                  });
                                },
                              ),
                            )
                          ],
                        ),
                      ],
                    ),
                  );
                });
              },
              child: Icon(
                Icons.add,
                size: 30.00,
              ),
            ),
          ),
        ],
      ),
      body: new ListView.builder(
          itemCount: list.length,
          itemBuilder: (context, int index) {
            return list[index];
          }),
    );
  }
}

Here is the problem

flutter dropdownbutton
1个回答
0
投票
List<Notlar> _selectedCompanys = [];

GestureDetector轻按:

onTap: () {
  setState(() {

    // list.add(...);

    _selectedCompanys.add(_dropdownMenuItems[0].value);
  });
},

ListView:

// ListView.builder(
// itemCount: list.length,
// itemBuilder: (context, int index) {
//   return list[index];
// }),

ListView.builder(
itemCount: _selectedCompanys.length,
itemBuilder: (context, int index) {
  return ExpansionTile(
    title: Text('1. Dönem'),
    children: <Widget>[
      Row(
        mainAxisAlignment: MainAxisAlignment.start,
        children: <Widget>[

          // ...

          SizedBox(
            height: 30,
            width: 80,
            child: DropdownButton(
              value: _selectedCompanys[index],
              items: _dropdownMenuItems,
              onChanged: (value) {
                setState(() {
                  _selectedCompanys[index] = value;
                });
              },
            ),
          )
        ],
      ),
    ],
  );
}),
© www.soinside.com 2019 - 2024. All rights reserved.