У меня есть просмотр списка в виде контейнера в теле скаффолда и внутри просмотра списка, у меня есть Gridview и Google, когда я каждый раз прокручиваю чтение карты просмотра списка. Когда я не использую Gridview внутри listview, он работает нормально, или я добавляю карту Google выше
Gridview работает нормально, но когда я добавляю карту ниже GridView, она перезагружается каждый раз при прокрутке.
Я пытался инициализировать карту Google только один раз, когда вызывается метод Build, но он не работает
Код дротика
в государственном классе
bool isMapLoaded = false;
if (!isMapLoaded) {
isMapLoaded = true;
googleMap = GoogleMap(
gestureRecognizers: Set()
..add(Factory<PanGestureRecognizer>(() => PanGestureRecognizer()))
..add(Factory<ScaleGestureRecognizer>(() => ScaleGestureRecognizer()))
..add(Factory<TapGestureRecognizer>(() => TapGestureRecognizer()))
..add(Factory<VerticalDragGestureRecognizer>(
() => VerticalDragGestureRecognizer())),
mapType: MapType.normal,
zoomGesturesEnabled: true,
markers: Set<Marker>.of(markers.values),
minMaxZoomPreference: MinMaxZoomPreference.unbounded,
initialCameraPosition: _initialCamera,
onMapCreated: (GoogleMapController googleMapController) {
print("Map Created");
_mapController = googleMapController;
_gController.complete(googleMapController);
},
);
isMapLoading = true;
}
ошибка ничего не показывает в Logcat
Мой Listview с реализацией Gridview находится здесь
// другие контролируют как текст и редактируют текст
final itemGridDelegate = new SliverGridDelegateWithFixedCrossAxisCount(
crossAxisSpacing: 5.0,
mainAxisSpacing: 5.0,
crossAxisCount: 2,
childAspectRatio: 5.0);
final propertyTypeGridview = new Container(
child: new Container(
padding: EdgeInsets.only(top: 20.0),
color: Colors.white,
child: GridView.builder(
physics: ClampingScrollPhysics(),
gridDelegate: itemGridDelegate,
shrinkWrap: true,
itemCount: propertyTypeList.length,
itemBuilder: (BuildContext context, int index) {
return _buildPropertyTypeItems(index, context);
},
),
),
);
googleMap = GoogleMap(
gestureRecognizers: Set()
..add(Factory<PanGestureRecognizer>(() => PanGestureRecognizer()))
..add(Factory<ScaleGestureRecognizer>(() => ScaleGestureRecognizer()))
..add(Factory<TapGestureRecognizer>(() => TapGestureRecognizer()))
..add(Factory<VerticalDragGestureRecognizer>(
() => VerticalDragGestureRecognizer())),
mapType: MapType.normal,
zoomGesturesEnabled: true,
markers: Set<Marker>.of(markers.values),
minMaxZoomPreference: MinMaxZoomPreference.unbounded,
initialCameraPosition: _initialCamera,
onMapCreated: (GoogleMapController googleMapController) {
print("Map Created");
_mapController = googleMapController;
_gController.complete(googleMapController);
},
);
final mapView = new Container(
height: 200,
width: double.infinity,
margin: EdgeInsets.only(top: 20.0),
child: new ClipRRect(
borderRadius: BorderRadius.all(Radius.circular(20.0)),
child: googleMap));
// final listview
[![propertyTypeGridview and property featuresGridview are both Gridview
final mainListview = new ListView(
padding: EdgeInsets.all(15.0),
children: <Widget>\[
tvAddImage,
propertyThumbnailList,
tvPropertyAddress,
edPropertyAddress,
tvSuberb,
edPropertySuberb,
tvState,
edState,
tvPostcode,
edPropertyPostcode,
tvSalesPrice,
edPropertySalesPrice,
tvRentalPrice,edTRental,
tvPropertyInfo,
edPropertyInfo,
tvSelect,
propertyTypeGridview,
tvPropertyFeatures,
propertyFeaturesGrid,
mapView,
\],
);
final scaffold = new Scaffold(
body: mainListview,
);][1]][1]
Я попробовал, это работает нормально, если я применю следующие изменения.
final mainListview = new ListView(
padding: EdgeInsets.all(15.0),
children: <Widget>[
tvAddImage,
propertyThumbnailList,
tvPropertyAddress,
edPropertyAddress,
tvSuberb,
edPropertySuberb,
tvState,
edState,
tvPostcode,
edPropertyPostcode,
tvSalesPrice,
edPropertySalesPrice,
tvRentalPrice,edTRental,
tvPropertyInfo,
edPropertyInfo,
mapView,
tvSelect,
propertyTypeGridview,
tvPropertyFeatures,
propertyFeaturesGrid,
],
);
Но это не будет работать, если я применю следующие изменения
final mainListview = new ListView(
padding: EdgeInsets.all(15.0),
children: <Widget>[
tvAddImage,
propertyThumbnailList,
tvPropertyAddress,
edPropertyAddress,
tvSuberb,
edPropertySuberb,
tvState,
edState,
tvPostcode,
edPropertyPostcode,
tvSalesPrice,
edPropertySalesPrice,
tvRentalPrice,edTRental,
tvPropertyInfo,
edPropertyInfo,
tvSelect,
propertyTypeGridview,
tvPropertyFeatures,
propertyFeaturesGrid,
mapView,],
);
and I want this screen
https://i.stack.imgur.com/LIsBX.png