Flutter searchable_dropdown Ui 在单击按钮时不会更新,并且在按钮的 onPressed() 内调用 setState()

时间:2020-12-21 10:51:24

标签: flutter dart dropdown

我正在创建 2 个可搜索下拉列表并在单击 IconButton 时交换 2 个下拉列表的值,这些值正在交换,但当我在 onPressed() 的 onPressed() 中调用 setState() 函数时,ui 不会更改按钮:

下面是我的代码: pubspec.yaml 依赖项:searchable_dropdown:^1.1.3

import 'package:awesome_dialog/awesome_dialog.dart';
import 'package:flutter/material.dart';
import 'package:searchable_dropdown/searchable_dropdown.dart';


class MainDashBoardTab extends StatefulWidget {
  @override
  _MainDashBoardTabState createState() => _MainDashBoardTabState();
}

class _MainDashBoardTabState extends State<MainDashBoardTab> {
  String fromPlaceSelected = "";
  String toPlaceSelected = "";
  List<String> fromPlaceItemsString = [
    "Borivali",
    "Kandivali",
    "Malad",
    "Andheri",
    "Dadar"
  ];
  List<String> toPlaceItemsString = [
    "Kankavli",
    "Pune",
    "Solapur",
    "Manmad",
    "Belgaum",
    "Kolhapur"
  ];

  List<DropdownMenuItem> items = [];
  List<DropdownMenuItem> items1 = [];

  @override
  void initState() {
    super.initState();
    for (int i = 0; i < fromPlaceItemsString.length; i++) {
      items.add(DropdownMenuItem(
        child: Text(fromPlaceItemsString[i]),
        value: fromPlaceItemsString[i],
      ));
      fromPlaceSelected = fromPlaceItemsString[fromPlaceItemsString.length - 1];
    }
    for (int i = 0; i < toPlaceItemsString.length; i++) {
      items1.add(DropdownMenuItem(
        child: Text(toPlaceItemsString[i]),
        value: toPlaceItemsString[i],
      ));
      toPlaceSelected = toPlaceItemsString[toPlaceItemsString.length - 1];
    }
  }

  fromPlaceWidget() {
    return SearchableDropdown.single(
      items: items,
      value: fromPlaceSelected,
      hint: "Select From Place ",
      searchHint: "Select From Place",
      onChanged: (value) {
        setState(() {
          fromPlaceSelected = value;
        });
      },
      isExpanded: true,
    );
  }

  toPlaceWidget() {
    return SearchableDropdown.single(
      items: items1,
      value: toPlaceSelected,
      hint: "Select To Place",
      searchHint: "Select To Place",
      onChanged: (value) {
        setState(() {
          toPlaceSelected = value;
        });
      },
      isExpanded: true,
    );
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Container(
        margin: EdgeInsets.all(8),
        color: Colors.lightBlue[100],
        height: 250,
        child: Column(
          children: <Widget>[
            Row(
              mainAxisAlignment: MainAxisAlignment.start,
              children: <Widget>[
                Expanded(
                  flex: 4,
                  child: Column(
                    crossAxisAlignment: CrossAxisAlignment.start,
                    children: <Widget>[
                      fromPlaceWidget(),
                      toPlaceWidget(),
                    ],
                  ),
                ),
                Expanded(
                  flex: 1,
                  child: IconButton(
                    icon: Icon(Icons.swap_vert),
                    iconSize: 50,
                    color: Colors.blue,
                    onPressed: () {
                      setState(() {
                        String temp = fromPlaceSelected;
                        fromPlaceSelected = toPlaceSelected;
                        toPlaceSelected = temp;
                      });
                    },
                  ),
                )
              ],
            ),
           
          ],
        ),
      ),
    );
  }
}

1 个答案:

答案 0 :(得分:1)

因为您有 2 个不同的列表。因此,即使在交换值之后,新值也不会出现在列表中。您还必须交换列表或更好地交换整个小部件。

相关问题