[英]Is it possible to convert an Android Fragment into Flutter Widget?
[英]Is it possible to make a If else statment in an Widget in Flutter
是否可以在小部件中創建 If else 語句? 我正在閱讀我的應用程序中的電話號碼,如果它存在,我想查看它是否存在,但如果它不存在,我想為它構建另一個具有不同導航的小部件。 當我測試它時,它總是顯示電話號碼不存在,所以它總是出現在else中。 我的錯誤在哪里?
class _NewTest extends State<NewTest> {
static String mmobileNumber = '';
List<SimCard> _simCard = <SimCard>[];
var list;
String text = "Mobilnumber is empty";
@override
void initState() {
super.initState();
Future.delayed(Duration(seconds: 3), () {
Navigator.pushAndRemoveUntil(
context,
MaterialPageRoute(builder: (context) => Carrier_Info()),
(_) => false);
});
MobileNumber.listenPhonePermission((isPermissionGranted) {
if (isPermissionGranted) {
initMobileNumberState();
} else {}
});
initMobileNumberState();
}
// Platform messages are asynchronous, so we initialize in an async method.
Future<void> initMobileNumberState() async {
if (!await MobileNumber.hasPhonePermission) {
await MobileNumber.requestPhonePermission;
return;
}
String mobileNumber = '';
// Platform messages may fail, so we use a try/catch PlatformException.
try {
mobileNumber = await MobileNumber.mobileNumber;
_simCard = await MobileNumber.getSimCards;
} on PlatformException catch (e) {
debugPrint("Failed to get mobile number because of '${e.message}'");
}
if (!mounted) return;
setState(() async {
var re = RegExp(r'\+[^]*');
mmobileNumber = mobileNumber.replaceRange(0, 3, ''.replaceAll(re, '+'));
print('Hier ist die mobilnummer');
print(mmobileNumber);
});
}
Widget fillCards() {
List<Widget> widgets = _simCard
.map((SimCard sim) => Text(
'Sim Card Number: (${sim.countryPhonePrefix}) - ${sim.number}\nCarrier Name: ${sim.carrierName}\nCountry Iso: ${sim.countryIso}\nDisplay Name: ${sim.displayName}\nSim Slot Index: ${sim.slotIndex}\n\n'))
.toList();
return Column(children: widgets);
}
bool _loading = true;
@override
Widget build(BuildContext context) {
if (mmobileNumber == null) {
return MaterialApp(
title: 'Fetch Data Example',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: Scaffold(
appBar: AppBar(
backgroundColor: Color.fromRGBO(35, 31, 32, 1),
title: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Image.asset(
'assets/images/test.png',
fit: BoxFit.contain,
height: 55,
)
],
),
),
body: Center(
child: _loading
? Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
CircularProgressIndicator(
valueColor: AlwaysStoppedAnimation<Color>(
Color.fromRGBO(35, 31, 32, 1),
),
backgroundColor: Colors.grey[200],
strokeWidth: 5,
),
Text(" "),
Text("Data is loaded and MobileNumber is not empty.",
style: TextStyle(fontSize: 20)),
Text(mmobileNumber),
],
)
: Text("Press button to download"),
),
));
} else {
return MaterialApp(
title: 'Fetch Data Example',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: Scaffold(
appBar: AppBar(
backgroundColor: Color.fromRGBO(35, 31, 32, 1),
title: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Image.asset(
'assets/images/autokontor.png',
fit: BoxFit.contain,
height: 55,
)
],
),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(" "),
Text("MobileNumber is empty.", style: TextStyle(fontSize: 20)),
],
)),
));
}
}
}
感謝您的幫助,我找到了解決方案:
@override
void initState() {
super.initState();
Future.delayed(Duration(seconds: 1), () {
if (mmobileNumber.length < 1) {
print("is empty");
Navigator.pushAndRemoveUntil(
context,
MaterialPageRoute(builder: (context) => NoMobileNumber()),
(_) => false);
} else if (list == null) {
Navigator.pushAndRemoveUntil(
context,
MaterialPageRoute(builder: (context) => NoInternet()),
(_) => false);
} else {
print(_loadHtml3(String));
Navigator.pushAndRemoveUntil(
context,
MaterialPageRoute(
builder: (context) => Test(mmobileNumber, mmobileNumber,
list[1][0], _loadHtml2(String), _loadHtml3(String))),
(_) => false);
}
});
MobileNumber.listenPhonePermission((isPermissionGranted) {
if (isPermissionGranted) {
initMobileNumberState();
} else {}
});
futureAlbum = fetchAlbum();
initMobileNumberState();
}
我剛剛在 init 中做了 IF else 語句。 可能不是最聰明的解決方案,但它對我有用。
您可以為此使用三元運算符。
phoneNumber? Container(): Text("Not Present")
是的,您可以有條件地在子級中渲染小部件,而不是有條件地返回 MaterialApp 小部件。 見下面的例子:
Container(
child : if(mobileNumber)
Text()
else
Container(),
color: Colors.red
);
也許,使用 state 管理方法將是條件渲染的更好解決方案,請參閱Flutter State 管理方法
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.