Flutter 如何在flatter上更改RaisedButton的文本时将类中的列表项添加到另一个列表中

Flutter 如何在flatter上更改RaisedButton的文本时将类中的列表项添加到另一个列表中,flutter,dart,Flutter,Dart,我将屏幕划分为多个块,并在我的主页中添加了一个项目列表,我的listView就是用JSON构建listView的人。 Raised按钮以“iniciar”开头,意思是“开始”,当我单击Raised按钮时,它会转到“Finalizar”(意思是完成)。当这种情况发生时,我想将这个特定的项目添加到我的第二个屏幕中。我贴了一张屏幕的照片 列表视图: class ProdutoListView extends StatefulWidget { List<Produto> produtos

我将屏幕划分为多个块,并在我的主页中添加了一个项目列表,我的listView就是用JSON构建listView的人。 Raised按钮以“iniciar”开头,意思是“开始”,当我单击Raised按钮时,它会转到“Finalizar”(意思是完成)。当这种情况发生时,我想将这个特定的项目添加到我的第二个屏幕中。我贴了一张屏幕的照片

列表视图:

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);
  }
}
类ProdutoListView扩展StatefulWidget{
列出产品清单;
列出startProd;
ProdutoListView(this.produtos);
@凌驾
_ProdutoListViewState createState()=>\u ProdutoListViewState();
}
类_ProdutoListViewState扩展状态{
定时器(u定时器),;
@凌驾
小部件构建(构建上下文){
返回ListView.builder(
收缩膜:对,
itemCount:widget.produtos.length,
itemBuilder:(构建上下文,int索引){
返回makeCard(索引、上下文);
},
);
}
卡片制作卡片(int索引,上下文){
Produto prod=widget.Produto[index];
回程卡(
子:容器(
颜色:颜色,黑色,
子:列(
crossAxisAlignment:crossAxisAlignment.start,
儿童:[
容器(
//子项:生产速度>10?颜色:Colors.red,:color:Colors.white,
颜色:颜色,白色,
孩子:填充(
填充:常数边集全部(16.0),
孩子:排(
mainAxisAlignment:mainAxisAlignment.spaceBetween,
儿童:[
灵活的(
子:文本(
“科曼达:”+prod.Comanda,
样式:TextStyle(字体大小:22),
),
),
灵活的(
子:文本(
“台面:”+prod.Mesa,
溢出:TextOverflow.省略号,
样式:TextStyle(字体大小:22),
),
)
],
),
),
),
填充物(
填充:常数边集全部(16.0),
孩子:排(
mainAxisAlignment:mainAxisAlignment.start,
儿童:[
扩大(
弹性:50,
子:文本(
“>”+prod.qntd,
样式:TextStyle(字体大小:20,颜色:Colors.white),
),
),
扩大(
弹性:50,
子:文本(
prod.produto,
样式:TextStyle(字体大小:26,颜色:Colors.white),
),
)
],
),
),
填充物(
填充:常数边集全部(16.0),
子:容器(
页边距:仅限边集(左:30),
子:文本(
生产商observacao,
样式:TextStyle(字体大小:20,颜色:Colors.white),
),
),
),
容器(
颜色:颜色。黑色,
孩子:填充(
填充:常数边集全部(5.0),
孩子:排(
mainAxisAlignment:mainAxisAlignment.spaceBetween,
儿童:[
升起的按钮(
子:文本(
普罗德·埃斯塔多,
样式:TextStyle(颜色:Colors.black),
),
颜色:颜色,白色,
已按下:(){
_初始化(上下文、prod);
Produto startProd=widget.Produto[index];
startProd=prod;
打印(“produto iniciado:$startProd[]);
}),
灵活的(
子:文本(
“节奏:”+prod.Tempo.toString(),
溢出:TextOverflow.省略号,
样式:TextStyle(字体大小:16,颜色:Colors.red),
),
)
],
),
),
),
],
),
),
);
}
void_startTimer(prod){
生产速度=0;
如果(_timer!=null){
_timer.cancel();
}
_计时器=计时器。周期性(持续时间(秒:1),(计时器){
设置状态(){
如果(prod.estado==“Finalizar”){
prod.tempo++;
//_添加(prod);
}否则{
_timer.cancel();
}
});
});
}
_初始化(上下文、产品){
设置状态(){
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();
  }
[类主页扩展StatefulWidget{
@凌驾
_HomePageState createState()=>\u HomePageState();
}
类_HomePageState扩展状态{
产品清单;
列出startProd;
final _bloc=ProdutoBloc();
最终produtoiniciado=ProdutoBloc();
@凌驾
void initState(){
super.initState();
_bloc.listarProdutos();
}
@凌驾
小部件构建(构建上下文){
返回行(
儿童:\[
大小盒子(
高度:MediaQuery.of(context).size.height,
宽度:MediaQuery.of(context).size.width/2,
子项:_getData(),
//儿童:_tamanhoProdutoList(上下文),
//儿童:_tamanhoProdutoList(上下文),
),
大小盒子(
高度:MediaQuery.of(context).size.height,
宽度:MediaQuery.of(context).size.width/2,
子项:_getPedidosIniciados(),
),
\],
);
}
_GetPedidosisniciados(){
返回StreamBuilder(生成器:(上下文,快照){
如果(!s
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;
  }
}
BlocProvider.of<ProdutoListBloc>(context).add(produto);