android - Flutter 在另一个类中调用 setState() 更新 UI

标签 android flutter setstate statelesswidget

我试图在按下按钮时调用 setState,以便 ui 可以显示新列表,但即使使用我不能使用 setState 的函数,否则它会给我一个错误,说我在构造函数中调用 setState。

这是我的 statlessWidget 代码:

class _MessageCard extends StatelessWidget {
final Mensagem message;
final int messageLenght;
final List<Mensagem> messageList;
var i;
_MessageCard(
  {@required this.message,
  @required this.messageLenght,
  @required this.messageList});

@override
Widget build(BuildContext context) {
return Center(
    child: Container(
  width: 600,
  child: InkWell(
    child: Container(
      width: 900,
      color: Colors.grey[200],
      child: Padding(
        padding: const EdgeInsets.fromLTRB(12, 0, 12, 0),
        child: Center(
          child: Container(
            width: 600,
            child: Column(
              children: <Widget>[
                ListTile(
                  leading: CircleAvatar(
                    child: Icon(
                      Icons.notifications,
                      color: Colors.red[400],
                    ),
                    backgroundColor: Colors.grey[200],
                  ),
                  title: Text(
                    (this.message.vDescricao ?? '').trim(),
                    style: TextStyle(
                      fontSize: 14,
                      color: Colors.black,
                    ),
                  ),
                  subtitle: Text(
                    (this.message.vData ?? '').trim() +
                        '   ' +
                        (this.message.vHora ?? '').trim(),
                    style: TextStyle(
                      color: Colors.red[400],
                      fontSize: 13,
                    ),
                  ),
                  trailing: FlatButton(
                      child: Text(
                        Translations.of(context)
                            .trans('finishmessageshort'),
                      ),
                      onPressed: () => _showDeleteAlertMessage(
                          this.message.vNumero, context)),
                ),
                Divider(
                  color: Colors.black54,
                ),
              ],
            ),
          ),
        ),
      ),
    ),
  ),
 ));
}

Future _showDeleteAlertMessage(String id, BuildContext context) {
return showDialog(
    context: context,
    builder: (BuildContext context) {
      return AlertDialog(
        title: new Text(
          Translations.of(context).trans('finishmessage') + '?',
        ),
        actions: <Widget>[
          FlatButton(
              child: new Text(
                Translations.of(context).trans('closealert'),
              ),
              onPressed: () {
                Navigator.of(context).pop();
              }),
          FlatButton(
            child: new Text(("Ok")),
            onPressed: () =>
                {_deleteMessage(id), Navigator.of(context).pop()},
          )
        ],
      );
    });
}

_deleteMessage(String id) async {
for (i = 0; i < this.messageLenght; i++) {
  if (this.messageList[0].vNumero == this.message.vNumero) {
    this.messageList.removeAt(i);
    _HomePageState().mensagemRepo.confirmMessage(this.message.vNumero);
    await _HomePageState()._getMessages();
    return this.messageList;
   }
  }
 }
}

这是我的 _getMessages()

_getMessages() async {
setState(() {
  _loading = true;
  _errorMsg = '';
});

try {
  _messages = await mensagemRepo.getMessages();

  print('loaded messages: ${_messages?.length}');
} catch (e) {
  _errorMsg = e.toString();
}

setState(() {
  _loading = false;
});

我怎样才能使用这个 setState?

感谢您的时间和关注

编辑:现在更新列表但不更新 UI,因为我无法从 MessageCard 设置主页状态

最佳答案

您只能在 StatefulWidget 中使用 setState

class MessageCard extends StatefulWidget {

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

class _MessageCardState extends State<MessageCard> {
  @override
  Widget build(BuildContext context) {
    // your build method here
  }
}

关于android - Flutter 在另一个类中调用 setState() 更新 UI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59500662/

相关文章:

android - 应用插件失败 'dagger.hilt.android.plugin'

使用自定义 ScrollPhysics 使用动态边界 flutter PageView

javascript - 在 React JS 中,如何将 `setState` 与嵌套在数组中的对象一起使用?

javascript - 跨react-table实现全局搜索过滤器: React+ react-table

android - 将资源 ID 保存为用户首选项对我来说安全吗

java - OkHttp3 身份 validator 与 RxJava

java - Android - Viewmodel 变大

flutter - 这是什么时候的 flutter 了一流的调用前把美元符号是什么意思?

flutter - 带回来后隐藏顶部状态栏

arrays - 如何在 react 中的对象数组内设置对象数组的状态