Динамический многоуровневый CupertinoPicker искажает выравнивание первого текстового элемента при переключении между списками

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

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

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 ответ

Я нашел решение. Увидеть ниже:

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],
          ),
        ), 
Другие вопросы по тегам