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

错误:无法在此小部件上方找到正确的提供者颤动

如何解决错误:无法在此小部件上方找到正确的提供者颤动

The following ProviderNotFoundException was thrown building RestWidgets(dirty):
Error: Could not find the correct Provider<AppData> above this RestWidgets Widget

这个小部件在 mainscreen.dart 中

 --necessary imports--

class mainScreen extends StatefulWidget {
  static const String idScreen = "mainScreen";
  @override
  _mainScreenState createState() => _mainScreenState();
}

Position currentPosition;
String address;
GlobalKey<ScaffoldState> scaffoldkey;
double bottomPadingofMap;
GoogleMapController newMapController;


class _mainScreenState extends State<mainScreen> {
    Completer<GoogleMapController> _controllerMap = Completer();

  GlobalKey<ScaffoldState> scaffoldKey = new GlobalKey<ScaffoldState>();

  var geoLocator = Geolocator();
  double bottomPadingofMap = 0;

  static final CameraPosition _kGooglePlex = CameraPosition(
    target: LatLng(37.42796133580664,-122.085749655962),zoom: 14.4746,);

  void locatePosition() async {
    Position position = await Geolocator.getCurrentPosition(
        desiredAccuracy: LocationAccuracy.high);
    //print("pqr");
    currentPosition = position;
    LatLng latLatPostion = LatLng(position.latitude,position.longitude);
    CameraPosition cameraPosition =
        new CameraPosition(target: latLatPostion,zoom: 14);
    newMapController
        .animateCamera(CameraUpdate.newCameraPosition(cameraPosition));
    address = await AssistantMethods.searchCoordinateAddress(position,context);
    print("This is your address :" + address);
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      key: scaffoldkey,drawer: Container(
        color: Colors.white,width: 255.0,body: RestWidgets(),);
  }
}

class RestWidgets extends StatelessWidget {
  @override
  Widget build(BuildContext context) {

    return Stack(
      children: [
        GoogleMap(
          padding: EdgeInsets.only(bottom: bottomPadingofMap),mapType: MapType.normal,myLocationButtonEnabled: true,initialCameraPosition: _mainScreenState._kGooglePlex,myLocationEnabled: true,zoomGesturesEnabled: true,zoomControlsEnabled: true,onMapCreated: (GoogleMapController controller) {
            _mainScreenState()._controllerMap.complete(controller);
            newMapController = controller;
           

            _mainScreenState().locatePosition();
          },),//Hamburger for Drawer
        Positioned(
          top: 45.0,left: 22.0,child: GestureDetector(
            onTap: () {
              scaffoldkey.currentState.openDrawer();
            },child: Container(
              decoration: Boxdecoration(
                color: Colors.white,borderRadius: BorderRadius.circular(22.0),BoxShadow: [
                  BoxShadow(
                    color: Colors.black,blurRadius: 6.0,spreadRadius: 0.5,offset: Offset(0.7,0.7),],child: CircleAvatar(
                backgroundColor: Colors.white,child: Icon(
                  Icons.menu,color: Colors.black,radius: 20.0,Positioned(
          left: 0.0,right: 0.0,bottom: 0.0,child: Container(
            height: 300.0,decoration: Boxdecoration(
              color: Colors.white,borderRadius: BorderRadius.only(
                  topLeft: Radius.circular(10.0),topRight: Radius.circular(10.0)),BoxShadow: [
                BoxShadow(
                  color: Colors.black,blurRadius: 16.0,child: Padding(
              padding:
                  const EdgeInsets.symmetric(horizontal: 24.0,vertical: 10.0),child: Column(
                crossAxisAlignment: CrossAxisAlignment.start,children: [
                  SizedBox(height: 6.0),Text(
                    "Hi there,",style: TextStyle(fontSize: 14.0),Text(
                    "Choose your destination,style: TextStyle(fontSize: 12.0),SizedBox(height: 20.0),GestureDetector(
                    onTap: () {
                      Navigator.push(
                          context,MaterialPageRoute(
                              builder: (context) => SearchScreen()));
                    },child: Container(
                      decoration: Boxdecoration(
                        color: Colors.white,// borderRadius: BorderRadius.only(
                        //     topLeft: Radius.circular(10.0),//     topRight: Radius.circular(10.0)),BoxShadow: [
                          BoxShadow(
                            color: Colors.black,blurRadius: 3.0,offset: Offset(0.1,0.1),child: Row(
                        children: [
                          Icon(
                            Icons.search,SizedBox(
                            width: 10.0,Text("Search Drop off")
                        ],SizedBox(height: 24.0),Row(
                    children: [
                      Icon(
                        Icons.home,color: Colors.grey,SizedBox(
                        width: 12.0,Column(
                        crossAxisAlignment: CrossAxisAlignment.start,children: [
                          Text(allinfo.address),// Text(
                          //      Provider.of<AppData>(context).pickUpLocation !=null ?

                          //         Provider.of<AppData>(context).pickUpLocation.placeName
                          //     :
                          //      "Add Home"
                          //      ),SizedBox(
                            height: 4.0,Text(
                            "Your home address",style: TextStyle(
                                color: Colors.grey[200],fontSize: 12.0),)
                    ],SizedBox(height: 10.0),DividerWidget(),SizedBox(
                    height: 16.0,Row(
                    children: [
                      Icon(
                        Icons.work,children: [
                          Text(Provider.of<AppData>(context,listen: false)
                              .dropOfLocation
                              .placeName),Text(
                            "Your work address",);
  }
}

main.dart

--imports--

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp();
  runApp(MultiProvider(providers: [
    ChangeNotifierProvider(create: (_) => AppData()),child: MyApp()));
  // runApp(MyApp());
}

DatabaseReference userRef =
    FirebaseDatabase.instance.reference().child("users");

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return ChangeNotifierProvider(
      create: (context) => AppData(),child: MaterialApp(
        title: "Flutter App",theme: ThemeData(
          primarySwatch: Colors.blue,visualDensity: VisualDensity.adaptivePlatformDensity,initialRoute: mainScreen.idScreen,routes: {
          Signup.idScreen: (context) => Signup(),login.idScreen: (context) => login(),mainScreen.idScreen: (context) => mainScreen(),},debugShowCheckedModeBanner: false,);
  }
}

appData.dart

import 'package:Flutter/widgets.dart';
import 'package:tracking_app/Models/address.dart';

class AppData extends ChangeNotifier {
  Address pickUpLocation,dropOfLocation;
  void updatePickupLocation(Address pickUpAddress) {
    pickUpLocation = pickUpAddress;
    notifyListeners();
  }

  void updateDropOffLocation(Address dropAddress) {
    dropOfLocation = dropAddress;
    notifyListeners();
  }
}

不知道我应该如何使用这些提供程序。按照建议,我将 body 小部件更改为另一个小部件,然后调用它(mainscreenstate 的主体现在调用 RestWidgets(),即接收更改后的值)。

我尝试过使用静态变量和 setstate() 的替代方法,但这些没有给出预期的结果。我已经绕圈子转了几个小时了,但看不到摆脱这个网络的方法。请帮助一个迷失的灵魂。如果我还有灵魂,那就是。

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