颤动倍数if-statement
Flutter multiple if-statement
我的 flutter 应用程序中有以下倍数 if-statement:
Text(text1).toString()==Text('Info and Comms').toString()?(snapshot.data.documents[8]['desc'].toString()).replaceAll("/n", "\n"):
Text(text1).toString()==Text('Media').toString()?(snapshot.data.documents[10]['desc'].toString()).replaceAll("/n", "\n"):
Text(text1).toString()==Text('Utilities').toString()?(snapshot.data.documents[16]['desc'].toString()).replaceAll("/n", "\n"):
Text(text1).toString()==Text('Education').toString()?(snapshot.data.documents[4]['desc'].toString()).replaceAll("/n", "\n"):
Text(text1).toString()==Text('Repairs').toString()?(snapshot.data.documents[13]['desc'].toString()).replaceAll("/n", "\n"):
Text(text1).toString()==Text('Domestic Help').toString()?(snapshot.data.documents[3]['desc'].toString()).replaceAll("/n", "\n"):
Text(text1).toString()==Text('Transport').toString()?(snapshot.data.documents[15]['desc'].toString()).replaceAll("/n", "\n"):
Text(text1).toString()==Text('Manufacturing').toString()?(snapshot.data.documents[9]['desc'].toString()).replaceAll("/n", "\n"):
Text(text1).toString()==Text('Mining').toString()?(snapshot.data.documents[11]['desc'].toString()).replaceAll("/n", "\n"):
Text(text1).toString()==Text('Supply Chain').toString()?(snapshot.data.documents[14]['desc'].toString()).replaceAll("/n", "\n"):
Text(text1).toString()==Text('Government').toString()?(snapshot.data.documents[6]['desc'].toString()).replaceAll("/n", "\n"):
Text(text1).toString()==Text('Financial and Business Services').toString()?(snapshot.data.documents[5]['desc'].toString()).replaceAll("/n", "\n"):
Text(text1).toString()==Text('Construction').toString()?(snapshot.data.documents[2]['desc'].toString()).replaceAll("/n", "\n"):
Text(text1).toString()==Text('Agriculture').toString()?(snapshot.data.documents[1]['desc'].toString()).replaceAll("/n", "\n"):
Text(text1).toString()==Text('Wholesale and Retail Trade').toString()?(snapshot.data.documents[17]['desc'].toString()).replaceAll("/n", "\n"):
Text(text1).toString()==Text('Accomodation').toString()?(snapshot.data.documents[0]['desc'].toString()).replaceAll("/n", "\n"):
Text(text1).toString()==Text('Health Social and Personal').toString()?(snapshot.data.documents[7]['desc'].toString()).replaceAll("/n", "\n"):
Text(text1).toString()==Text('Movement').toString()?(snapshot.data.documents[12]['desc'].toString()).replaceAll("/n", "\n"):
Text('Data not found').toString(),
在我的移动设备上部署时,它运行完美,但在 Play 商店启动后,它 returns 第一个语句不管怎样。
知道为什么现在坏了以及从哪里开始修复吗?
*****编辑*****
添加了 if-statement 所在的类别页面内容。
原始类别页面代码:
class CategoryPage extends StatelessWidget {
final String text1;
final String text2;
final String text3;
CategoryPage(
{Key key,
@required this.text1,
@required this.text2,
@required this.text3})
: super(key: key);
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(text2),
centerTitle: true,
backgroundColor: Colors.grey,
),
body: ListView(shrinkWrap: true, children: <Widget>[
Container(
child: ListTile(
title: Text(
'Current Level ' + text3.toString(),
style: TextStyle(
//color: Colors.red[900],
color: Text(text3).toString() == Text("5").toString()
? Colors.red[900]
: Text(text3).toString() == Text("4").toString()
? Colors.orange[900]
: Text(text3).toString() == Text("3").toString()
? Colors.brown[300]
: Text(text3).toString() == Text("2").toString()
? Colors.blue[300]
: Text(text3).toString() == Text("1").toString()
? Colors.green[300]
: Colors.black,
fontSize: 25,
fontWeight: FontWeight.bold),
textAlign: TextAlign.center,
),
),
),
Container(
child: ListTile(
title: Text(
text1.toString(),
style: TextStyle(
//color: Colors.red[900],
color: Colors.white,
fontSize: 20,
fontWeight: FontWeight.bold),
textAlign: TextAlign.center,
),
),
),
Container(
alignment: Alignment.topLeft,
padding: const EdgeInsets.all(8.0),
child: StreamBuilder(
stream: Text(text3).toString() == Text('1').toString()
? Firestore.instance.collection('Level1').snapshots()
: Text(text3).toString() == Text('2').toString()
? Firestore.instance.collection('Level2').snapshots()
: Text(text3).toString() == Text('3').toString()
? Firestore.instance.collection('Level3').snapshots()
: Text(text3).toString() == Text('4').toString()
? Firestore.instance.collection('Level4').snapshots()
: Text(text3).toString() == Text('5').toString()
? Firestore.instance
.collection('Level5')
.snapshots()
: Firestore.instance
.collection('Level1')
.snapshots(),
builder: (context, snapshot) {
if (!snapshot.hasData) {
return Text('Loading data ...');
} else {
return Text(
//snapshot.data.documents[0]['desc'].toString(),
Text(text1).toString()==Text('Info and Comms').toString()?(snapshot.data.documents[8]['desc'].toString()).replaceAll("/n", "\n"):
Text(text1).toString()==Text('Media').toString()?(snapshot.data.documents[10]['desc'].toString()).replaceAll("/n", "\n"):
Text(text1).toString()==Text('Utilities').toString()?(snapshot.data.documents[16]['desc'].toString()).replaceAll("/n", "\n"):
Text(text1).toString()==Text('Education').toString()?(snapshot.data.documents[4]['desc'].toString()).replaceAll("/n", "\n"):
Text(text1).toString()==Text('Repairs').toString()?(snapshot.data.documents[13]['desc'].toString()).replaceAll("/n", "\n"):
Text(text1).toString()==Text('Domestic Help').toString()?(snapshot.data.documents[3]['desc'].toString()).replaceAll("/n", "\n"):
Text(text1).toString()==Text('Transport').toString()?(snapshot.data.documents[15]['desc'].toString()).replaceAll("/n", "\n"):
Text(text1).toString()==Text('Manufacturing').toString()?(snapshot.data.documents[9]['desc'].toString()).replaceAll("/n", "\n"):
Text(text1).toString()==Text('Mining').toString()?(snapshot.data.documents[11]['desc'].toString()).replaceAll("/n", "\n"):
Text(text1).toString()==Text('Supply Chain').toString()?(snapshot.data.documents[14]['desc'].toString()).replaceAll("/n", "\n"):
Text(text1).toString()==Text('Government').toString()?(snapshot.data.documents[6]['desc'].toString()).replaceAll("/n", "\n"):
Text(text1).toString()==Text('Financial and Business Services').toString()?(snapshot.data.documents[5]['desc'].toString()).replaceAll("/n", "\n"):
Text(text1).toString()==Text('Construction').toString()?(snapshot.data.documents[2]['desc'].toString()).replaceAll("/n", "\n"):
Text(text1).toString()==Text('Agriculture').toString()?(snapshot.data.documents[1]['desc'].toString()).replaceAll("/n", "\n"):
Text(text1).toString()==Text('Wholesale and Retail Trade').toString()?(snapshot.data.documents[17]['desc'].toString()).replaceAll("/n", "\n"):
Text(text1).toString()==Text('Accomodation').toString()?(snapshot.data.documents[0]['desc'].toString()).replaceAll("/n", "\n"):
Text(text1).toString()==Text('Health Social and Personal').toString()?(snapshot.data.documents[7]['desc'].toString()).replaceAll("/n", "\n"):
Text(text1).toString()==Text('Movement').toString()?(snapshot.data.documents[12]['desc'].toString()).replaceAll("/n", "\n"):
Text('Data not found').toString(),
style: TextStyle(
color: Colors.white,
fontSize: 15,
fontWeight: FontWeight.normal),
textAlign: TextAlign.left,
);
}
},
),
decoration: BoxDecoration(border: Border.all(color: Colors.grey[300])),
),]
));
}
}
*****更新*****
在按照 Yann39 的建议简化 if-statement 之后 - 从 Visual Code 部署到我的 phone 时,代码在我这边工作得很好,但从 Google Play Store 下载应用程序时仍然不起作用。
已更新类别页面:
class CategoryPage extends StatelessWidget {
final String text1;
final String text2;
final String text3;
CategoryPage(
{Key key,
@required this.text1,
@required this.text2,
@required this.text3})
: super(key: key);
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(text2),
centerTitle: true,
backgroundColor: Colors.grey,
),
body: ListView(shrinkWrap: true, children: <Widget>[
Container(
child: ListTile(
title: Text(
'Current Level ' + text3.toString(),
style: TextStyle(
//color: Colors.red[900],
color: Text(text3).toString() == Text("5").toString()
? Colors.red[900]
: Text(text3).toString() == Text("4").toString()
? Colors.orange[900]
: Text(text3).toString() == Text("3").toString()
? Colors.brown[300]
: Text(text3).toString() == Text("2").toString()
? Colors.blue[300]
: Text(text3).toString() == Text("1").toString()
? Colors.green[300]
: Colors.black,
fontSize: 25,
fontWeight: FontWeight.bold),
textAlign: TextAlign.center,
),
),
),
Container(
child: ListTile(
title: Text(
text1.toString(),
style: TextStyle(
//color: Colors.red[900],
color: Colors.white,
fontSize: 20,
fontWeight: FontWeight.bold),
textAlign: TextAlign.center,
),
),
),
Container(
alignment: Alignment.topLeft,
padding: const EdgeInsets.all(8.0),
child: StreamBuilder(
stream: Text(text3).toString() == Text('1').toString()
? Firestore.instance.collection('Level1').snapshots()
: Text(text3).toString() == Text('2').toString()
? Firestore.instance.collection('Level2').snapshots()
: Text(text3).toString() == Text('3').toString()
? Firestore.instance.collection('Level3').snapshots()
: Text(text3).toString() == Text('4').toString()
? Firestore.instance.collection('Level4').snapshots()
: Text(text3).toString() == Text('5').toString()
? Firestore.instance
.collection('Level5')
.snapshots()
: Firestore.instance
.collection('Level1')
.snapshots(),
builder: (context, snapshot) {
if (!snapshot.hasData) {
return Text('Loading data ...');
} else {
return Text(DocumentUtils.getDocumentDescriptionFromTitle(snapshot, text1.toString()),style: TextStyle(
color: Colors.white,
fontSize: 15,
fontWeight: FontWeight.normal),
textAlign: TextAlign.left,);
}
},
),
decoration: BoxDecoration(border: Border.all(color: Colors.grey[300])),
),]
));
}
}
class DocumentUtils {
static String getDocumentDescriptionFromTitle(AsyncSnapshot snapshot, String title) {
var map = {
'Info and Comms':8,
'Media':10,
'Utilities':16,
'Education':4,
'Repairs':13,
'Domestic Help':3,
'Transport':15,
'Manufacturing':9,
'Mining':11,
'Supply Chain':14,
'Government':6,
'Financial and Business Services':5,
'Construction':2,
'Agriculture':1,
'Wholesale and Retail Trade':17,
'Accomodation':0,
'Health Social and Personal':7,
'Movement':12,
};
return map[title] != null ? snapshot.data.documents[map[title]]['desc'].toString().replaceAll("/n", "\n") : 'Data not found';
}
}
*****更新******
经过上述if-statement简化后,显示了正确的类别描述,但现在只有 returns Collection 'Level1' from Firestore :
stream: Text(text3).toString() == Text('1').toString()
? Firestore.instance.collection('Level1').snapshots()
: Text(text3).toString() == Text('2').toString()
? Firestore.instance.collection('Level2').snapshots()
: Text(text3).toString() == Text('3').toString()
? Firestore.instance.collection('Level3').snapshots()
: Text(text3).toString() == Text('4').toString()
? Firestore.instance.collection('Level4').snapshots()
: Text(text3).toString() == Text('5').toString()
? Firestore.instance
.collection('Level5')
.snapshots()
: Firestore.instance
.collection('Level1')
.snapshots(),
上面的多个 if-statement 在我的设备上部署应用程序时工作正常,只有当从 Play 商店安装应用程序时,多个 if-statement 才会出现这些问题。
也许它没有直接回答你的问题(评论太长了)但我不确定你为什么直接使用 Text(text1).toString() == Text('text').toString()
而不是 text1 == 'text'
?
另请注意,Text(text3).toString()
将 return 字符串 "Text(text3)",而不是包含的文本。如果要获取包含的文本,请使用 Text(text3).data
。但是,您不必再在这里创建 Text
小部件,text1 == 'text'
应该可以完成这项工作,它更加简单和高效。
我也会将这些 if
重复简化为一个函数,例如(假设您在 snapshot.data.documents
中没有文档标题,那么您将不需要地图来执行映射):
class DocumentUtils {
static String getDocumentDescriptionFromTitle(AsyncSnapshot<YourObject> snapshot, String title) {
var map = {
'Info and Comms':8,
'Media':10,
'Utilities':16,
'Education':4,
'Repairs':13,
'Domestic Help':3,
'Transport':15,
'Manufacturing':9,
'Mining':11,
'Supply Chain':14,
'Government':6,
'Financial and Business Services':5,
'Construction':2,
'Agriculture':1,
'Wholesale and Retail Trade':17,
'Accomodation':0,
'Health Social and Personal':7,
'Movement':12,
};
return map[title] != null ? snapshot.data.documents[map[title]]['desc'].toString().replaceAll("/n", "\n") : 'Data not found';
}
}
因此,在您的小部件中,您只需调用 DocumentUtils.getDocumentDescriptionFromTitle(snapshot, text1)
。
如果您的 snapshot.data.documents
中有文档标题,那么它将类似于:
class DocumentUtils {
static String getDocumentDescriptionFromTitle(AsyncSnapshot<YourObject> snapshot, String title) {
return snapshot.data.documents.firstWhere((Document d) => d.title == title)['desc'].replaceAll("/n", "\n");
}
}
我的 flutter 应用程序中有以下倍数 if-statement:
Text(text1).toString()==Text('Info and Comms').toString()?(snapshot.data.documents[8]['desc'].toString()).replaceAll("/n", "\n"):
Text(text1).toString()==Text('Media').toString()?(snapshot.data.documents[10]['desc'].toString()).replaceAll("/n", "\n"):
Text(text1).toString()==Text('Utilities').toString()?(snapshot.data.documents[16]['desc'].toString()).replaceAll("/n", "\n"):
Text(text1).toString()==Text('Education').toString()?(snapshot.data.documents[4]['desc'].toString()).replaceAll("/n", "\n"):
Text(text1).toString()==Text('Repairs').toString()?(snapshot.data.documents[13]['desc'].toString()).replaceAll("/n", "\n"):
Text(text1).toString()==Text('Domestic Help').toString()?(snapshot.data.documents[3]['desc'].toString()).replaceAll("/n", "\n"):
Text(text1).toString()==Text('Transport').toString()?(snapshot.data.documents[15]['desc'].toString()).replaceAll("/n", "\n"):
Text(text1).toString()==Text('Manufacturing').toString()?(snapshot.data.documents[9]['desc'].toString()).replaceAll("/n", "\n"):
Text(text1).toString()==Text('Mining').toString()?(snapshot.data.documents[11]['desc'].toString()).replaceAll("/n", "\n"):
Text(text1).toString()==Text('Supply Chain').toString()?(snapshot.data.documents[14]['desc'].toString()).replaceAll("/n", "\n"):
Text(text1).toString()==Text('Government').toString()?(snapshot.data.documents[6]['desc'].toString()).replaceAll("/n", "\n"):
Text(text1).toString()==Text('Financial and Business Services').toString()?(snapshot.data.documents[5]['desc'].toString()).replaceAll("/n", "\n"):
Text(text1).toString()==Text('Construction').toString()?(snapshot.data.documents[2]['desc'].toString()).replaceAll("/n", "\n"):
Text(text1).toString()==Text('Agriculture').toString()?(snapshot.data.documents[1]['desc'].toString()).replaceAll("/n", "\n"):
Text(text1).toString()==Text('Wholesale and Retail Trade').toString()?(snapshot.data.documents[17]['desc'].toString()).replaceAll("/n", "\n"):
Text(text1).toString()==Text('Accomodation').toString()?(snapshot.data.documents[0]['desc'].toString()).replaceAll("/n", "\n"):
Text(text1).toString()==Text('Health Social and Personal').toString()?(snapshot.data.documents[7]['desc'].toString()).replaceAll("/n", "\n"):
Text(text1).toString()==Text('Movement').toString()?(snapshot.data.documents[12]['desc'].toString()).replaceAll("/n", "\n"):
Text('Data not found').toString(),
在我的移动设备上部署时,它运行完美,但在 Play 商店启动后,它 returns 第一个语句不管怎样。
知道为什么现在坏了以及从哪里开始修复吗?
*****编辑*****
添加了 if-statement 所在的类别页面内容。 原始类别页面代码:
class CategoryPage extends StatelessWidget {
final String text1;
final String text2;
final String text3;
CategoryPage(
{Key key,
@required this.text1,
@required this.text2,
@required this.text3})
: super(key: key);
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(text2),
centerTitle: true,
backgroundColor: Colors.grey,
),
body: ListView(shrinkWrap: true, children: <Widget>[
Container(
child: ListTile(
title: Text(
'Current Level ' + text3.toString(),
style: TextStyle(
//color: Colors.red[900],
color: Text(text3).toString() == Text("5").toString()
? Colors.red[900]
: Text(text3).toString() == Text("4").toString()
? Colors.orange[900]
: Text(text3).toString() == Text("3").toString()
? Colors.brown[300]
: Text(text3).toString() == Text("2").toString()
? Colors.blue[300]
: Text(text3).toString() == Text("1").toString()
? Colors.green[300]
: Colors.black,
fontSize: 25,
fontWeight: FontWeight.bold),
textAlign: TextAlign.center,
),
),
),
Container(
child: ListTile(
title: Text(
text1.toString(),
style: TextStyle(
//color: Colors.red[900],
color: Colors.white,
fontSize: 20,
fontWeight: FontWeight.bold),
textAlign: TextAlign.center,
),
),
),
Container(
alignment: Alignment.topLeft,
padding: const EdgeInsets.all(8.0),
child: StreamBuilder(
stream: Text(text3).toString() == Text('1').toString()
? Firestore.instance.collection('Level1').snapshots()
: Text(text3).toString() == Text('2').toString()
? Firestore.instance.collection('Level2').snapshots()
: Text(text3).toString() == Text('3').toString()
? Firestore.instance.collection('Level3').snapshots()
: Text(text3).toString() == Text('4').toString()
? Firestore.instance.collection('Level4').snapshots()
: Text(text3).toString() == Text('5').toString()
? Firestore.instance
.collection('Level5')
.snapshots()
: Firestore.instance
.collection('Level1')
.snapshots(),
builder: (context, snapshot) {
if (!snapshot.hasData) {
return Text('Loading data ...');
} else {
return Text(
//snapshot.data.documents[0]['desc'].toString(),
Text(text1).toString()==Text('Info and Comms').toString()?(snapshot.data.documents[8]['desc'].toString()).replaceAll("/n", "\n"):
Text(text1).toString()==Text('Media').toString()?(snapshot.data.documents[10]['desc'].toString()).replaceAll("/n", "\n"):
Text(text1).toString()==Text('Utilities').toString()?(snapshot.data.documents[16]['desc'].toString()).replaceAll("/n", "\n"):
Text(text1).toString()==Text('Education').toString()?(snapshot.data.documents[4]['desc'].toString()).replaceAll("/n", "\n"):
Text(text1).toString()==Text('Repairs').toString()?(snapshot.data.documents[13]['desc'].toString()).replaceAll("/n", "\n"):
Text(text1).toString()==Text('Domestic Help').toString()?(snapshot.data.documents[3]['desc'].toString()).replaceAll("/n", "\n"):
Text(text1).toString()==Text('Transport').toString()?(snapshot.data.documents[15]['desc'].toString()).replaceAll("/n", "\n"):
Text(text1).toString()==Text('Manufacturing').toString()?(snapshot.data.documents[9]['desc'].toString()).replaceAll("/n", "\n"):
Text(text1).toString()==Text('Mining').toString()?(snapshot.data.documents[11]['desc'].toString()).replaceAll("/n", "\n"):
Text(text1).toString()==Text('Supply Chain').toString()?(snapshot.data.documents[14]['desc'].toString()).replaceAll("/n", "\n"):
Text(text1).toString()==Text('Government').toString()?(snapshot.data.documents[6]['desc'].toString()).replaceAll("/n", "\n"):
Text(text1).toString()==Text('Financial and Business Services').toString()?(snapshot.data.documents[5]['desc'].toString()).replaceAll("/n", "\n"):
Text(text1).toString()==Text('Construction').toString()?(snapshot.data.documents[2]['desc'].toString()).replaceAll("/n", "\n"):
Text(text1).toString()==Text('Agriculture').toString()?(snapshot.data.documents[1]['desc'].toString()).replaceAll("/n", "\n"):
Text(text1).toString()==Text('Wholesale and Retail Trade').toString()?(snapshot.data.documents[17]['desc'].toString()).replaceAll("/n", "\n"):
Text(text1).toString()==Text('Accomodation').toString()?(snapshot.data.documents[0]['desc'].toString()).replaceAll("/n", "\n"):
Text(text1).toString()==Text('Health Social and Personal').toString()?(snapshot.data.documents[7]['desc'].toString()).replaceAll("/n", "\n"):
Text(text1).toString()==Text('Movement').toString()?(snapshot.data.documents[12]['desc'].toString()).replaceAll("/n", "\n"):
Text('Data not found').toString(),
style: TextStyle(
color: Colors.white,
fontSize: 15,
fontWeight: FontWeight.normal),
textAlign: TextAlign.left,
);
}
},
),
decoration: BoxDecoration(border: Border.all(color: Colors.grey[300])),
),]
));
}
}
*****更新***** 在按照 Yann39 的建议简化 if-statement 之后 - 从 Visual Code 部署到我的 phone 时,代码在我这边工作得很好,但从 Google Play Store 下载应用程序时仍然不起作用。
已更新类别页面:
class CategoryPage extends StatelessWidget {
final String text1;
final String text2;
final String text3;
CategoryPage(
{Key key,
@required this.text1,
@required this.text2,
@required this.text3})
: super(key: key);
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(text2),
centerTitle: true,
backgroundColor: Colors.grey,
),
body: ListView(shrinkWrap: true, children: <Widget>[
Container(
child: ListTile(
title: Text(
'Current Level ' + text3.toString(),
style: TextStyle(
//color: Colors.red[900],
color: Text(text3).toString() == Text("5").toString()
? Colors.red[900]
: Text(text3).toString() == Text("4").toString()
? Colors.orange[900]
: Text(text3).toString() == Text("3").toString()
? Colors.brown[300]
: Text(text3).toString() == Text("2").toString()
? Colors.blue[300]
: Text(text3).toString() == Text("1").toString()
? Colors.green[300]
: Colors.black,
fontSize: 25,
fontWeight: FontWeight.bold),
textAlign: TextAlign.center,
),
),
),
Container(
child: ListTile(
title: Text(
text1.toString(),
style: TextStyle(
//color: Colors.red[900],
color: Colors.white,
fontSize: 20,
fontWeight: FontWeight.bold),
textAlign: TextAlign.center,
),
),
),
Container(
alignment: Alignment.topLeft,
padding: const EdgeInsets.all(8.0),
child: StreamBuilder(
stream: Text(text3).toString() == Text('1').toString()
? Firestore.instance.collection('Level1').snapshots()
: Text(text3).toString() == Text('2').toString()
? Firestore.instance.collection('Level2').snapshots()
: Text(text3).toString() == Text('3').toString()
? Firestore.instance.collection('Level3').snapshots()
: Text(text3).toString() == Text('4').toString()
? Firestore.instance.collection('Level4').snapshots()
: Text(text3).toString() == Text('5').toString()
? Firestore.instance
.collection('Level5')
.snapshots()
: Firestore.instance
.collection('Level1')
.snapshots(),
builder: (context, snapshot) {
if (!snapshot.hasData) {
return Text('Loading data ...');
} else {
return Text(DocumentUtils.getDocumentDescriptionFromTitle(snapshot, text1.toString()),style: TextStyle(
color: Colors.white,
fontSize: 15,
fontWeight: FontWeight.normal),
textAlign: TextAlign.left,);
}
},
),
decoration: BoxDecoration(border: Border.all(color: Colors.grey[300])),
),]
));
}
}
class DocumentUtils {
static String getDocumentDescriptionFromTitle(AsyncSnapshot snapshot, String title) {
var map = {
'Info and Comms':8,
'Media':10,
'Utilities':16,
'Education':4,
'Repairs':13,
'Domestic Help':3,
'Transport':15,
'Manufacturing':9,
'Mining':11,
'Supply Chain':14,
'Government':6,
'Financial and Business Services':5,
'Construction':2,
'Agriculture':1,
'Wholesale and Retail Trade':17,
'Accomodation':0,
'Health Social and Personal':7,
'Movement':12,
};
return map[title] != null ? snapshot.data.documents[map[title]]['desc'].toString().replaceAll("/n", "\n") : 'Data not found';
}
}
*****更新******
经过上述if-statement简化后,显示了正确的类别描述,但现在只有 returns Collection 'Level1' from Firestore :
stream: Text(text3).toString() == Text('1').toString()
? Firestore.instance.collection('Level1').snapshots()
: Text(text3).toString() == Text('2').toString()
? Firestore.instance.collection('Level2').snapshots()
: Text(text3).toString() == Text('3').toString()
? Firestore.instance.collection('Level3').snapshots()
: Text(text3).toString() == Text('4').toString()
? Firestore.instance.collection('Level4').snapshots()
: Text(text3).toString() == Text('5').toString()
? Firestore.instance
.collection('Level5')
.snapshots()
: Firestore.instance
.collection('Level1')
.snapshots(),
上面的多个 if-statement 在我的设备上部署应用程序时工作正常,只有当从 Play 商店安装应用程序时,多个 if-statement 才会出现这些问题。
也许它没有直接回答你的问题(评论太长了)但我不确定你为什么直接使用 Text(text1).toString() == Text('text').toString()
而不是 text1 == 'text'
?
另请注意,Text(text3).toString()
将 return 字符串 "Text(text3)",而不是包含的文本。如果要获取包含的文本,请使用 Text(text3).data
。但是,您不必再在这里创建 Text
小部件,text1 == 'text'
应该可以完成这项工作,它更加简单和高效。
我也会将这些 if
重复简化为一个函数,例如(假设您在 snapshot.data.documents
中没有文档标题,那么您将不需要地图来执行映射):
class DocumentUtils {
static String getDocumentDescriptionFromTitle(AsyncSnapshot<YourObject> snapshot, String title) {
var map = {
'Info and Comms':8,
'Media':10,
'Utilities':16,
'Education':4,
'Repairs':13,
'Domestic Help':3,
'Transport':15,
'Manufacturing':9,
'Mining':11,
'Supply Chain':14,
'Government':6,
'Financial and Business Services':5,
'Construction':2,
'Agriculture':1,
'Wholesale and Retail Trade':17,
'Accomodation':0,
'Health Social and Personal':7,
'Movement':12,
};
return map[title] != null ? snapshot.data.documents[map[title]]['desc'].toString().replaceAll("/n", "\n") : 'Data not found';
}
}
因此,在您的小部件中,您只需调用 DocumentUtils.getDocumentDescriptionFromTitle(snapshot, text1)
。
如果您的 snapshot.data.documents
中有文档标题,那么它将类似于:
class DocumentUtils {
static String getDocumentDescriptionFromTitle(AsyncSnapshot<YourObject> snapshot, String title) {
return snapshot.data.documents.firstWhere((Document d) => d.title == title)['desc'].replaceAll("/n", "\n");
}
}