我想在Navigator.pop时重新加载我的列表,但我不能这样做 .
我的代码:
class ConfigCNPJPage extends StatefulWidget {
bool voltarTela;
ConfigCNPJPage({Key key, this.voltarTela}) : super(key: key);
@override
ConfigCNPJPageState createState() => new ConfigCNPJPageState();
}
class ConfigCNPJPageState extends State<ConfigCNPJPage>
with SingleTickerProviderStateMixin {
ResultConfig BD;
List<Map> list;
List<Widget> listArray = [];
Stream myStream;
Future setupList() async {
ConfigDatabase db = ConfigDatabase();
var banco = await db.initDB();
list = await banco.rawQuery('SELECT * FROM Empresa');
return list;
}
@override
void initState() {
super.initState();
myStream = setupList()?.asStream();
}
@override
Widget build(BuildContext context) {
return new StreamBuilder(
stream: myStream,
builder: (BuildContext context, AsyncSnapshot snapshot) {
return snapshot.hasData? new Scaffold(
resizeToAvoidBottomPadding: false,
appBar: new AppBar(
title: new Text('Configurar Empresa'),
actions: <Widget>[
new IconButton(icon: const Icon(Icons.add), onPressed: () {
Navigator.pushNamed(context, "NovoCNPJ").then((value) {
setState(() {
myStream = setupList()?.asStream();
});
});
})
],
),
body: new Column(
children: <Widget>[
criarLista()
],
),
):new Center(child: new RefreshProgressIndicator());
},);
}
}
我想在pop之后使用setState来实现这个Stream,但是不能正常工作 . 有人可以帮忙吗?
我需要重建StreamBuilder吗?或只重新加载列表?
使用StreamBuilder,我需要做setState,如果我重新编译了streamBuilder,它会工作吗?
1 回答
我猜你在这个例子中必须使用
StreamController
而不是Stream
.在您的示例中,请参阅
_streamController
次事件 .但在您的使用案例中,您是否只有一个empresa /公司或者您会有多个?
如果你只有一个,而不是
Stream
,那么只管理一个_empresa
/_company
对象会更容易 .如果你希望有一个对象列表,那么我也不会使用
StreamBuilder
. 我也会管理List<Empresa> _empresas
.祝好运!