Ошибка: установщик «нажат» не определен для класса «_HomeState» - PullRequest
0 голосов
/ 03 мая 2020

Итак, я пытаюсь создать стиль, когда человек нажимает кнопку. Он изменит свой цвет, у меня есть отдельная функция, в которой создаются кнопки, поэтому я вызываю эту функцию для их создания. Но когда я передал переменную bool, основная функция, кажется, не принимает эту переменную (bool). Он остается подсвеченным красным и дает мне это. Сеттер pressed не определен для класса _HomeState
Вот функция кнопки создания:

class CustomButton extends StatefulWidget {
// define this parameters as you will need them
final Function onPressed;
final IconData icon;
final String text;
final String text2;

// define a constructor for the class custom button
CustomButton({this.onPressed, this.icon, this.text, this.text2});

@override
_CustomButtonState createState() => _CustomButtonState();
}

class _CustomButtonState extends State<CustomButton> {
@override
Widget build(BuildContext context) {
return ClipRRect(
  borderRadius: BorderRadius.circular(10),
  child: SizedBox(
    width: 90.0,
    height: 90.0,
    child: RaisedButton(
      // remove the default padding the raised button has
      padding: EdgeInsets.zero,
      onPressed: () {},
      color: Colors.grey,
      child: Column(
        mainAxisAlignment: MainAxisAlignment.start,
        children: <Widget>[
          Row(
            children: <Widget>[
              Padding(
                padding: EdgeInsets.only(top: 5, right: 25, bottom: 10),
                child: Icon(
                  widget.icon,
                  size: 35,
                ),
              ),
              Padding(
                padding: EdgeInsets.only(
                    top: 0, right: 0, bottom: 20, left: 0),
                child: new Text(
                  widget.text,
                ),
              ),
            ],
          ),
          Padding(
            padding: EdgeInsets.only(top: 8, right: 17),
            child: Text(
              widget.text2,
              style: TextStyle(fontSize: 13),
            ),
          ),
        ],
      ),
    ),
  ),
);
}
}

Вот основная функция, когда я вызвать CustomButton ():

CustomButton(
          icon: Icons.lightbulb_outline,
          text: 'On',
          text2: 'Lâmpada 1\nSchuma',
          pressed: false,
         style: pressed ?                                            
         TextStyle(fontSize: 30.0) :
          TextStyle(fontSize: 10.0),
          onPressed: () => (){
          setState(() {
          pressed = !pressed; <- THis stay highlighted in red
   });
},
),

Ответы [ 2 ]

1 голос
/ 03 мая 2020

У вас есть класс _HomeState, в котором вы используете CustomButton, и вы пытаетесь присвоить значение pressed этой кнопке, но это свойство не существует в _HomeState. Есть несколько потенциальных проблем:

  1. Вы используете pressed вместо widget.pressed
  2. Вы используете pressed вместо _pressed
  3. Вы не определили pressed как свойство _HomeState, и вам нужно сначала определить его

РЕДАКТИРОВАТЬ:

Чтобы изменить состояние кнопки при нажатии, вам нужно сделать это внутри класса кнопок, а не в родительском виджете. Это самый простой пример с изменением цвета:

import 'package:flutter/material.dart';

class MyButton extends StatefulWidget {
  @override
  State createState() => _MyButtonState();
}

class _MyButtonState extends State<MyButton> {
  bool _pressed = true;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: RaisedButton(
        color: _pressed ? Colors.redAccent : Colors.blueAccent,
        child: Text('Change color'),
        onPressed: () {
          setState(() {
            _pressed = !_pressed;
          });
        },
      ),
    );
  }
}
1 голос
/ 03 мая 2020

Это означает, что вы пытаетесь присвоить нажатие значение нажатой, но оно не определено в классе _HomeState.

В классе _HomeState их переменная не нажата.

Обновление:

class CustomButton extends StatefulWidget {
// define this parameters as you will need them
  final Function onPressed;
  final IconData icon;
  final String text;
  final String text2;
  final bool pressed;
  final TextStyle style;

// define a constructor for the class custom button
  CustomButton(
      {this.onPressed,
      this.icon,
      this.text,
      this.text2,
      this.pressed,
      this.style});

  @override
  _CustomButtonState createState() => _CustomButtonState();
}

class _CustomButtonState extends State<CustomButton> {
  bool btn = false;
  @override
  Widget build(BuildContext context) {
    return ClipRRect(
      borderRadius: BorderRadius.circular(10),
      child: SizedBox(
        width: 90.0,
        height: 90.0,
        child: RaisedButton(
          // remove the default padding the raised button has
          padding: EdgeInsets.zero,
          onPressed: () {
            setState(() {
              btn = !btn;
            });
          },
          color: btn ? Colors.grey : Colors.amber,
          child: Column(
            mainAxisAlignment: MainAxisAlignment.start,
            children: <Widget>[
              Row(
                children: <Widget>[
                  Padding(
                    padding: EdgeInsets.only(top: 5, right: 25, bottom: 10),
                    child: Icon(
                      widget.icon,
                      size: 35,
                    ),
                  ),
                  Padding(
                    padding:
                        EdgeInsets.only(top: 0, right: 0, bottom: 20, left: 0),
                    child: new Text(
                      widget.text,
                    ),
                  ),
                ],
              ),
              Padding(
                padding: EdgeInsets.only(top: 8, right: 17),
                child: Text(
                  widget.text2,
                  style: TextStyle(fontSize: 13),
                ),
              ),
            ],
          ),
        ),
      ),
    );
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...