我想在Firestore中将颜色存储为“color”,并检索它以添加我的卡的颜色;
但是当我添加新的数据时,它并没有被添加。也许我把颜色值存储为字符串,而颜色不支持字符串。那么我该如何解决这个问题呢?
代码如下:
这是我调用Firestore并添加文档的地方(有一个名为“color”的文档)
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:flutter/material.dart';
import 'package:intl/intl.dart';
class FirestoreServices {
final _fireStore = Firestore.instance;
void addNewMatch(int rScore, int bScore) async {
if (_fireStore.collection('matches').snapshots() != null) {
if (rScore > bScore)
await _fireStore.collection('matches').add({
'WinnerText': 'Rikesh Wins',
'RS': rScore,
'BS': bScore,
'Score': ('${rScore.toInt()} - ${bScore.toInt()}'),
'id':
_fireStore.collection('matches').document().documentID.toString(),
'date': DateFormat.yMMMd().format(DateTime.now()),
'color' : Colors.red
});
if (bScore > rScore)
await _fireStore.collection('matches').add({
'WinnerText': 'Bibin Wins',
'RS': rScore,
'BS': bScore,
'Score': ('${bScore.toInt()} - ${rScore.toInt()}'),
'id':
_fireStore.collection('matches').document().documentID.toString(),
'date': DateFormat.yMMMd().format(DateTime.now()),
'color' : Colors.green
});
if (bScore == rScore)
await _fireStore.collection('matches').add({
'WinnerText': 'Drew',
'RS': rScore,
'BS': bScore,
'Score': ('${rScore.toInt()} - ${bScore.toInt()}'),
'id':
_fireStore.collection('matches').document().documentID.toString(),
'date': DateFormat.yMMMd().format(DateTime.now()),
'color' : Colors.green
});
}
}
void removeMatch(id) async {
await _fireStore.collection('matches').document(id).delete();
}
}
--------------------------------------------------
这是我的直播页面-
import 'package:bvb_firebase/shareable/constants.dart';
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:flutter/material.dart';
import 'package:intl/intl.dart';
class HistoryCardStreamer extends StatefulWidget {
final int rikeshS;
final int bibinS;
HistoryCardStreamer({this.rikeshS, this.bibinS});
@override
_HistoryCardStreamerState createState() => _HistoryCardStreamerState();
}
class _HistoryCardStreamerState extends State<HistoryCardStreamer> {
final _firestore = Firestore.instance;
@override
Widget build(BuildContext context) {
return Container(
height: 300,
child: StreamBuilder<QuerySnapshot>(
stream: _firestore.collection('matches').snapshots(),
builder: (context, snapshot) {
if (!snapshot.hasData)
return Center(
child: CircularProgressIndicator(),
);
return Container(
height: 300,
child: ListView.builder(
itemCount: snapshot.data.documents.reversed.length,
itemBuilder: (context, index) {
DocumentSnapshot matchDetail = snapshot.data.documents[index];
return Card(
elevation: 0,
color: matchDetail['color'],
child: Container(
margin: EdgeInsets.only(top: 5),
child: ListTile(
title: Text(
matchDetail['WinnerText'],
style: kcardtitleTextStyle,
),
leading: Container(
width: 45,
margin: EdgeInsets.only(top: 12, right: 5),
child: FittedBox(
child: Text(matchDetail['Score'],
style: kcardtitleTextStyle),
),
),
subtitle: Text(
'${DateFormat.yMMMd().format(DateTime.now())}',
style: kcardDateStyle),
trailing: GestureDetector(
onDoubleTap: () async {
await _firestore
.collection('matches')
.document(matchDetail.documentID)
.delete();
},
child: IconButton(
icon: Icon(Icons.delete),
onPressed: () {},
),
),
),
),
);
},
),
);
},
),
);
}
}
//
5条答案
按热度按时间2exbekwf1#
有一种方法可以将颜色值存储为Firestore中的数字。
类Color有一个value方法,它返回一个int类型的颜色。
你可以把这个int存储在Firestore中,当你把颜色恢复成flutter时,你可以在
Color(yourIntValue)
类中使用它,也可以和添加的withOpacity()
方法一起使用,以获得精确的Opacity。示例:
.withOpacity
是需要给你回0xFF
部分,否则你会得到0x00
。在这篇文章中,你可以看到在
.withOpacity
中使用哪个值来获得所需的不透明度:Hex transparency in colorsubbxdtey2#
根据答案here,您可以将颜色保存为数据存储中的字符串,并将其转换为正确格式的字符串,如下所示:
像这样你可以保存在Firestore的颜色。
然后当检索它时,你应该将它从字符串转换为颜色,为此你可以这样检索它:
例如,要按日期对数据进行排序,可以使用下面的行,如here所示:
cxfofazt3#
您可以将颜色存储为字符串、十六进制颜色。
您可以检索颜色作为十六进制字符串如下.
yrefmtwq4#
可以像这样存储颜色的值('your_storing_method(storedColorValue))
当你想再读一遍的时候,你可以用这个值来得到相同的颜色,就像这样:
u3r8eeie5#
Int mycolor =颜色蓝色值;
你可以像这样把颜色的值存储为一个整型数。
请注意添加到颜色中的“.value”。它是一个32位的值,代表颜色。
因此,当把它传递给一个颜色参数时,你可以这样传递它
颜色:颜色(我的颜色);