Как обновить цвет текста на экране, выбрав цвет из нижнего листа в Flutter? - PullRequest
0 голосов
/ 11 апреля 2020

Привет ,
Я создаю приложение на основе дизайна футболки. Мне нужно изменить цвет текста в соответствии с выбором пользователя

enter image description here


Проблема в том, что текст на рубашке находится в перетаскиваемом виджете (код в приложении) и когда я выбираю цвет из BottomSheet (код прилагается), тогда значение печатается, но цвет текста не изменяется, пока я не коснусь текста на экране. Можно ли обновлять цвет текста каждый раз, когда я меняю цвет с нижнего листа.
Пожалуйста, помогите !!

  showBottomSheet(
      context: context,
      builder: (context) {
        return Container(
          color: Colors.grey[200],
          height: 300,
          child: StatefulBuilder(builder: (BuildContext context,
              StateSetter setStates /*You can rename this!*/) {
            return Padding(
              padding: const EdgeInsets.all(15.0),
              child: Column(
                mainAxisAlignment: MainAxisAlignment.spaceEvenly,
                children: <Widget>[
                  // Text("Select Text Color"),
                      InkWell(
                          onTap: () {
                            clr = Colors.grey;
                            setStates((){
                               color =clr;
                            });

                            print(clr);
                            Navigator.pop(context);
                          },
                          child: Container(
                            decoration: BoxDecoration(
                                    color: Colors.black,
                                    borderRadius: BorderRadius.circular(40),
                                  ),
                            child: Icon(Icons.brightness_1,
                                size: 60, color: Colors.grey),
                          )),
                ],
              ),
            );
          }),
        );
      });



                        Draggable(
                            feedback: Container(
                                padding: EdgeInsets.all(10),

                                child: Material(
                                  type: MaterialType.transparency,
                                  child: Text(
                                    name,
                                    style: TextStyle(fontSize: 30,color: color),
                                  ),
                                )),
                            child: Container(
                                padding: EdgeInsets.all(10),
                                child: Text(
                                  name,
                                  style: TextStyle(fontSize: 30,color: color),
                                )),
                            childWhenDragging: Container(),
                            onDragEnd: (DraggableDetails d) {
                              setState(() {
                                pos[0].setPosition(d.offset.dx, d.offset.dy);
                              });
                            },
                          ),

1 Ответ

0 голосов
/ 11 апреля 2020

Переместите StatefulBuilder выше в дерево виджетов, затем передайте StateSetter в функцию, вызывающую showBottomSheet

, например:

 Widget buildBody(context){
    return Container(
      child: StatefulBuilder( builder: (BuildContext context, StateSetter setstates){
        return Column(
          children: <Widget>[
            FlatButton(
              child: Text('open bottom sheet'),
              onPressed: () {
                showbt(context, setstates);
              },
            ),
            Draggable(
              feedback: Container(
                  padding: EdgeInsets.all(10),
                  child: Material(
                    type: MaterialType.transparency,
                    child: Text(
                      'name',
                      style: TextStyle(fontSize: 30, color: color),
                    ),
                  )),
              child: Container(
                  padding: EdgeInsets.all(10),
                  child: Text(
                    'name',
                    style: TextStyle(fontSize: 30, color: color),
                  )),
              childWhenDragging: Container(),
              onDragEnd: (DraggableDetails d) {
                setState(() {
                  //pos[0].setPosition(d.offset.dx, d.offset.dy);
                });
              },
            ),
          ],
        );
      },
      ),
    );
  }

код showbt:

void showbt(context, setstates) {
    showBottomSheet(
        context: context,
        builder: (context) {
          return Container(
            color: Colors.grey[200],
            height: 300,
            child: Padding(
                padding: const EdgeInsets.all(15.0),
                child: Column(
                  mainAxisAlignment: MainAxisAlignment.spaceEvenly,
                  children: <Widget>[
                    // Text("Select Text Color"),
                    InkWell(
                        onTap: () {
                          setstates(() {
                            color = Colors.grey;
                          });

                          print('color : ');

                          print(color);
                          Navigator.pop(context);
                        },
                        child: Container(
                          decoration: BoxDecoration(
                            color: Colors.black,
                            borderRadius: BorderRadius.circular(40),
                          ),
                          child: Icon(Icons.brightness_1,
                              size: 60, color: Colors.grey),
                        )),
                  ],
                ),
              ),
          );
        });
  }
...