Блок флаттера предыдущей страницы воссоздается, когда новая страница нажата, а старая всплыла - PullRequest
0 голосов
/ 04 октября 2019

У меня есть приложение Flutter, в котором я использую много блоков для обновления, извлечения списка, разработки всего списка и т. Д. Поэтому ниже я показал одну страницу, например, у меня есть страница Clist, где у меня есть блок и я запускаюцикл для вызова возврата CListIndividualCard (подробнее: state.cList [index]);которая на самом деле карта. Ниже приведены сначала коды для Clist, а затем CListIndividualCard. Проблема теперь в том, что у меня есть жест, который я нажимаю, и он перенаправляет меня на эту страницу

Navigator.push(
  context,
  MaterialPageRoute(
    builder: (context) => BListPage()
  )
);

, и то, что я замечаю в блоке этой страницы: clistApiBLoC, вызывается после нажатия этой новой страницы BListPage. Как избежать повторного создания этого в фоновом режиме?

Коды страниц CList.

class _CListPageState extends State<CListPage> with SingleTickerProviderStateMixin {
  Widget _form;
  CListApiBloc clistApiBLoC;
  CListRepository _repo;
  ScrollController _scrollController = new ScrollController();
  @override
  void initState() {
    _repo = new CListRepository();
    clistApiBLoC = new CListApiBloc(_repo);
    super.initState();
  }
  @override
  void dispose() {    
    super.dispose();
  }
  Widget build(BuildContext context) {

    if(_form==null){
      _form = _createForm(context);
    } 
    return _form;
  }
  Widget _createForm(BuildContext context) {
    final _scaffoldKey = new GlobalKey<ScaffoldState>();
      return BlocProviderTree(
        blocProviders: [          
          BlocProvider<CListApiBloc>(
            bloc: clistApiBLoC,
          ),
    ],
    cList: Scaffold(      
      key: _scaffoldKey,
      resizeToAvoidBottomInset: true,
      resizeToAvoidBottomPadding: false,
      backgroundColor: pagebackgroundColor,
      appBar: appBar(),
      drawer: Theme(
          data: Theme.of(context).copyWith(canvasColor: Colors.white),
          cList: new ReusableWidgets().getDrawer('C List',context)
      ),
        body: SafeArea(
                cList: Column(
                   cListren: <Widget>[
                    SizedBox(
                      height: 20.0,
                    ),
                    BlocBuilder(
                      bloc: clistApiBLoC,
                      builder: (BuildContext context, CListApiState state) {
                            if(state is CListInitialState){    
                              if(state.cList.length>0){
                                return Flexible(
                                  child: Container(
                                    margin: EdgeInsets.all(0.0),
                                    child: ListView.builder(
                                      controller: _scrollController,
                                      padding: EdgeInsets.only(top: 0.0, right: 0.0),
                                      physics: AlwaysScrollableScrollPhysics(),
                                      shrinkWrap: true,
                                      itemCount: state.cList?.length??0,
                                      itemBuilder: (BuildContext ctxt, int index) {
                                         return CListIndividualCard(details: state.cList[index]);
                                      },
                                    ),
                                  ),
                                );
                              }
                              else{
                                  return Container(
                                    cList: Center(
                                      cList: Text("No C Record Found"),
                                    ),
                                  );
                              }
                            }
                            if (state is CListApiStateError) {
                              return Flexible(
                                cList: Center(
                                  cList: Text(state.errorMessage,style: errorStyle,),
                                ),
                              );
                            }
                            if (state is LoadingState) {
                              return Flexible(
                                cList: Center(
                                  cList:CircularProgressIndicator(),
                                ),
                              );
                            }
                            return Container(height: 0, width: 0,);
                        },
                      ),                    
                  ],
                )
        )
    )
  );
}

Вот коды CIndidividualCard.

class _CListIndividualCardState extends State<CListIndividualCard> {
  @override
  void initState() {
    super.initState();
  }

  @override
  void dispose() {
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return new Column(
      children: <Widget>[       
        RoundedCardDataNoColor(
          child: Row( 
            crossAxisAlignment: CrossAxisAlignment.start,
            children: <Widget>[
              Column(
                crossAxisAlignment: CrossAxisAlignment.start,
                children: <Widget>[
                        Row(
                          crossAxisAlignment: CrossAxisAlignment.start,
                          mainAxisSize: MainAxisSize.max,
                          children: <Widget>[
                             Column(
                               crossAxisAlignment: CrossAxisAlignment.start,
                               mainAxisSize: MainAxisSize.max,
                               children: <Widget>[
                                      Row(
                                      crossAxisAlignment: CrossAxisAlignment.start,
                                      children: <Widget>[
                                        GestureDetector(
                                          onTap: () {
                                          Navigator.pop(context);
                                          Navigator.push(
                                              context,
                                                MaterialPageRoute(
                                                    builder: (context) => BListPage(                                                      
                                                      cID: widget.details.cID,
                                                      sID: widget.details.sID,                                                      
                                                      lID: widget.details.lID,
                                                ),
                                              )
                                          );
                                          },
                                          child: Icon(Icons.shopping_cart,size: 18,color: Colors.blue,),
                                        ),
                                        SizedBox(width: 5,),
                                        Text(
                                          "Purchase",
                                          style: purchaseStyle,
                                        ),            
                                      ],

                                    ),          



                                ],
                             ),
                             SizedBox(width: 20,),
                          ],
                        ),
                ],
              )

            ]
          )
        )
      ]
    );
  }
...