Очистить список при загрузке страницы - PullRequest
0 голосов
/ 30 апреля 2020

У меня есть страница (SearchComparePage), в которой есть несколько листов списка с флажками. Когда FloatingActionButton нажата, он отправляет «mockIdList», который представляет собой список, который добавляет вещи к нему, когда флажки установлены. Поэтому моя проблема заключается в том, что когда я нажимаю кнопку и отправляю список на другую страницу, а затем возвращаюсь на свою страницу SearchComparePage, тогда mockIdList по-прежнему заполняется данными из отмеченных полей ранее. Можно ли каким-то образом очищать mockIdList при каждой загрузке страницы?

Извините, если мой вопрос странный. Я не умею задавать вопросы.

class SearchComparePage extends StatefulWidget{
SearchComparePage({Key key, this.title}) : super(key: key);

final String title;


_SearchState createState()=> _SearchState();
}
class _SearchState extends State<SearchComparePage> {



 List<String> mockIdList = [];

  String searchString;
  String name = "";

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        //backgroundColor: Color(0xFF8BC34A),
        appBar: AppBar(
          leading: IconButton(
            onPressed: () {
              Navigator.of(context).pop();
            },
            icon: Icon(Icons.arrow_back_ios),
            color: Colors.white,
          ),
          backgroundColor: Colors.green,
          //elevation: 0,
          title: Text("Enklere valg"),
        ),
        body: Column(
          children: <Widget> [
              Expanded(
                child: Column(
                  children: <Widget>[
                    Padding(
                      padding: const EdgeInsets.all(8.0),
                      child: TextField(
                        onChanged: (value) {
                          setState(() {
                            searchString = value.toLowerCase();
                          });
                        },
                        decoration: InputDecoration(
                          prefixIcon: Icon(Icons.search),
                          contentPadding: EdgeInsets.only(left: 25.0),
                          hintText: 'Søk etter produkt',
                          border: OutlineInputBorder(
                            borderRadius: BorderRadius.circular(4.0)

                          )
                        ),
                      ),
                    ),
                    Expanded(
                      child: Container(
                        decoration: BoxDecoration(
                          color: Colors.white,
                        ),
                        child: StreamBuilder<QuerySnapshot>(
                          stream:
                            (searchString == null || searchString.trim() == "")
                                ? Firestore.instance
                                    .collection('products')
                                    .snapshots()
                                : Firestore.instance
                                  .collection("products")
                                  .where("searchIndex",
                                      arrayContains: searchString)
                                  .snapshots(),
                            builder: (context, snapshot) {
                              if (snapshot.hasError)
                                return Text('Error: ${snapshot.error}');
                              switch (snapshot.connectionState) {
                                case ConnectionState.waiting:
                                  return Center(child: CircularProgressIndicator());
                                default:

                                  return new ListView(
                                    children: snapshot.data.documents
                                        .map((DocumentSnapshot document) {
                                      return buildResultCard(context, document);
                                      }).toList(),
                                  );

                              }
                            }
                        )
                      )
                    )
                  ],
                ),
              )
          ],
        ),

        // Button that sends the information in mockIdList to the other page.
        floatingActionButton: FloatingActionButton(child: Icon(Icons.add),onPressed: () {
              Navigator.push(
                context,
                MaterialPageRoute(builder: (context) => CompareResultPage(idList: mockIdList,)),
              );
            },
        ),

      ),
    );
  }



  // Widget that builds the listtiles
  Widget buildResultCard(context, data) {
  bool _isChecked = false; 

    navigateToDetail(context, data) {
      Navigator.push(context, MaterialPageRoute(builder: (context) => ProductPage(product_id: data['product_id'],)));
    }

    return StatefulBuilder(
      builder: (context, StateSetter setState) {
        return Center(
          child: ListTile(
            leading: CircleAvatar(
              backgroundImage: NetworkImage(data['product_image'] ?? ''),
            ),
            title: Text(data['product_maker'] ?? ''),
            subtitle: Text(data['product_name'] ?? ''),
            trailing: Checkbox(
                    value: _isChecked,
                    onChanged: (bool value) {
                      if (value == true) {
                        setState(() {
                          mockIdList.add(data['product_id']);
                          _isChecked = value;
                        });
                      }

                      if (value == false) {
                        setState(() {
                          mockIdList.remove(data['product_id']);
                          _isChecked = value;
                        });
                      }

                  },
                  ),
            onTap: () => navigateToDetail(context, data),
          ),
        );
      }
    );
  }

}

1 Ответ

1 голос
/ 30 апреля 2020

Когда вы вернетесь из другого вида, вы захотите сбросить mockIdList

Navigator.push(
  context,
  MaterialPageRoute(
    builder: (context) => ProductPage(
      product_id: data['product_id'],
    ),
  ),
).then((_) => setState(() => mockIdList.clear())); // <----Add this line of code
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...