flutter - Ui 仅针对颤振中的最后一个流进行更新
问题描述
我正在制作一个 sms_app,当我按下按钮发送 sms时,它可以从对象列表中获取数据。对象有一个返回流的方法。我正在使用 ListViewbuilder 遍历数据并通过 StreamViewBuilder 收听流。所有的对象流都在执行发送消息的功能。如果我按下第一个发送按钮,然后等待,按下第二个按钮并等待,它会相应地更新 UI。
但是
UI 正在为最后一个 Stream 更新。如果我不等待就一个接一个地按下按钮。我在做什么错>。这是视频
import 'package:flutter/material.dart';
import 'package:sms_maintained/sms.dart';
class SendSmsScreen extends StatelessWidget {
final SmsSender sender = SmsSender();
final SmsMessage message = SmsMessage('03009640742', '_body');
final List<SmsMessage> smsList = [
SmsMessage('03009750742', 'Random'),
SmsMessage('03008750742', 'Kaleem'),
SmsMessage('03056750742', 'Shahryar'),
SmsMessage('03127750742', 'Shahryar Zong')
];
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(),
body: ListView.builder(
itemCount: smsList.length,
itemBuilder: (context, index) {
return SingleChildScrollView(
child: Column(
children: [
IconButton(
icon: Icon(Icons.send),
onPressed: () async {
await sender.sendSms(smsList[index]);
},
),
StreamBuilder<SmsMessageState>(
key: GlobalKey(debugLabel: 'String $index'),
// initialData: SmsMessageState.None,
builder: (context, snapshot) {
if (snapshot.data == SmsMessageState.Sent) {
return Text('Message Sent');
}
if (snapshot.data == SmsMessageState.Delivered) {
return Text('Message Delivered');
}
if (snapshot.data == SmsMessageState.Sending) {
return Text('Sending');
}
if (snapshot.data == SmsMessageState.Fail)
return Text('Sending Failed');
return Text('Error');
},
stream: smsList[index].onStateChanged,
),
],
),
);
},
));
}
}
解决方案
那是因为它们都在执行相同的方法。当您快速连续执行多个执行时,最后一个会停止执行上一个。您必须找到一种方法在它们执行时将它们排队,并且仅在前一个完成时才执行下一个。
推荐阅读
- python - 无法从类中正确获取列表数据
- tcl - 无法使用 exit 命令终止 TCL 脚本,因为它未被识别
- javascript - 如何使用 GitHub Actions 在我的项目中的特定目录中运行 ESLint
- here-api - 反向地理编码端点响应:“访问”字段
- php - 使用印度电话的正则表达式模式验证 woocommerce 结帐页面表单,用于 wordpress 中的模式 +91-1234567890 号码
- objective-c - 如何在同时禁用其他两个的同时启用 UISwitch
- oracle - 从 Toad 上的命令行执行模式差异时过滤器查询的问题
- java - .view.InflateException:二进制 XML 文件第 10 行:二进制 XML 文件第 10 行:膨胀类 com.iammert.library.readablebottombar.Readable 时出错
- java - Android Studio 4.2 布局呈现错误
- compilation - 在 /usr/local/lib 中找不到共享库