微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

没有发现材质小部件颤动

如何解决没有发现材质小部件颤动

我正在尝试访问此控制器,但我不知道它为什么会崩溃。他给我的错误是:

没有找到材料小部件 iconButtonwidget 需要一个材质小部件

一个简单的视图,显示了带有各种保存点的地图

我是否错误地初始化了视图?

谁能告诉我我做错了什么?

这是我使用的代码

class MapTab extends StatefulWidget {
  @override
  _MapTabState createState() => _MapTabState();
}

class _MapTabState extends State<MapTab> {
  Size _size;
  MapBoxMapController _mapController;

  StreamController<Restaurant> _bottomCardStreamController;

  _onMapCreated(MapBoxMapController controller) {
    _mapController = controller;

    contentManager.getMerchants().then(
          (restaurants) => restaurants.forEach(
            (restaurant) => controller.addSymbol(
              SymbolOptions(
                geometry: LatLng(double.parse(restaurant.coordinates.lat),double.parse(restaurant.coordinates.long)),iconImage: "assets/images/map_pin.png",),restaurant.toJson(),);

    controller.onSymbolTapped.add((symbol) async {
      Restaurant restaurant = Restaurant.fromJson(symbol.data);
      _toggleBottomCard(restaurant);
    });

    _bottomCardStreamController.stream.listen((restaurant) {
      if (restaurant == null) return;
      List<CameraUpdate> updates = [
        CameraUpdate.zoomTo(15),CameraUpdate.newLatLng(LatLng(
          double.parse(restaurant.coordinates.lat),double.parse(restaurant.coordinates.long),)),];

      updates
          .forEach((element) async => await controller.animateCamera(element));
    });
  }

  _toggleBottomCard(Restaurant data) {
    _bottomCardStreamController.sink.add(data);
  }

  @override
  void initState() {
    super.initState();
    _bottomCardStreamController = StreamController<Restaurant>.broadcast();
  }

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

  @override
  Widget build(BuildContext context) {
    _size = MediaQuery.of(context).size;
    return Stack(
      alignment: AlignmentDirectional.center,children: [
        FutureBuilder<Position>(
            future: PositionService.getCurrentPosition(),builder: (context,AsyncSnapshot<Position> positionSnap) {
              if (positionSnap.hasError)
                return Center(
                  child: Text(localization.err_localization),);
              if (positionSnap.connectionState != ConnectionState.done)
                return Container(
                  child: Center(
                    child: CircularProgressIndicator(valueColor: new AlwaysstoppedAnimation<Color>(appColors.yellow)),);

              var data = positionSnap.data;
              var latLng = LatLng(data.latitude,data.longitude);

              return FutureBuilder<String>(
                  future: contentManager.getMapBoxKey(),tokenSnap) {
                    if (tokenSnap.hasError)
                      return Container(
                        child: Center(
                          child: Text(localization.err_mapBox_key),);
                    if (tokenSnap.connectionState != ConnectionState.done)
                      return Container(
                        child: Center(
                          child: CircularProgressIndicator(valueColor: new AlwaysstoppedAnimation<Color>(appColors.yellow)),);
                    return Container(
                      height: _size.height,width: _size.width,child: MapBoxMap(
                        rotateGesturesEnabled: false,myLocationEnabled: true,onStyleLoadedCallback: () {},zoomGesturesEnabled: true,onMapClick: (_,__) {
                          // fa scomparire la bottomCard
                          _bottomCardStreamController.sink.add(null);
                        },accesstoken: tokenSnap.data,onMapCreated: _onMapCreated,compassEnabled: false,initialCameraPosition: CameraPosition(
                          target: latLng,zoom: 15,bearing: 0,tilt: 0,);
                  });
            }),Positioned(
          bottom: 10,right: 10,height: 50,width: 50,child: GestureDetector(
            child: Container(
              decoration: Boxdecoration(
                color: Color.fromARGB(255,255,255),shape: BoxShape.circle,child: Icon(Icons.my_location),onTap: () async {
              var position = await PositionService.getCurrentPosition();
              var latLng = LatLng(position.latitude,position.longitude);
              _mapController.animateCamera(CameraUpdate.newLatLng(latLng));
            },Positioned(
          top: 10,left: 0,child: Row(
            mainAxisSize: MainAxisSize.min,children: [
              IconButton(
                icon: Icon(
                  Icons.list,onpressed: () {},Flexible(
                child: GestureDetector(
                  onTap: () async {
                    await showSearch<Restaurant>(
                      context: context,delegate: CustomSearchDelegate(),query: "",).then(
                      (value) => _bottomCardStreamController.sink.add(value),);
                  },child: Container(
                    decoration: Boxdecoration(
                      color: Colors.white,borderRadius: BorderRadius.circular(20),child: Padding(
                      padding: EdgeInsets.symmetric(
                        horizontal: 3,vertical: 2,child: TextField(
                        enabled: false,decoration: Inputdecoration(
                          icon: Icon(
                            Icons.search,color: Colors.grey,hintText: localization.find,border: InputBorder.none,IconButton(
                icon: Icon(
                  Icons.filter_alt,)
            ],Positioned(
          bottom: 25,child: StreamBuilder<Restaurant>(
            stream: _bottomCardStreamController.stream,builder: (_,snap) {
              if (snap.data == null)
                return Container();
              else
                return RestaurantMapCard(snap.data,mapController: _mapController);
            },],);
  }
}

解决方法

MaterialApp 小部件包裹您的根(第一个小部件)。

Widget build(BuidContext context){
  return  MaterialApp(
    home: Stack() // your stack and other widgets are here.
  );
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。