Обновление текстового виджета во Flutter - PullRequest
0 голосов
/ 26 мая 2020

Я новичок во Flutter, и у меня возникла проблема, так как я хочу обновить текстовый виджет со значением, переданным из функции numbers ().

Проблема в том, что значение внутри текста не меняется на экране, когда Нажимаю на кнопку, но в консоли меняется.

class _HomeState extends State<Home> {


int n = 10;

  @override
  Widget build(BuildContext context) {
    return Scaffold(

  backgroundColor: Colors.deepPurpleAccent,
  body: Center(
    child: Column(
      mainAxisAlignment: MainAxisAlignment.center,
      children: [

        Text(n.toString()),

        RaisedButton(
          onPressed: (){
            n += numbers();
            print(n.toString());
          },
        ),
      ],
    ),
  ),
);
  }
}
int numbers (){

  List<int> numbersList = List(1);

  numbersList[0] = 30;

  int n1 = numbersList[0];

  return n1;

  print(numbersList[0].toString());
}

Ответы [ 3 ]

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

Вот как это можно изменить

RaisedButton(
  onPressed: (){
     final newVal = numbers();
     setState((){
              n += newVal;
             });
   print(n.toString());
       },
     ),
1 голос
/ 26 мая 2020

Если вы хотите обновить пользовательский интерфейс, вы должны вызвать метод setState((){}); во флаттере. Этот метод доступен в StatefulWidget

Вы должны быть реализованы ниже способом

class _HomeState extends State<Home> {
  int n = 10;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      backgroundColor: Colors.deepPurpleAccent,
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            Text(n.toString()),
            RaisedButton(
              onPressed: () {
                setState(() {
                  n += numbers();
                });
              },
            ),
          ],
        ),
      ),
    );
  }
}

int numbers() {
  List<int> numbersList = List(1);

  numbersList[0] = 30;

  int n1 = numbersList[0];

  return n1;
}
1 голос
/ 26 мая 2020

Это ожидаемо, поскольку во флаттере всякий раз, когда вы хотите «обновить sh» экран, вы должны вызывать setState() для виджета, который вы хотите обновить. Итак, что вы делаете, это внутри своей функции onPressed вы делаете следующее:

setState(){
   n += numbers();
}
print(n.toString());

Вы можете узнать больше о виджетах с отслеживанием состояния и setState здесь

...