Как получить доступ к поднятой кнопке во флаттере из другой функции, чтобы изменить границу этой кнопки или цвет фона? - PullRequest
0 голосов
/ 04 апреля 2020
Expanded(
  child: RaisedButton(

    splashColor: Colors.red,
    elevation: 1.0,
    onPressed: (){
     _buttonTag = ButtonPressed(2);
     setState(() {

       _visible = false;
     });
      Navigator.of(context).push(_ProfileToStory());
      print('pressed2');},
    color: Colors.white,
    child: Icon(
        Icons.favorite
    ),


  ),
)

Я новичок во Флаттере.

У нас раньше был глобальный выход для кнопки, чтобы мы могли получить доступ к этой кнопке из любого места в классе. Как мы можем сделать это во Флаттере?

Ответы [ 2 ]

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

Вот как я понял, взяв bool _button1Pressed и изменив его значение в методе setSate . Это правильный подход?

     class Profile extends StatefulWidget {
       @override
      _ProfileState createState() => _ProfileState();
       }

 class _ProfileState extends State<Profile> {
      bool _visible = true;
      bool _button1Pressed = true;

        @override
        Widget build(BuildContext context) {
        return Scaffold(
        appBar: AppBar(
        title: Text('Madelyn Johnson'),
        centerTitle: true,
         backgroundColor: Colors.grey,
         ),

        Row(
          children: <Widget>[
            Expanded(
              child: RaisedButton(
                elevation: 1.0,
                color: _button1Pressed ? Colors.pinkAccent : Colors.white,
                onPressed: () {
                  setState(() {
                    _visible = true;
                    _button1Pressed = true;
                  });
                  print('pressed1');
                },
                child: Icon(Icons.dashboard),
              ),
            ),
            Expanded(
              child: RaisedButton(
                splashColor: Colors.red,
                elevation: 1.0,
                onPressed: () {
                  setState(() {
                    _visible = false;
                    _button1Pressed = false;
                  });
                  Navigator.of(context).push(_ProfileToStory());
                  print('pressed2');
                },
                color: _button1Pressed ? Colors.white : Colors.pinkAccent,
                child: Icon(Icons.favorite),
              ),
            )
          ],
        ),

      ],
    ),
  ),
);}
0 голосов
/ 04 апреля 2020

Вам не нужна кнопка доступа. Вместо этого получите доступ к переменной внутри кнопки Raised, объявив ее самостоятельно. Если ваша кнопка Raised находится в классе StatefulWidget. Вы можете просто изменить состояние функции с помощью setState ().

И вместо использования строки строки вы можете объявить переменную вместо заголовка или цвета и изменить ее с помощью функции setState () из другой функции.

    import 'package:flutter/material.dart';

    class Test extends StatefulWidget {
      @override
      _TestState createState() => _TestState();
    }

    class _TestState extends State<Test> {
      String btnTitle = "Some Text";

      void myFunction(){
        setState(() {
          btnTitle = "Changed Title";
        });
      }
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          backgroundColor: Colors.grey[300],
          appBar: AppBar(
            title: Text("Experiment"),
          ),

          body: Column(
            children: <Widget>[
              RaisedButton(
                child: Text(btnTitle),
                onPressed: (){

                },
              ),
              RaisedButton(
                child: Text("Change Title"),
                onPressed: (){
                  myFunction();
                },
              )
            ],
          ),

        );
      }
    }

Здесь я меняю название одной RaisedButton с другой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...