У меня есть страница (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),
),
);
}
);
}
}