dart - FutureBuilder 没有建设
问题描述
您知道为什么在启动流并返回 Future 时不调用以下 FutureBuilder 吗?
注意:我知道有很多方法可以用流等解决这个问题。这是为了学习,所以如果你知道为什么,我想知道 - 谢谢。
// import 'package:flutter/foundation.dart';
import 'dart:async';
import 'package:flutter/material.dart';
class MyFutureClass {
Future<String> myF;
setMyF() {
this.myF = Future.value("Hello F");
}
Future<String> getMyF() {
return myF;
}
}
class MyFutureWidget extends StatelessWidget {
MyStreamWidget();
final _myStreamClass = MyStreamClass();
// var stream = countStream(10);
// var sum = await sumStream(stream);
// print(sum); // 55
@override
Widget build(BuildContext context) {
return Padding(
padding: const EdgeInsets.all(8.0),
child: new Row(
children: [
RaisedButton(
child: Text("Add to future"),
onPressed: () {
_myStreamClass.setMyF();
},
),
FutureBuilder(
// future: _myStreamClass.getMyF(),
future: _myStreamClass.myF),
builder: (context, snapshot) {
if (snapshot.hasData) {
return Text(snapshot.data);
} else {
return Text("No data");
}
},
),
]
.map((c) => Container(
padding: EdgeInsets.all(8.0),
child: c,
))
.toList(),
),
);
}
}
使用StateFullWidget:刚刚尝试使用 StateFullWidget,结果相同 - 未调用 FutureBuilder?
// import 'package:flutter/foundation.dart';
import 'dart:async';
import 'package:flutter/material.dart';
class MyStreamClass {
Future<String> myF;
setMyF() {
this.myF = Future.value("Hello F");
this.myF.then((v) {
print(v);
});
}
Future<String> getMyF() {
return myF;
}
}
class MyStreamWidget extends StatefulWidget {
@override
_MyStreamWidget createState() => _MyStreamWidget();
}
class _MyStreamWidget extends State<MyStreamWidget> {
final _myStreamClass = MyStreamClass();
// var stream = countStream(10);
// var sum = await sumStream(stream);
// print(sum); // 55
@override
Widget build(BuildContext context) {
return Padding(
padding: const EdgeInsets.all(8.0),
child: new Row(
children: [
RaisedButton(
child: Text("Add to future"),
onPressed: () {
_myStreamClass.setMyF();
},
),
FutureBuilder(
future: _myStreamClass.myF,
builder: (context, snapshot) {
if (snapshot.hasData) {
return Text(snapshot.data);
} else {
return Text("No data");
}
},
),
]
.map((c) => Container(
padding: EdgeInsets.all(8.0),
child: c,
))
.toList(),
),
);
}
}
解决方案
推荐阅读
- unit-testing - 单元测试 Nestjs Mongoose 服务
- visual-studio - 如何为我的计算机中已下载的 Visual Studio Offline Installer 添加工作负载?
- regex - 如何在飞镖/颤振中将字符串分成等长的部分?
- c# - IQueryable 迭代:我需要 ToListAsync() 吗?
- istio - 有没有办法在 istio tls 选项中允许 TLS 重新协商?
- c++ - 澄清双数据类型的使用
- php - PHP 搜索/替换字符串中的单词,并仅更改替换单词的字体颜色
- r - 归一化函数没有给出预期的输出:
- c# - 最后对空值进行排序
- python-3.x - 在过滤器中使用引号扫描会引发错误