Хобрук: Ваш путь к мастерству в программировании

Как показать другой виджет в showModel при нажатии кнопки

Я пытаюсь показать showModelBottomSheet (), и он отлично работает, в bottomSheet есть кнопка, поэтому всякий раз, когда я нажимал эту кнопку, она показывает / возвращает новый контейнер (контейнер с разными виджетами). На этом onTap () я установил переменная bool принимает значение true или false ... но не работает. setState (()); Метод Не работает в ModelBottomSheet? и аналогичный случай с showGeneralDialog () ... Как я могу исправить и то, и другое.

bool p=true;
showModalBottomSheet(
  backgroundColor: Colors.transparent,
    enableDrag: true,
    isScrollControlled: true,
    context: context, builder: (BuildContext context){

  return p==true?Container(
    width: MediaQuery.of(context).size.width,
    height: MediaQuery.of(context).size.height/2,
    padding: EdgeInsets.all(5.0),
    decoration: BoxDecoration(
      color: Theme.of(context).primaryColor,
      borderRadius: BorderRadius.only(topLeft: Radius.circular(20.0),topRight: Radius.circular(20.0)),
    ),
    child: Column(
      children: <Widget>[
        Container(
          alignment: Alignment.topLeft,
          width: MediaQuery.of(context).size.width,
          height: 30.0,
          child: IconButton(icon: Icon(Icons.arrow_downward,color: Colors.white,size: 32.0,), onPressed: (){
            Navigator.pop(context);
          }),
        ),

        Text(widget.model.cName,style: TextStyle(color: Colors.white,fontWeight: FontWeight.bold,fontSize: 25.0,fontFamily: 'Rajdhani'),),

        SizedBox(height: 10.0,),
        Text('AMOUNT',style: TextStyle(color: Colors.white60,fontWeight: FontWeight.w100,fontSize: 12.0),),

        SizedBox(height: 20.0,),
        Text(widget.model.b,style: TextStyle(color: Colors.white,fontWeight: FontWeight.w600,fontSize: 32.0,fontFamily: 'Rajdhani'),),

        SizedBox(height: 10.0,),
        Text('REPEAT',style: TextStyle(color: Colors.white60,fontWeight: FontWeight.bold,fontSize: 12.0,fontFamily: 'Rajdhani'),),
        SizedBox(height: 15.0,),
        Text('EVERY MONTH AT   '+widget.model.date,style: TextStyle(color: Colors.white,fontWeight: FontWeight.w600,fontSize: 20.0,fontFamily: 'Rajdhani'),),


        SizedBox(height: 20.0,),
        GestureDetector(
          onTap: (){
            pay=false;
            print('ayeeee $p');
          },
          child: Container(
            alignment: Alignment.bottomCenter,
            width: MediaQuery.of(context).size.width*0.8,
            height: 40.0,
            decoration: BoxDecoration(color: Colors.white,
              borderRadius: BorderRadius.circular(10.0),
            ),
            child: Center(
              child: Text('P ',style: TextStyle(color: Colors.black,fontWeight: FontWeight.bold,fontSize: 18.0,fontFamily: 'Rajdhani')),
            ),
          ),
        ),




      ],
    ),
  ):Container(
    width: MediaQuery.of(context).size.width,
    height: MediaQuery.of(context).size.height/2,
    padding: EdgeInsets.all(5.0),
    decoration: BoxDecoration(
      color: Theme.of(context).primaryColor,
      borderRadius: BorderRadius.only(topLeft: Radius.circular(20.0),topRight: Radius.circular(20.0)),
    ),
    child: Column(
      children: <Widget>[
        Container(
          alignment: Alignment.topLeft,
          width: MediaQuery.of(context).size.width,
          height: 30.0,
          child: IconButton(icon: Icon(Icons.arrow_downward,color: Colors.white,size: 32.0,), onPressed: (){
            Navigator.pop(context);
          }),
        ),

        Text('AMOUNT',style: TextStyle(color: Colors.white60,fontWeight: FontWeight.w100,fontSize: 12.0),),

        SizedBox(height: 20.0,),
        Text(widget.model.b,style: TextStyle(color: Colors.white,fontWeight: FontWeight.w600,fontSize: 32.0,fontFamily: 'Rajdhani'),),

        SizedBox(height: 10.0,),
        Text('SOURCE',style: TextStyle(color: Colors.white60,fontWeight: FontWeight.bold,fontSize: 12.0,fontFamily: 'Rajdhani'),),
        SizedBox(height: 15.0,),
        Text('EVERY MONTH AT   '+widget.model.date,style: TextStyle(color: Colors.white,fontWeight: FontWeight.w600,fontSize: 20.0,fontFamily: 'Rajdhani'),),


        SizedBox(height: 20.0,),
        Container(
          alignment: Alignment.bottomCenter,
          width: MediaQuery.of(context).size.width*0.8,
          height: 40.0,
          decoration: BoxDecoration(color: Colors.white,
            borderRadius: BorderRadius.circular(10.0),
          ),
          child: Center(
            child: Text('PA ',style: TextStyle(color: Colors.black,fontWeight: FontWeight.bold,fontSize: 18.0,fontFamily: 'Rajdhani')),
          ),
        ),




      ],
    ),
  );

Ответы:


1

Чтобы обновить state нижнего листа, вам нужно обернуть свой виджет StatefulBuilder и использовать предоставленный StateSetter для установки состояния:

Я добавил пример ниже:

showModalBottomSheet(
        context: context,
        builder: (context) {
          return StatefulBuilder(
              builder: (BuildContext context, StateSetter setModalState) {
            return  // ** YOUR WIDGETS ** 
          });
    });
25.08.2020
  • Мне нужно правильно обернуть showModalBottomSheet () в statfulWidgetClass? 25.08.2020
  • Вам просто нужно обернуть widget, который showModalBottomSheet возвращается в StatefulBuilder. Затем вы можете вызвать showModalBottomSheet в Stateful Widget. 25.08.2020
  • он не работает ... есть ли какие-либо функции setModalState, которые можно использовать? 25.08.2020
  • Да, вам нужно сделать setModalState((){});, чтобы запустить восстановление. 25.08.2020
  • infact bool значение сброшено с истины на ложь, но по-прежнему не отображается другой контейнер 25.08.2020
  • Не могли бы вы обновить свой вопрос о том, как вы это делаете? 25.08.2020
  • Да для setModalState (() {}); это работа как шарм Большое спасибо. 25.08.2020
  • Новые материалы

    Решения DBA Metrix
    DBA Metrix Solutions предоставляет удаленного администратора базы данных (DBA), который несет ответственность за внедрение, обслуживание, настройку, восстановление базы данных, а также другие..

    Начало работы с Блум
    Обзор и Codelab для генерации текста с помощью Bloom Оглавление Что такое Блум? Некоторые предостережения Настройка среды Скачивание предварительно обученного токенизатора и модели..

    Создание кнопочного меню с использованием HTML, CSS и JavaScript
    Вы будете создавать кнопочное меню, которое имеет состояние наведения, а также позволяет вам выбирать кнопку при нажатии на нее. Финальный проект можно увидеть в этом Codepen . Шаг 1..

    Внедрите OAuth в свои веб-приложения для повышения безопасности
    OAuth — это широко распространенный стандарт авторизации, который позволяет приложениям получать доступ к ресурсам от имени пользователя, не раскрывая его пароль. Это позволяет пользователям..

    Классы в JavaScript
    class является образцом java Script Object. Конструкция «class» позволяет определять классы на основе прототипов с чистым, красивым синтаксисом. // define class Human class Human {..

    Как свинг-трейдеры могут использовать ИИ для больших выигрышей
    По мере того как все больше и больше профессиональных трейдеров и активных розничных трейдеров узнают о возможностях, которые предоставляет искусственный интеллект и машинное обучение для улучшения..

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