在Flutter中为有状态小部件设置/获取值

时间:2019-05-23 22:33:27

标签: flutter

我的窗口小部件中有一个文本字段。当我从服务器获取一些更新时,我想刷新它。现在,我

  setState(() {
    _msg = "new message";
  });

,它将重建我的整个小部件。我想做

  _msg.set("new message");

它应该在_msg小部件内调用setState并仅重建_msg。

有没有办法做到这一点?

1 个答案:

答案 0 :(得分:0)

确保您使用的是有状态的小部件。这将允许您使用setState((){})更新小部件状态。

调用setState((){})时,它将重建其中的有状态窗口小部件。整个小部件将得到重建。不用担心,再次重建整个窗口小部件。例如:

@override
  Widget build(BuildContext context) { .... will get rebuilt ....}

看起来_msg是字符串类型。如果要更新字符串文本,则调用setState((){})将实现此目标。这是一个简单的示例,您可以在其中看到AppBar标题中的文本字段以及通过打印的控制台中的更改。快乐的编码。

import 'package:flutter/material.dart';

class MyWidget extends StatefulWidget {
  @override
  _MyWidgetState createState() => _MyWidgetState();
}

class _MyWidgetState extends State<MyWidget> {
  String _msg = "first message";
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('MyWidget: _msg = $_msg'),
      ),
      backgroundColor: Colors.white,
      floatingActionButton: FloatingActionButton(onPressed: (){
        print('before setState _msg = $_msg');
        setState(() {
          _msg = 'second message';
          print('after setState _msg = $_msg');
        });
      }),
    );
  }
}