以下断言被抛出构建 StreamBuilder<QuerySnapshot>(dirty, state: _StreamBuilderBaseState<QuerySnapshot, AsyncSnapshot [英] The following assertion was thrown building StreamBuilder<QuerySnapshot>(dirty, state: _StreamBuilderBaseState<QuerySnapshot, AsyncSnapshot
本文介绍了以下断言被抛出构建 StreamBuilder<QuerySnapshot>(dirty, state: _StreamBuilderBaseState<QuerySnapshot, AsyncSnapshot的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我在我的多供应商应用程序中收到此错误.当我在应用程序中添加新产品时.它转到未发布部分,然后您必须从那里发布它.当我添加单个产品时没有问题(我猜是因为它没有发生在单个产品上.)但是当我添加第二个产品并转到未发布的页面时,我收到此错误.'''
I am getting this error in my multivendor applicaiton. When i add a new Product in the application. It goes to unpublished section and then you have to publish it from there. When i add a single product there is no problem ( I guess becuase it didnt happen with a single product.) But when i add the second product and go to unpublished page i get this error. '''
The following assertion was thrown building StreamBuilder<QuerySnapshot>(dirty, state:
_StreamBuilderBaseState<QuerySnapshot, AsyncSnapshot<QuerySnapshot>>#c1af9):
A non-null String must be provided to a Text widget.
'package:flutter/src/widgets/text.dart':
Failed assertion: line 378 pos 10: 'data != null'
The relevant error-causing widget was:
StreamBuilder<QuerySnapshot>
file:///I:/AAAAAAYy/Vendor1/grocery_vendor_app/lib/widgets/unpublished_products.dart:11:14
When the exception was thrown, this was the stack:
#2 new Text (package:flutter/src/widgets/text.dart:378:10)
#3 UnPublishedProducts._productDetails.<anonymous closure>
(package:grocery_vendor_app/widgets/unpublished_products.dart:66:30)
#4 MappedListIterable.elementAt (dart:_internal/iterable.dart:411:31)
#5 ListIterator.moveNext (dart:_internal/iterable.dart:340:26)
#6 new _GrowableList._ofEfficientLengthIterable (dart:core-
patch/growable_array.dart:188:27)
#7 new _GrowableList.of (dart:core-patch/growable_array.dart:150:28)
#8 new List.of (dart:core-patch/array_patch.dart:50:28)
#9 ListIterable.toList (dart:_internal/iterable.dart:211:44)
#10 UnPublishedProducts._productDetails
(package:grocery_vendor_app/widgets/unpublished_products.dart:110:8) #11
UnPublishedProducts.build.<anonymous closure>
(package:grocery_vendor_app/widgets/unpublished_products.dart:43:23)
#12 StreamBuilder.build (package:flutter/src/widgets/async.dart:545:81)
#13 _StreamBuilderBaseState.build (package:flutter/src/widgets/async.dart:124:48)
#14 StatefulElement.build (package:flutter/src/widgets/framework.dart:4612:27)
#15 ComponentElement.performRebuild
(package:flutter/src/widgets/framework.dart:4495:15)
#16 StatefulElement.performRebuild
(package:flutter/src/widgets/framework.dart:4667:11)
#17 Element.rebuild (package:flutter/src/widgets/framework.dart:4189:5)
#18 BuildOwner.buildScope (package:flutter/src/widgets/framework.dart:2694:33)
#19 WidgetsBinding.drawFrame (package:flutter/src/widgets/binding.dart:873:21)
#20 RendererBinding._handlePersistentFrameCallback
(package:flutter/src/rendering/binding.dart:319:5)
#21 SchedulerBinding._invokeFrameCallback
(package:flutter/src/scheduler/binding.dart:1144:15)
#22 SchedulerBinding.handleDrawFrame
(package:flutter/src/scheduler/binding.dart:1082:9)
#23 SchedulerBinding._handleDrawFrame
(package:flutter/src/scheduler/binding.dart:998:5)
#27 _invoke (dart:ui/hooks.dart:161:10)
#28 PlatformDispatcher._drawFrame (dart:ui/platform_dispatcher.dart:253:5)
#29 _drawFrame (dart:ui/hooks.dart:120:31)
(elided 5 frames from class _AssertionError and dart:async)
'''
Here is my code
'''
class UnPublishedProducts extends StatelessWidget {
@override
Widget build(BuildContext context) {
FirebaseServices _services = FirebaseServices();
return Container(
child: StreamBuilder(
stream:
_services.products.where('published', isEqualTo:
false).snapshots(),
builder: (context, snapshot) {
if (snapshot.hasError) {
return Text('Something went wrong..');
}
if (snapshot.connectionState == ConnectionState.waiting) {
return Center(
child: CircularProgressIndicator(),
);
}
return SingleChildScrollView(
child: FittedBox(
child: DataTable(
showBottomBorder: true,
dataRowHeight: 60,
headingRowColor: MaterialStateProperty.all(Colors.grey[200]),
columns: <DataColumn>[
DataColumn(
label: Expanded(child: Text('Jobs')),
),
DataColumn(
label: Text('Image'),
),
DataColumn(
label: Text('Info'),
),
DataColumn(
label: Text('Actions'),
),
],
rows: _productDetails(snapshot.data, context),
),
),
);
},
),
);
}
List<DataRow> _productDetails(QuerySnapshot snapshot, context) {
List<DataRow> newList = snapshot.docs.map((DocumentSnapshot document) {
if (document != null) {
return DataRow(cells: [
DataCell(Container(
child: ListTile(
contentPadding: EdgeInsets.zero,
title: Row(
children: [
Text(
'Name: ',
style: TextStyle(fontWeight: FontWeight.bold, fontSize:
15),
),
Expanded(
child: Text(document.data()['productName'],
style: TextStyle(fontSize: 15))),
],
),
subtitle: Row(
children: [
Text(
'SKU: ',
style: TextStyle(fontWeight: FontWeight.bold, fontSize:
12),
),
Text(document.data()['sku'], style: TextStyle(fontSize:
12)),
],
),
),
)),
DataCell(Container(
child: Padding(
padding: const EdgeInsets.all(3.0),
child: Row(
children: [
Image.network(
document.data()['productImage'],
width: 50,
),
],
),
),
)),
DataCell(IconButton(
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => EditViewProduct(
productId: document.data()['productId'],
),
),
);
},
icon: Icon(Icons.info_outline),
)),
DataCell(popUpButton(document.data())),
]);
}
}).toList();
return newList;
}
Widget popUpButton(data, {BuildContext context}) {
FirebaseServices _services = FirebaseServices();
return PopupMenuButton<String>(
onSelected: (String value) {
if (value == 'publish') {
_services.publishProduct(
id: data['productId'],
);
}
if (value == 'delete') {
_services.deleteProduct(id: data['productId']);
}
},
itemBuilder: (BuildContext context) => <PopupMenuEntry<String>>[
const PopupMenuItem<String>(
value: 'publish',
child: ListTile(
leading: Icon(Icons.check),
title: Text('Publish'),
),
),
const PopupMenuItem<String>(
value: 'delete',
child: ListTile(
leading: Icon(Icons.delete_outline),
title: Text('Delete job'),
),
),
]);
}
}
'''
推荐答案
document?.data()['productName'] ?? "-"
在所有键中使用空安全
document?.data()['your_key'] ?? "default data"
在此处
这篇关于以下断言被抛出构建 StreamBuilder<QuerySnapshot>(dirty, state: _StreamBuilderBaseState<QuerySnapshot, AsyncSnapshot的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文