我正在颤振中使用 mvp 构建移动应用程序。我面临的问题是我用来制作产品屏幕和订单屏幕的代码是相同的,使用流生成器。但是在产品屏幕的情况下,代码工作得非常好,显示圆形进度指示器,但是当我导航到订单屏幕时,它首先在订单屏幕上显示一个错误,而不是圆形进度指示器,几毫秒后,当它得到响应时,它显示结果。为了更好地理解,我还附上了视频。https://www.youtube.com/watch?v=X4QX1-sKS9k
有状态小部件的初始化状态方法和构建方法也是相同的,但我没有遇到我在代码中做错的问题。下面是导致问题的订单屏幕构建状态的代码。
构建顺序方法:
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.white,
appBar: AppBar(
backgroundColor: Colors.orange,
automaticallyImplyLeading: false,
title: Text(
'Orders',
style: TextStyle(color: Colors.white),
),
),
body: widget.myList.isNotEmpty //TODO update it remove the parameters
? orderListView(widget.myList)
: StreamBuilder(
stream: orderPresenter.getOrders,
builder: (context, AsyncSnapshot<OrdersList> snapshot) {
if (snapshot.hasData) {
return orderListView(
snapshot.data.orders //TODO update it remove the parameters
);
} else if (snapshot.data.orders.isEmpty) {
return Center(child: Text('Your orders are empty'),);
} else if (snapshot.hasError) {
return Text(snapshot.error.toString());
}
return Center(
child: Container(
child: CircularProgressIndicator(),
),
);
},
),
);
}
在订单演示者中,我们有
final _ordersFetcher = PublishSubject<OrdersList>();
@override
Observable<OrdersList> get getOrders => _ordersFetcher.stream;
对我有用的解决方案:
if (!snapshot.hasData) {
return Center(
child: Container(
child: CircularProgressIndicator(),
),
);
}else
if(snapshot.hasData){
orderListView(snapshot.data
.orders);
}