Flutter & Android Studio:找不到 providerinstaller 的本地模块描述符类



我一直在尝试开发一个可以与firebase一起使用的应用程序。我不是一个专业的编码。

事实上,我的应用程序在模拟器上运行良好,但我收到了一条错误消息,如下所示:

W/DynamiteModule(11855): Local module descriptor class for providerinstaller not found.
I/DynamiteModule(11855): Considering local module providerinstaller:0 and remote module providerinstaller:0
W/ProviderInstaller(11855): Failed to load providerinstaller module: No acceptable module found. Local version is 0 and remote version is 0.
W/DynamiteModule(11855): Local module descriptor class for providerinstaller not found.
I/DynamiteModule(11855): Considering local module providerinstaller:0 and remote module providerinstaller:0
W/ProviderInstaller(11855): Failed to load providerinstaller module: No acceptable module found. Local version is 0 and remote version is 0.

你可以在下面看到我的依赖项:

dependencies:
flutter:
sdk: flutter
cloud_firestore: ^0.14.0+2
image: ^2.0.7
animator: 0.1.4
image_picker: ^0.6.7+7
google_sign_in: ^4.5.3
timeago: 2.0.17
cached_network_image:
firebase_auth: ^0.18.0+1
geolocator: 5.0.1
uuid: ^2.0.0
cupertino_icons: ^0.1.2
path_provider: ^1.6.16
firebase_messaging: ^7.0.0
firebase_storage: ^4.0.0
firebase_core: ^0.5.0
flutter_svg: ^0.19.0

当我尝试用相机上传图像时,除了上面的providerinshear问题外,我还收到了下面的额外错误:

E/flutter (11855): [ERROR:flutter/lib/ui/ui_dart_state.cc(166)] Unhandled Exception: NoSuchMethodError: The getter 'path' was called on null.
E/flutter (11855): Receiver: null
E/flutter (11855): Tried calling: path
E/flutter (11855): #0      Object.noSuchMethod (dart:core-patch/object_patch.dart:51:5)
E/flutter (11855): #1      _UploadPageState.pickImageFromGallery (package:buddiesgram/pages/UploadPage.dart:37:38)
E/flutter (11855): <asynchronous suspension>
E/flutter (11855): #2      _InkResponseState._handleTap (package:flutter/src/material/ink_well.dart:992:19)
E/flutter (11855): #3      _InkResponseState.build.<anonymous closure> (package:flutter/src/material/ink_well.dart:1098:38)
E/flutter (11855): #4      GestureRecognizer.invokeCallback (package:flutter/src/gestures/recognizer.dart:184:24)
E/flutter (11855): #5      TapGestureRecognizer.handleTapUp (package:flutter/src/gestures/tap.dart:524:11)
E/flutter (11855): #6      BaseTapGestureRecognizer._checkUp (package:flutter/src/gestures/tap.dart:284:5)
E/flutter (11855): #7      BaseTapGestureRecognizer.handlePrimaryPointer (package:flutter/src/gestures/tap.dart:219:7)
E/flutter (11855): #8      PrimaryPointerGestureRecognizer.handleEvent (package:flutter/src/gestures/recognizer.dart:477:9)
E/flutter (11855): #9      PointerRouter._dispatch (package:flutter/src/gestures/pointer_router.dart:78:12)
E/flutter (11855): #10     PointerRouter._dispatchEventToRoutes.<anonymous closure> (package:flutter/src/gestures/pointer_router.dart:124:9)
E/flutter (11855): #11     _LinkedHashMapMixin.forEach (dart:collection-patch/compact_hash.dart:377:8)
E/flutter (11855): #12     PointerRouter._dispatchEventToRoutes (package:flutter/src/gestures/pointer_router.dart:122:18)
E/flutter (11855): #13     PointerRouter.route (package:flutter/src/gestures/pointer_router.dart:108:7)
E/flutter (11855): #14     GestureBinding.handleEvent (package:flutter/src/gestures/binding.dart:220:19)
E/flutter (11855): #15     GestureBinding.dispatchEvent (package:flutter/src/gestures/binding.dart:200:22)
E/flutter (11855): #16     GestureBinding._handlePointerEvent (package:flutter/src/gestures/binding.dart:158:7)
E/flutter (11855): #17     GestureBinding._flushPointerEventQueue (package:flutter/src/gestures/binding.dart:104:7)
E/flutter (11855): #18     GestureBinding._handlePointerDataPacket (package:flutter/src/gestures/binding.dart:88:7)
E/flutter (11855): #19     _rootRunUnary (dart:async/zone.dart:1206:13)
E/flutter (11855): #20     _CustomZone.runUnary (dart:async/zone.dart:1100:19)
E/flutter (11855): #21     _CustomZone.runUnaryGuarded (dart:async/zone.dart:1005:7)
E/flutter (11855): #22     _invoke1 (dart:ui/hooks.dart:267:10)
E/flutter (11855): #23     _dispatchPointerDataPacket (dart:ui/hooks.dart:176:5)
E/flutter (11855): 

你可以在下面看到我上传页面的代码:

import 'dart:io';
import 'package:flutter/material.dart';
import 'package:image_picker/image_picker.dart';
class UploadPage extends StatefulWidget {
@override
_UploadPageState createState() => _UploadPageState();
}
class _UploadPageState extends State<UploadPage> {
PickedFile file;
captureImageWithCamera() async {
Navigator.pop(context);
final picker = ImagePicker();
PickedFile imageFile = await picker.getImage(
source: ImageSource.camera,
maxHeight: 680,
maxWidth: 970,
);
imageFile = PickedFile(imageFile.path);
setState(() {
this.file = imageFile;
});
}
pickImageFromGallery() async {
Navigator.pop(context);
final picker = ImagePicker();
PickedFile imageFile = await picker.getImage(
source: ImageSource.gallery,
maxHeight: 680,
maxWidth: 970,
);
imageFile = PickedFile(imageFile.path);
setState(() {
this.file = imageFile;
});
}
takeImage(mContext){
return showDialog(
context: mContext,
builder: (context){
return SimpleDialog(
title: Text("New Post", style: TextStyle(color: Colors.white, fontWeight: FontWeight.bold),),
children: [
SimpleDialogOption(
child: Text("Capture image with camera", style: TextStyle(color: Colors.white),),
onPressed: captureImageWithCamera,
),
SimpleDialogOption(
child: Text("Select image from gallery", style: TextStyle(color: Colors.white),),
onPressed: pickImageFromGallery,
),
SimpleDialogOption(
child: Text("Cancel", style: TextStyle(color: Colors.white),),
onPressed: () => Navigator.pop(context),
),
],
);
}
);
}
displayUploadScreen(){
return Container(
color: Theme.of(context).accentColor.withOpacity(0.5),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Icon(Icons.add_a_photo, color: Colors.grey,size: 200.0,),
Padding(
padding: EdgeInsets.only(top: 20.0),
child: RaisedButton(
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(9.0),),
child: Text("Upload Image", style: TextStyle(color: Colors.white, fontSize: 20.0),),
color: Colors.green,
onPressed: () => takeImage(context),
),
),
],
),
);
}

@override
Widget build(BuildContext context) {
return displayUploadScreen();
}
}

如果你想查看我的代码或其他文件,我想与你分享。你能给我指路吗?

提前谢谢。

谨致问候,Ekin。

试试这个代码导入"dart:io";

import 'package:firebase_storage/firebase_storage.dart'; // For File Upload To Firestore    
import 'package:flutter/material.dart';    
import 'package:image_picker/image_picker.dart'; // For Image Picker    
import 'package:path/path.dart' as Path; 
class UploadImage extends StatelessWidget {
Future chooseFile() async {    
await ImagePicker.pickImage(source: ImageSource.gallery).then((image) {    
setState(() {    
_image = image;    
});    
});    
}  
Future uploadFile() async {    
StorageReference storageReference = FirebaseStorage.instance    
.ref()    
.child('posts/${Path.basename(_image.path)}}');    
StorageUploadTask uploadTask = storageReference.putFile(_image);    
await uploadTask.onComplete;    
print('File Uploaded');    
storageReference.getDownloadURL().then((fileURL) {    
setState(() {    
_uploadedFileURL = fileURL;    
});    
});    
}  

@override    
Widget build(BuildContext context) {    
return Scaffold(    
appBar: AppBar(    
title: Text('Firestore File Upload'),    
),    
body: Center(    
child: Column(    
children: <Widget>[    
Text('Selected Image'),    
_image != null    
? Image.asset(    
_image.path,    
height: 150,    
)    
: Container(height: 150),    
_image == null    
? RaisedButton(    
child: Text('Choose File'),    
onPressed: chooseFile,    
color: Colors.cyan,    
)    
: Container(),    
_image != null    
? RaisedButton(    
child: Text('Upload File'),    
onPressed: uploadFile,    
color: Colors.cyan,    
)    
: Container(),    
_image != null    
? RaisedButton(    
child: Text('Clear Selection'),    
onPressed: clearSelection,    
)    
: Container(),    
Text('Uploaded Image'),    
_uploadedFileURL != null    
? Image.network(    
_uploadedFileURL,    
height: 150,    
)    
: Container(),    
],    
),    
),    
);
}
}

错误似乎是由于添加了空检查(if (imageFile != null))的空路径而出现的在访问path属性之前,您可以确保该属性只有在它不为空时才能访问,

captureImageWithCamera() async {
final currentContext = context;
Navigator.pop(currentContext);
final picker = ImagePicker();
PickedFile? imageFile = await picker.getImage(
source: ImageSource.camera,
maxHeight: 680,
maxWidth: 970,
);
if (imageFile != null) {
imageFile = PickedFile(imageFile.path);
setState(() {
this.file = imageFile;
});
}
}
pickImageFromGallery() async {
final currentContext = context;
Navigator.pop(currentContext);
final picker = ImagePicker();
PickedFile? imageFile = await picker.getImage(
source: ImageSource.gallery,
maxHeight: 680,
maxWidth: 970,
);
if (imageFile != null) {
imageFile = PickedFile(imageFile.path);
setState(() {
this.file = imageFile;
});
}
}

最新更新