Flutter:[cloud_firestore/unknown] NoSuchMethodError:null 上的无效成员:'includeMetadataChanges'(Flutter Web

Posted

技术标签:

【中文标题】Flutter:[cloud_firestore/unknown] NoSuchMethodError:null 上的无效成员:\'includeMetadataChanges\'(Flutter Web)【英文标题】:Flutter :[cloud_firestore/unknown] NoSuchMethodError: invalid member on null: 'includeMetadataChanges' (Flutter Web)Flutter:[cloud_firestore/unknown] NoSuchMethodError:null 上的无效成员:'includeMetadataChanges'(Flutter Web) 【发布时间】:2021-03-08 02:29:24 【问题描述】:

我正在尝试从 Friebase-firestore 获取数据,然后将其转换为模型,我对另一个项目(Web 项目)使用了相同的代码和方法,它工作正常,但是对于这个项目它不起作用,我不知道为什么。我升级了flutter版本,运行了flutter doctor,环境设置没有问题。 这是代码:

class dbService

static final CollectionReference myCollection = 
  FirebaseFirestore.instance.collection('myCollection');

static Future<myModel> getMyInfo() async
myModel sanaa ;
print('this line to print');
final QuerySnapshot myInfo =await myCollection.limit(1).get();
myInfo.docs.forEach((element) 
  print(element.data()['name']);
 sanaa= new myModel(
      name:element.data()['name'].toString(),
      title: element.data()["title"].toString(),
      img: element.data()['img'].toString(),
     );
  print('\n print  ------ ');
  print(element.data()['name']);
  print('   that is');


);
return sanaa;



class dbManager
 Stream<myModel> myInfoStream() async*
 yield await dbService.getMyInfo();
 

   class _aboutStateState extends State<aboutState>  
   Stream stream ;
   dbManager mng = new dbManager();
  @override
   void initState() 
   // TODO: implement initState
    stream = mng.myInfoStream();
    super.initState();
   
    @override
  Widget build(BuildContext context) 
    return Container(
    color: Colors.pink[300],
    child: StreamBuilder<myModel>(
     stream: stream,
     builder: (context, snapshot)
       if(snapshot.hasError)
         print(snapshot.error);
        return Center(child: Text('Something went wrong , please try again later'),);
      
      else if(snapshot.hasData)
  
        return  Text("$snapshot.data.name");
      
      
      else 
        return Center(child: CircularProgressIndicator());
      
    ,
  ),

我收到了这个错误

this line to print
[cloud_firestore/unknown] NoSuchMethodError: invalid member on null: 'includeMetadataChanges'

但是当我直接连接到firestore而不将其转换为模型时,它可以正常工作并在屏幕上打印数据,代码:

child:FutureBuilder(
   future: me.doc(id).get(),
    
    builder: (context, snapshot)
      if(snapshot.hasError)
        print(snapshot.error);
        return Center(child: Text('Something went wrong , please try again later'),);
      
      else if(snapshot.hasData)
       // print("$snapshot.data.data()['app_pics'][1]  \n$snapshot.data.data()['img']");
        return  Text("$snapshot.data.data()['app_pics'][1]");
        
      
      else 
        return Center(child: CircularProgressIndicator());
      
    ,
  ),

我运行颤振医生

Doctor summary (to see all details, run flutter doctor -v):
[√] Flutter (Channel beta, 1.24.0-10.2.pre, on Microsoft Windows [Version 6.3.9600], locale
  en-US)
[√] android toolchain - develop for Android devices (Android SDK version 29.0.2)
[√] Chrome - develop for the web
[√] Android Studio (version 4.0)
[√] VS Code (version 1.51.0)
[√] Connected device (3 available)

• No issues found!

我需要帮助

【问题讨论】:

【参考方案1】:

我找到了答案,它是由于 Firebase JS SDK 的版本引起的。 我将 index.html 文件中的 8.1.1 替换为 7.22.1

  <!-- The core Firebase JS SDK is always required and must be listed first -->
  <!--  <script src="https://www.gstatic.com/firebasejs/8.1.1/firebase-app.js"></script>-->

<!--  &lt;!&ndash; TODO: Add SDKs for Firebase products that you want to use-->
<!--       https://firebase.google.com/docs/web/setup#available-libraries &ndash;&gt;- ->
<!--  <script src="https://www.gstatic.com/firebasejs/8.1.1/firebase-firestore.js"> 
</script>-->
 <!--  <script src="https://www.gstatic.com/firebasejs/8.1.1/firebase-analytics.js"></script>-->

我正在为 Firebase JS SDK

使用 7.22.1 版本
<script src="https://www.gstatic.com/firebasejs/7.22.1/firebase-app.js"></script>

<!-- TODO: Add SDKs for Firebase products that you want to use
   https://firebase.google.com/docs/web/setup#available-libraries -->
<script src="https://www.gstatic.com/firebasejs/7.22.1/firebase-firestore.js"></script>
<script src="https://www.gstatic.com/firebasejs/7.22.1/firebase-analytics.js"></script>

【讨论】:

谷歌推荐 8.1.1,但只有这个有效 @DheerajSarwaiya 是的,没错,我不知道为什么 8.1.1 不起作用 使用新技术的诅咒!无论如何,非常感谢你! 我猜只有firestore有问题,我使用v7.22.1作为firestore,使用v8.2.3作为rest 这对我有用,但我还必须将我的 pubspec.yml 依赖项设置为您在原始问题中所拥有的完全正确( firebase_core: ^0.5.2+1 ; cloud_firestore: ^0.14.3+1 )【参考方案2】:

您也可以使用此处提到的 8.0.1 并订阅问题。然后,一旦修复,您就会(希望)得到通知。

https://github.com/FirebaseExtended/flutterfire/issues/4127#issuecomment-754171740

【讨论】:

【参考方案3】:

试试这个版本

firebase_core: ^0.5.2
cloud_firestore: ^0.14.3

欲了解更多信息,请查看此 github Link

【讨论】:

我更改了依赖项,出现同样的错误..我不知道为什么 您是重新安装应用程序还是只是重新启动? 是的,但它是网络应用程序,而不是移动应用程序 @ARI 找到了答案,这是因为 index.html 文件中的 Firebase JS SDK 版本,我将 8.1.1 替换为 7.22.1 .. 检查下面的答案...谢谢很多帮助

以上是关于Flutter:[cloud_firestore/unknown] NoSuchMethodError:null 上的无效成员:'includeMetadataChanges'(Flutter Web的主要内容,如果未能解决你的问题,请参考以下文章

Flutter:cloud_firestore 的构建错误:高于版本“0.7.4”

Flutter (iOS) - 在 GeneratedPluginRegistrant.m 中找不到模块“cloud_firestore”

I/flutter (22027):MissingPluginException(在通道 plugins.flutter.io/cloud_firestore 上找不到方法 DocumentRefer

Flutter 中的 cloud_firestore 和 firebase_auth 兼容性问题

添加依赖项 cloud_firestore 时,新的 Flutter 应用程序失败:^1.0.7

Flutter cloud_firestore 系统日期对象的设置/警告