下面的代碼是StreamBuilder從流中列印多個欄位的代碼。是否可以向 Text 小部件添加三元或 if 運算子來檢查結果是否大于零,如果是,則 在輸出中添加前綴?如果它高于零,是否也可以將文本的顏色更改為綠色,如果低于零,是否可以將其更改為紅色?
Text(
data['pointsfrom'].toString(),
style: GoogleFonts.poppins(
color: Colors.white70,
fontSize: 27,
),
),
完整代碼
import 'package:appforpoints/dashboardPages/adminPage/listCards/admin_notif_card.dart';
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/material.dart';
import 'package:font_awesome_flutter/font_awesome_flutter.dart';
import 'package:google_fonts/google_fonts.dart';
class PointsHistory extends StatefulWidget {
final String username;
const PointsHistory({Key? key, required this.username}) : super(key: key);
@override
_PointsHistoryState createState() => _PointsHistoryState();
}
class _PointsHistoryState extends State<PointsHistory> {
@override
void initState() {
// TODO: implement initState
super.initState();
}
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: const Color(0xff2F3439),
body: SizedBox(
height: double.infinity,
child: Padding(
padding: const EdgeInsets.only(),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisAlignment: MainAxisAlignment.start,
children: [
Expanded(
child: ListView(
scrollDirection: Axis.vertical,
children: [
Padding(
padding: const EdgeInsets.only(
top: 80,
left: 23,
),
child: StreamBuilder<QuerySnapshot>(
stream: FirebaseFirestore.instance
.collection("pointslogs")
.where("uid",
isEqualTo:
FirebaseAuth.instance.currentUser!.uid)
.where('username', isEqualTo: widget.username)
.orderBy('timestamp', descending: true)
.snapshots(),
builder: (BuildContext context,
AsyncSnapshot<QuerySnapshot> snapshot) {
if (snapshot.hasError) {
return const Text('Something went wrong');
}
if (snapshot.connectionState ==
ConnectionState.waiting) {
return const Text("Loading");
}
return Column(
children: snapshot.data!.docs.map(
(DocumentSnapshot document) {
Map<String, dynamic> data =
document.data()! as Map<String, dynamic>;
return Column(
children: [
Row(
crossAxisAlignment:
CrossAxisAlignment.center,
children: [
Text(
data['pointsfrom'].toString(),
style: GoogleFonts.poppins(
color: Colors.white70,
fontSize: 27,
),
),
Padding(
padding: const EdgeInsets.only(
left: 12, right: 12),
child: Text(
'>',
style: GoogleFonts.poppins(
color: Colors.white70,
fontSize: 27,
),
),
),
Text(
data['pointsto'].toString(),
style: GoogleFonts.poppins(
color: Colors.white70,
fontSize: 27,
),
),
Padding(
padding:
const EdgeInsets.only(left: 20),
child: Text(
data['pointschange'].toString()
" ",
style: GoogleFonts.poppins(
color: Colors.white70,
fontSize: 27,
),
),
),
],
),
Row(
children: [
Text(
data['date'].toString(),
),
Text(
data['time'].toString(),
),
],
)
],
);
},
).toList(),
);
},
),
),
],
),
),
],
),
),
),
);
/*Scaffold(
backgroundColor: const Color(0xff1e272c),
body: ListView(
scrollDirection: Axis.horizontal,
children: [
StreamBuilder<QuerySnapshot>(
stream: userLog,
builder:
(BuildContext context, AsyncSnapshot<QuerySnapshot> snapshot) {
if (snapshot.hasError) {
return const Text('Something went wrong');
}
if (snapshot.connectionState == ConnectionState.waiting) {
return const Text("Loading");
}
return Row(
children: snapshot.data!.docs.map(
(DocumentSnapshot document) {
Map<String, dynamic> data =
document.data()! as Map<String, dynamic>;
return Column(
children: [
Text(data['pointschange']),
Text(data['pointsto']),
],
);
},
).toList(),
);
},
),
],
),
);*/
}
}
uj5u.com熱心網友回復:
你的意思是這樣的:
Text(
(data['pointsfrom'] >= 0 ? ' ' : '') data['pointsfrom'].toString(),
style: GoogleFonts.poppins(
color: data['pointsfrom'] >= 0 ? Colors.green : Colors.red,
fontSize: 27,
),
),
建議:我注意到你一遍又一遍地重復這種風格(GoogleFonts.poppins);您可以在構建方法的頂部設定一次,也可以創建一個單獨的實用程式類,您可以在其中擁有所有這些值。您可以根據條件創建樣式,也可以將其提取為單獨的方法,根據所需條件為您生成適當的樣式。
您也可以將前綴邏輯移動到一個單獨的方法中,這樣三元運算看起來不會太混亂。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/431292.html
