在Dart中,对于只存在于回调内部的集合/列表,“屈服”的最佳方式是什么?

在Dart中,对于只存在于回调内部的集合/列表,“屈服”的最佳方式是什么?,dart,dart-async,Dart,Dart Async,我有一个方法(\u all),里面有一个回调(\u runInTxn)。回调函数获取列表(rs),我想生成该列表,并通过&u-all's流返回该列表。但是,回调没有标记为async*(但是方法标记为async*) 对于只存在于回调内部的集合/列表,产生的最佳方法是什么 下面是一个正确且有效的示例: Stream\u all()异步*{ var sql='SELECT id,value FROM$storeName'; SqlResultSet-resultSet; 等待(txn){ execut

我有一个方法(
\u all
),里面有一个回调(
\u runInTxn
)。回调函数获取列表(
rs
),我想
生成该列表,并通过&u-all's流返回该列表。但是,回调没有标记为
async*
(但是方法标记为
async*

对于只存在于回调内部的集合/列表,
产生
的最佳方法是什么

下面是一个正确且有效的示例:

Stream\u all()异步*{
var sql='SELECT id,value FROM$storeName';
SqlResultSet-resultSet;
等待(txn){
executeSql(sql,[],(txn,rs){
结果集=rs;
});
});
对于(变量i=0;i

我很好奇是否有更好的方法来编写这段代码,这样我就可以避免使用null
resultSet
。我非常希望我的
yield
语句包含在
executeSql
语句中。我可以做一个“非本地收益率”吗?

关于在
Future.forEach()中使用
yield
,也有类似的讨论,答案是据我所知,这是不受支持的(尚未找到讨论)

我想没有异步会更容易*

Stream\u all(){
var sql='SELECT id,value FROM$storeName';
var sc=新的StreamController();
_runInTxn((txn){
executeSql(sql,[],(txn,rs){
rs.rows.forEach((row)=>sc.add(row['value']);
});
})。然后()=>sc.close());
返回sc.stream;
}

请尝试

找到讨论:谢谢。我最终使用了StreamController。