【问题标题】:Set/Get value to Stateful Widget in Flutter在 Flutter 中为 Stateful Widget 设置/获取值
【发布时间】:2019-05-23 22:33:27
【问题描述】:

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

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

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

  _msg.set("new message");

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

有没有办法做到这一点?

【问题讨论】:

  • 不直接,不。实际上,重建并不是一个低效的操作。状态是一个简单的数据结构,对于其中未更改的部分,不会重新创建它们背后的实际 UI 元素。如果您出于某种原因真的想摆脱重建,我认为 Provider 小部件有办法让相关小部件监听更改。

标签: flutter


【解决方案1】:

确保您使用的是有状态小部件。这将允许您使用 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');
        });
      }),
    );
  }
}

【讨论】:

  • 这就是我现在正在做的事情。
  • 如果这是正确答案,请将答案标记为正确。
  • 不是。这是我在问这个问题之前所做的。
  • 您能否在问题中提供更多代码以便 SO 社区可以帮助您?
猜你喜欢
  • 2020-12-31
  • 2021-09-26
  • 1970-01-01
  • 2018-01-28
  • 2019-07-26
  • 2019-07-08
  • 1970-01-01
  • 2018-12-06
  • 1970-01-01
相关资源
最近更新 更多