Я работаю над этим проектом, есть ошибка, и я не могу понять, как ее исправить, позвольте мне кратко объяснить, что я делаю в этом проекте и как он работает. так что в основном этот проект имеет нижнюю панель навигации. и там 5 экранов в нижней навигации, (кпи, клиенты, карты, календарь, цитаты). Прямо сейчас я сталкиваюсь с ошибкой, которая связана с клиентами и экраном карты. На экране клиента я использую список FilterUsers для поиска клиентов в списке и отображения результатов на экране клиента. в initState FilterUsers заполняется клиентами из базы данных, но, используя технику поиска, значения добавляются / удаляются из FilterUsers ,
код для фильтрации / поиска в FilterUsers
setState(() {
filteredUsers = users
.where((u) => (u.name
.toLowerCase()
.contains(string.toLowerCase()) ||
u.email
.toLowerCase()
.contains(string.toLowerCase())))
.toList();
});
![enter image description here](https://i.stack.imgur.com/wZGUB.png)
![enter image description here](https://i.stack.imgur.com/Kio52.png)
Теперь я коснусь искомого элемента и перейду к следующему экрану, который является профилем клиента, затем я go перейду к следующему экрану, который является настройками клиента, здесь после обновления информации о клиенте, я нажмите на редактировать, и все будет обновляться, как я хочу сделать. ![enter image description here](https://i.stack.imgur.com/NwSAC.gif)
Что происходит, когда я нажимаю Ok, всплывающее окно с ответом объясняется в приведенном ниже коде, оно обновляет FilterUsers обновленными данными, я введено в настройках профиля клиента.
FlatButton(
child: Text('Ok'),
onPressed: () {
setState(() {
filteredUsers[widget.customerIndex].name=name.text;
filteredUsers[widget.customerIndex].email=email.text;
filteredUsers[widget.customerIndex].status=dropdownValue;
filteredUsers[widget.customerIndex].description=description.text;
filteredUsers[widget.customerIndex].location_2=location_2.text;
filteredUsers[widget.customerIndex].location_3=location_3.text;
filteredUsers[widget.customerIndex].phone=phone.text;
filteredUsers[widget.customerIndex].customerPhone_2=customerPhone_2.text;
filteredUsers[widget.customerIndex].postalCode=postalCode.text;
filteredUsers[widget.customerIndex].province=province.text;
filteredUsers[widget.customerIndex].communities=communities.text;
filteredUsers[widget.customerIndex].exercise=exercise.text;
filteredUsers[widget.customerIndex].reference=reference.text;
filteredUsers[widget.customerIndex].socType=socType.text;
filteredUsers[widget.customerIndex].activeMain=activeMain.text;
filteredUsers[widget.customerIndex].facebook=facebook.text;
filteredUsers[widget.customerIndex].youtube=youtube.text;
filteredUsers[widget.customerIndex].instagram=instagram.text;
filteredUsers[widget.customerIndex].twitter=twitter.text;
filteredUsers[widget.customerIndex].website=website.text;
filteredUsers[widget.customerIndex].otherNetworks=otherNetworks.text;
filteredUsers[widget.customerIndex].pinterest=pinterest.text;
});
Navigator.of(context).pop();
},
),
Проблема: Теперь я буду go на экране карты, и здесь я могу видеть тех же клиентов на карте Google, что и маркер, когда я нажимаю на них. Маркер, он перейдет на тот же экран профиля клиента. здесь я также могу отредактировать клиента, теперь здесь возникает проблема, когда я нажимаю кнопку редактирования после редактирования записи, это дает мне исключение в окне отладки. тип '_InternalLinkedHashMap' не является подтипом типа 'int' во флаттере Проблема, которую я нахожу, заключается в том, что при переходе на экран профиля клиента с экрана myCustomer я передаю FilterUsers index с это, поэтому, когда я редактирую эту запись, он будет проверять индекс и обновлять его, но в случае экрана карты, у меня нет индекса FilterUsers здесь, поэтому, когда я обновляю с этой стороны запись не обновлено.
передача данных с экран моего клиента на профиль клиента , а затем на настройки клиента
ListView.builder(
padding: EdgeInsets.all(10.0),
itemCount: filteredUsers.length,
itemBuilder: (BuildContext context, int index) {
return InkWell(
onTap: () {
print(index);
// show details here
print("${filteredUsers[index].id} tapped");
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => CustomerDetails(
index,
filteredUsers[index].id,
filteredUsers[index].name,
filteredUsers[index].email,
filteredUsers[index].description,
filteredUsers[index].phone,
filteredUsers[index].website,
filteredUsers[index].status,
filteredUsers[index].postalCode,
filteredUsers[index].location_2,
filteredUsers[index].location_3,
filteredUsers[index].province,
filteredUsers[index].communities,
filteredUsers[index].customerPhone_2,
filteredUsers[index].exercise,
filteredUsers[index].reference,
filteredUsers[index].activeMain,
filteredUsers[index].socType,
filteredUsers[index].facebook,
filteredUsers[index].instagram,
filteredUsers[index].twitter,
filteredUsers[index].pinterest,
filteredUsers[index].youtube,
filteredUsers[index].otherNetworks,
meetings)),
);
},
child: Card(
child: Padding(
padding: EdgeInsets.all(10.0),
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Text(
filteredUsers[index].name,
style: TextStyle(
fontSize: 16.0,
color: Colors.black,
),
),
SizedBox(
height: 5.0,
),
Text(
filteredUsers[index].email.toLowerCase(),
style: TextStyle(
fontSize: 14.0,
color: Colors.grey,
),
),
],
),
),
),
);
},
),
передача данных с экрана карты в профиль клиента , а затем в настройки клиента
var i = 0;
for (var item in custInfo) {
if (item['customer_latitude'] == "" &&
item['customer_longitude'] == "") {
continue;
} else {
markerId = MarkerId((markers.length + 1).toString());
LatLng markerPos = LatLng(double.parse(item['customer_latitude']),
double.parse(item['customer_longitude']));
final Marker marker = Marker(
infoWindow: InfoWindow(
title: item['customer_name'],
snippet: item['customer_desc'],
),
// onTap: () => _onMarkerTapped(markerId),
icon: BitmapDescriptor.defaultMarkerWithHue(
item['customer_status'] == 'red'
? BitmapDescriptor.hueRed
: item['customer_status'] == 'yellow'
? BitmapDescriptor.hueYellow
: BitmapDescriptor.hueGreen),
markerId: markerId,
consumeTapEvents: true,
position: markerPos,
onTap: () {
print(i);
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => CustomerDetails(
i,
item['customer_id'],
item['customer_name'],
item['customer_email'],
item['customer_desc'],
item['customer_phone'],
item['customer_website'],
item['customer_status'],
item['postal_code'],
item['location_2'],
item['location_3'],
item['province'],
item['communities'],
item['customer_phone_2'],
item['exercise'],
item['reference'],
item['active_main'],
item['soc_type'],
item['facebook'],
item['instagram'],
item['twitter'],
item['pinterest'],
item['youtube'],
item['other_networks'],
meetings)),
);
});
_markers = null;
markers[markerId] = marker;
}
i++;
}