【发布时间】:2021-12-13 01:56:12
【问题描述】:
我正在使用 FirebaseFirestore。我使用 SteamBilder 来使用 ListView 显示我的数据。 它没有显示任何错误,但是当我运行我的应用程序时,它会显示有线异常或错误。我不明白这是什么类型的错误或异常。我应该如何解决这个问题?我的 streamBilder 从每个文档下的 Products 集合中获取数据。我使用卡片和列来处理数据,但此错误仅针对此应用显示。我运行了另一个运行良好的应用程序,但这对我来说似乎是个大问题
import 'dart:html';
import 'package:flutter/material.dart';
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/rendering.dart';
class UserScreen extends StatefulWidget {
UserScreen({Key? key}) : super(key: key);
@override
_UserScreenState createState() => _UserScreenState();
}
class _UserScreenState extends State<UserScreen> {
final _formKey = GlobalKey<FormState>();
var _productName = '';
var _productDes = '';
var _bidPrice = '';
var _auctionDate = '';
void _trySubmit() async {
final isValid = _formKey.currentState!.validate();
FocusScope.of(context).unfocus();
try {
if (isValid) {
_formKey.currentState?.save();
print(_productName);
print(_productDes);
print(_bidPrice);
print(_auctionDate);
print(' Good to go ');
await FirebaseFirestore.instance.collection('Products').add({
'productName': _productName,
'productDes': _productDes,
'bidPrice': _bidPrice,
'auctionDate': _auctionDate,
});
} else {
print('Form is not valid');
}
} catch (err) {
Text('Check credential');
}
}
bool isFabVisibale = false;
void addNewProducts(BuildContext ctx) {
showModalBottomSheet(
isScrollControlled: true,
context: ctx,
builder: (_) {
return GestureDetector(
onTap: () {},
behavior: HitTestBehavior.opaque,
child: Form(
key: _formKey,
child: ListView(
padding: EdgeInsets.symmetric(horizontal: 20, vertical: 40),
addRepaintBoundaries: true,
children: <Widget>[
Center(
child: Text(
'Add New Product',
style: TextStyle(
fontSize: 20,
fontWeight: FontWeight.bold,
color: Theme.of(context).primaryColor),
)),
TextFormField(
onSaved: (value) {
_productName = value!;
},
validator: (value) {
if (value!.isEmpty) {
return 'Enter Product Name';
}
return null;
},
keyboardType: TextInputType.emailAddress,
decoration: InputDecoration(
labelText: 'Product Name',
icon: Icon(Icons.insert_chart)),
),
TextFormField(
onSaved: (value) {
_productDes = value!;
},
validator: (value) {
if (value!.isEmpty) {
return 'Enter Product Description';
}
return null;
},
decoration: InputDecoration(
labelText: 'Product Description',
icon: Icon(Icons.description)),
),
TextFormField(
onSaved: (value) {
_bidPrice = value!;
},
validator: (value) {
if (value!.isEmpty) {
return 'Enter Product Price';
}
return null;
},
keyboardType: TextInputType.number,
decoration: InputDecoration(
labelText: 'Minimum Bid Price',
icon: Icon(Icons.price_check)),
),
TextFormField(
onSaved: (value) {
_auctionDate = value!;
},
validator: (value) {
if (value!.isEmpty) {
return 'Enter Product End Date';
}
return null;
},
keyboardType: TextInputType.emailAddress,
decoration: InputDecoration(
labelText: 'Auction End DateTime',
icon: Icon(Icons.data_saver_off)),
),
SizedBox(
height: 20,
),
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
ElevatedButton(
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => UserScreen()));
},
child: Text('Cancel'),
),
ElevatedButton(
onPressed: _trySubmit,
child: Text('Add Product'),
),
],
),
],
),
),
);
},
);
}
@override
Widget build(BuildContext context) {
return SafeArea(
child: Scaffold(
appBar: AppBar(
title: Text('User Screen'),
actions: [
DropdownButton(
items: [
DropdownMenuItem(
child: Container(
child: Row(
children: <Widget>[
Icon(
Icons.exit_to_app,
color: Theme.of(context).indicatorColor,
),
SizedBox(
width: 8,
),
Text('Logout')
],
),
),
value: 'logout',
),
],
onChanged: (itemIdentifire) {
if (itemIdentifire == 'logout') {
FirebaseAuth.instance.signOut();
}
},
),
],
),
body: NotificationListener<UserScrollNotification>(
onNotification: (notification) {
if (notification.direction == ScrollDirection.forward) {
setState(() {
isFabVisibale = true;
});
}
if (notification.direction == ScrollDirection.reverse) {
setState(() {
isFabVisibale = false;
});
}
return true;
},
child: StreamBuilder(
stream:
FirebaseFirestore.instance.collection('Products').snapshots(),
builder: (BuildContext contex,
AsyncSnapshot<QuerySnapshot<Map<String, dynamic>>> snapshot) {
if (!snapshot.hasData) {
return Text('No Produts for display..');
}
return ListView(
physics: ScrollPhysics(),
children: snapshot.data!.docs.map((document) {
return Card(
child: Row(
children: <Widget>[
Card(
child: Text('Image'),
),
Column(children:<Widget> [
Text('Name :' + document['productName']),
Text('description :' + document['productDes']),
Text('Price :' + document['bidPrice']),
Text('Date :' + document['auctionDate']),
TextButton(onPressed: (){}, child: Text('Bid')),
],),
],
),
);
}).toList(),
);
},
),
),
floatingActionButtonLocation: FloatingActionButtonLocation.centerFloat,
floatingActionButton: isFabVisibale
? FloatingActionButton(
child: Icon(Icons.add),
onPressed: () {
addNewProducts(context);
},
)
: null,
),
);
}
}
【问题讨论】:
-
此错误与
import 'dart:html';无关,与 Stream 或其他任何内容无关。只需删除此导入,因为您无法在 Flutter 上使用 Dart HTML -
当前的 Dart SDK 版本是 2.14.4。因为auction_app1要求SDK版本>=2.15.0-116.0.dev=2.15.0-116.0.dev 怎么解决??
-
这是一个版本冲突,没有明确的解决方案,解决方案是相对于你的项目包,你需要了解 Dart 包管理器背后发生了什么来修复这个错误。也许this post can help you
标签: flutter flutter-layout flutter-test