错误:未为类"对象"定义方法 'data'。- "对象"来自"飞镖:核心"



错误:

警告:null感知操作"??"的操作数具有排除null的类型"String"。"${文件["价格"]}"价格";,^lib/screens/product_page.dart:38:65:错误:没有为类"Object?"定义方法"data"。

  • "Object"来自"dart:core"。请尝试将名称更正为现有方法的名称,或定义名为"data"的方法。映射<字符串,动态>documentData=快照.data.data((;^^^^

失败:生成失败,出现异常。

  • 其中:脚本"C:\src\flatter\packages\flutter_tools\gradle\flatter.gradle"行:1035

  • 哪里出了问题:任务":app:compileFlutterBuildDebug"的执行失败。

进程"命令"C:\src\flatter\bin\flatter.bat"以非零退出值1 完成

  • 尝试:使用--stacktrace选项运行以获取堆栈跟踪。使用--info或--debug选项运行以获得更多日志输出。使用--scan运行以获得完整的见解。

  • 获取更多帮助,请访问https://help.gradle.org

BUILD在36秒内失败异常:Gradle任务assemblyDebug失败,退出代码为1

代码:

import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:your_store/constants.dart';
import 'package:your_store/widgets/custom_action_bar.dart';
import 'package:your_store/widgets/image_swipe.dart';
class ProductPage extends StatefulWidget {
final String? productId;
ProductPage({this.productId});
@override
_ProductPageState createState() => _ProductPageState();
}
class _ProductPageState extends State<ProductPage> {
final CollectionReference _productRef =
FirebaseFirestore.instance.collection("Products");
@override
Widget build(BuildContext context) {
return Scaffold(
body: Stack(
children: [
FutureBuilder(
future: _productRef.doc(widget.productId).get(),
builder: (context, snapshot) {
if (snapshot.hasError) {
return Scaffold(
body: Center(
child: Text("Error: ${snapshot.error}"),
),
);
}
if (snapshot.connectionState == ConnectionState.done) {
//Firebase document data map
Map<String, dynamic> documentData = snapshot.data.data();
//List of images
List imageList = documentData["images"];
return ListView(
padding: EdgeInsets.all(0),
children: [
ImageSwipe(imageList: imageList,),
Padding(
padding: const EdgeInsets.only(
top: 24.0,
left: 24.0,
right: 24.0,
bottom: 4.0,
),
child: Text(
"$${documentData["name"]}",
style: Constants.boldHeading,
),
),
Padding(
padding: const EdgeInsets.symmetric(
vertical: 4.0,
horizontal: 24.0,
),
child: Text(
"$${documentData["price"]}",
style: TextStyle(
fontSize: 18.0,
color: Theme.of(context).accentColor,
fontWeight: FontWeight.w600,
),
),
),
Padding(
padding: const EdgeInsets.symmetric(
vertical: 8.0,
horizontal: 24.0,
),
child: Text(
"$${documentData["desc"]}",
style: TextStyle(fontSize: 16.0),
),
),
Padding(
padding: const EdgeInsets.symmetric(
vertical: 24.0,
horizontal: 24.0,
),
child: Text(
"Selected Size",
style: Constants.regularDarkText,
),
),
],
);
}
//Loading State
return Scaffold(
body: Center(
child: CircularProgressIndicator(),
),
);
},
),
CustomActionBar(
hasBackArrow: true,
hasTitle: false,
hasBackground: false,
),
],
));
}
}

我认为您的第二个比较条件是不完整的,而不是第二个if,请在这个条件下使用if else。

else if(snapshot.connectionState == ConnectionState.done && snapshot.hasData){...}

对于您的情况,Flutter最新的null安全功能警告您documentData["desc"]访问可能存在null值。

如果documentData为您返回null,您可以检查它并指定一个值:

Padding(
padding: const EdgeInsets.symmetric(
vertical: 8.0,
horizontal: 24.0,
),
child: Text(
documentData["desc"] ?? "", // Create Text with empty string if documentData["desc"] is null
style: TextStyle(fontSize: 16.0),
),
)

您可能还需要对访问地图的其他地方执行此操作。

最新更新