【问题标题】:Unable to work with Flutter Stateful widget无法使用 Flutter Stateful 小部件
【发布时间】:2020-12-20 15:39:06
【问题描述】:

我是拉维。我对 Flutter 很陌生,但我对编程并不陌生。我一直在使用 Flutter 的有状态小部件。由于我是这个 SDK 的新手,我无法弄清楚为什么我的状态没有更新。我所做的只是编写了一些代码,每当单击按钮时都会增加一个数字,而且我知道我们必须使用有状态的小部件才能实时更新任何数据。但我的代码不能正常工作。谁能帮我解决这个问题。

import 'package:flutter/material.dart';

void main() => runApp(MyApp());

class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
@override
Widget build(BuildContext context) {
int level = 0;
return MaterialApp(
  home: Scaffold(
      appBar: AppBar(
        title: Text('Stateful Widget'),
      ),
      body: Center(
        child: Column(
          children: [
            Text('$level'),
            RaisedButton(
              child: Text('Increment'),
              onPressed: () {
                setState(() {
                  level = level + 1;
                  print(level);
                });
              },
            ),
          ],
        ),
      )),
);
}
}

Console: 
Performing hot reload...
Syncing files to device sdk gphone x86 arm...
Reloaded 1 of 513 libraries in 1,722ms.
I/flutter ( 8886): 1

【问题讨论】:

    标签: flutter dart setstate statefulwidget flutter-state


    【解决方案1】:

    问题在于level 变量的范围。它不应该在您的 build 方法中,而应该在您的 class

    class _MyAppState extends State<MyApp> {
    //Moved level here.
      int level = 0;
    
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          home: Scaffold(
            appBar: AppBar(
              title: Text('Stateful Widget'),
            ),
            body: Center(
              child: Column(
                children: [
                  Text('$level'),
                  RaisedButton(
                    child: Text('Increment'),
                    onPressed: () {
                      setState(() {
                        level = level + 1;
                        print(level);
                      });
                    },
                  ),
                ],
              ),
            ),
          ),
        );
      }
    }
    

    【讨论】:

    • 没错,因为当您调用setState() 方法时,它会调用build() 方法,因此level 变量被设置回0。
    猜你喜欢
    • 2021-08-22
    • 2021-05-02
    • 2020-02-13
    • 1970-01-01
    • 2020-09-26
    • 2020-11-23
    • 2021-03-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多