Динамический многоуровневый CupertinoPicker наклоняет выравнивание первого элемента Text при переключении между списками - PullRequest
0 голосов
/ 22 октября 2019

Я пытаюсь создать динамический многоуровневый CupertinoPicker. Когда вы выбираете тип местоположения из первого списка, он отображает список местоположений, которые соответствуют этому типу. Эта часть работает нормально, проблема в том, что если я переключаюсь на другой список местоположений, первый текстовый виджет второго списка местоположений имеет отступ в соответствии с первым текстовым виджетом первого списка местоположений.

Я попытался указать, что виджет Текст должен быть выровнен по центру, используя 'alignment: TextAlignment.center'. Я также попытался установить нулевое местоположение при переключении между списками местоположений. Ни один из них не решил проблему или не имел никакого видимого эффекта.

return Column(
      mainAxisAlignment: MainAxisAlignment.center,
      crossAxisAlignment: CrossAxisAlignment.center,
      children: <Widget>[
        Container(
          padding: EdgeInsets.only(bottom: 5.0),
          height: pickerHeight,
          width: logicalSize.width,
          child: CupertinoPicker(
            backgroundColor: Colors.white,
            itemExtent: 32.0,
            onSelectedItemChanged: (selectedIndex) {
              setState(() {
                location = null;
                locationType = locationTypeList[selectedIndex];
              });
            },
            children: pickerLocationType,
          ),
        ),
        Container(
          height: pickerHeight,
          width: logicalSize.width,
          child: CupertinoPicker(
            backgroundColor: Colors.white,
            itemExtent: 30.0,
            onSelectedItemChanged: (selectedIndex) {
              setState(() {
                location = null;
                if (locationType == 'Campus') {
                  location = campusList[selectedIndex];
                }
                if (locationType == 'City') {
                  location = cityList[selectedIndex];
                }
              });
            },
            children: pickerMap[locationType],
          ),
        ), 

В результате должна получиться первая строка (представьте, что это набор в CupertinoPicker):

---------------------------------- Город 1 --------------------------------------

---------------------------------- Город 2 --------------------------------------

Но это больше похоже на:

------------------------------- Город 1-----------------------------------------

---------------------------------- Город 2 --------------------------------------

Если изображения нужны, я отредактирую этот пост со ссылкой на них.

1 Ответ

0 голосов
/ 01 ноября 2019

Я нашел решение. Смотрите ниже:

Container(
          key: ValueKey(this._locationType),
          height: pickerHeight,
          width: logicalSize.width,
          child: CupertinoPicker(
            backgroundColor: Colors.white,
            itemExtent: 30.0,
            onSelectedItemChanged: (selectedIndex) {
              setState(() {
                location = null;
                if (locationType == 'Campus') {
                  location = campusList[selectedIndex];
                }
                if (locationType == 'City') {
                  location = cityList[selectedIndex];
                }
              });
            },
            children: pickerMap[locationType],
          ),
        ), 
...