我将屏幕分成若干块,并在首页中添加了一系列项目,我的listView是使用JSON构建listview的项目。 加高按钮以“ iniciar”开头,意思是“开始”,当我单击RaisedButton时,它转到“ Finalizar”(表示完成)。发生这种情况时,我想将此特定项目添加到第二个屏幕中。我在屏幕上贴了一张图片。
ListView:
class ProdutoListView extends StatefulWidget {
List<Produto> produtos;
List<Produto> startProd;
ProdutoListView(this.produtos);
@override
_ProdutoListViewState createState() => _ProdutoListViewState();
}
class _ProdutoListViewState extends State<ProdutoListView> {
Timer _timer;
@override
Widget build(BuildContext context) {
return ListView.builder(
shrinkWrap: true,
itemCount: widget.produtos.length,
itemBuilder: (BuildContext context, int index) {
return makeCard(index, context);
},
);
}
Card makeCard(int index, context) {
Produto prod = widget.produtos[index];
return Card(
child: Container(
color: Colors.black,
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Container(
// child: prod.tempo > 10 ? color: Colors.red, : color: Colors.white,
color: Colors.white,
child: Padding(
padding: const EdgeInsets.all(16.0),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Flexible(
child: Text(
"Comanda:" + prod.comanda,
style: TextStyle(fontSize: 22),
),
),
Flexible(
child: Text(
"Mesa:" + prod.mesa,
overflow: TextOverflow.ellipsis,
style: TextStyle(fontSize: 22),
),
)
],
),
),
),
Padding(
padding: const EdgeInsets.all(16.0),
child: Row(
mainAxisAlignment: MainAxisAlignment.start,
children: [
Expanded(
flex: 50,
child: Text(
">" + prod.qntd,
style: TextStyle(fontSize: 20, color: Colors.white),
),
),
Expanded(
flex: 50,
child: Text(
prod.produto,
style: TextStyle(fontSize: 26, color: Colors.white),
),
)
],
),
),
Padding(
padding: const EdgeInsets.all(16.0),
child: Container(
margin: EdgeInsets.only(left: 30),
child: Text(
prod.observacao,
style: TextStyle(fontSize: 20, color: Colors.white),
),
),
),
Container(
color: Colors.black12,
child: Padding(
padding: const EdgeInsets.all(5.0),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
RaisedButton(
child: Text(
prod.estado,
style: TextStyle(color: Colors.black),
),
color: Colors.white,
onPressed: () {
_initialize(context, prod);
Produto startProd = widget.produtos[index];
startProd = prod;
print("produto iniciado: $startProd[]");
}),
Flexible(
child: Text(
"Tempo: " + prod.tempo.toString(),
overflow: TextOverflow.ellipsis,
style: TextStyle(fontSize: 16, color: Colors.red),
),
)
],
),
),
),
],
),
),
);
}
void _startTimer(prod) {
prod.tempo = 0;
if (_timer != null) {
_timer.cancel();
}
_timer = Timer.periodic(Duration(seconds: 1), (timer) {
setState(() {
if (prod.estado == "Finalizar") {
prod.tempo++;
//_add(prod);
} else {
_timer.cancel();
}
});
});
}
_initialize(context, prod) {
setState(() {
prod.estado = "Finalizar";
});
_startTimer(prod);
}
}
首页:
[class HomePage extends StatefulWidget {
@override
_HomePageState createState() => _HomePageState();
}
class _HomePageState extends State<HomePage> {
List<Produto> produto;
List<Produto> startProd;
final _bloc = ProdutoBloc();
final produtoiniciado = ProdutoBloc();
@override
void initState() {
super.initState();
_bloc.listarProdutos();
}
@override
Widget build(BuildContext context) {
return Row(
children: \[
SizedBox(
height: MediaQuery.of(context).size.height,
width: MediaQuery.of(context).size.width / 2,
child: _getData(),
//child: _tamanhoProdutoList(context),
//child: _tamanhoProdutoList(context),
),
SizedBox(
height: MediaQuery.of(context).size.height,
width: MediaQuery.of(context).size.width / 2,
child: _getPedidosIniciados(),
),
\],
);
}
_getPedidosIniciados() {
return StreamBuilder(builder: (context, snapshot) {
if (!snapshot.hasData) {
return Material(
color: Colors.white,
child: Center(
child: Text("Nenhum pedido foi iniciado"),
),
);
}
return RefreshIndicator(
onRefresh: _onRefresh,
child: ProdutoListView(
startProd,
),
);
});
}
StreamBuilder<List<Produto>> _getData() {
return StreamBuilder(
stream: _bloc.stream,
builder: (context, snapshot) {
if (snapshot.hasError) {
return TextError("Não foi possivel buscar os dados!");
}
if (!snapshot.hasData) {
return Center(
child: CircularProgressIndicator(),
);
}
produto = snapshot.data;
return RefreshIndicator(
onRefresh: _onRefresh,
child: ProdutoListView(
produto,
),
);
});
}
Future<void> _onRefresh() {
return _bloc.listarProdutos();
}
答案 0 :(得分:0)
ProdutoBloc()有什么用? 好吧,因为似乎您已经使用BLOC了,您可以使用它来进行管理,创建一个可以接收产品并产生产品清单的集团。 像这样:
免责声明:我实际上并没有尝试只是为了给出想法的代码
class ProdutoListBloc extends Bloc<Produto, List<Produto>> {
ProdutoListBloc(List<Produto> initialState) : super(initialState);
@override
List<Produto> get initialState => new List<Produto>();
List<Produto> produtos = new List<Produto>();
@override
Stream<Produto> mapEventToState(
Produto produto,
) async* {
produtos.add(produto);
yield produtos;
}
}
当您按下Iniciar时,会将产品发送到集团。
BlocProvider.of<ProdutoListBloc>(context).add(produto);
另一方面,使用BlocBuilder构建_getPedidosIniciados(),以接收更新的产品列表。如果您需要淘汰产品,则可以详细说明此概念,也许可以创建一个带有变量的事件类,该变量说明是否必须添加或删除产品,等等。