我是 Flutter 的新手,我一直在嘗試使用包 contacts_service 來獲得一個包含聯系人姓名和號碼的串列。下面是嘗試的代碼,但是“title: Text(contact.displayName)”給了我錯誤displayName 錯誤和“subtitle: Text(contact.phones.elementAt(0).value 給了我錯誤elementAt error。從我明白這是由于空安全造成的,但我不太確定在哪里或如何檢查我的代碼中的空值。我是在腳手架內部還是在構建它之前進行檢查?謝謝
import 'package:contacts_service/contacts_service.dart';
import 'package:flutter/material.dart';
class Contacts extends StatefulWidget {
@override
_Contacts createState() => _Contacts();
}
class _Contacts extends State<Contacts>{
List<Contact> contacts =[];
@override
void initState() {
super.initState();
getAllContacts();
}
getAllContacts() async{
List<Contact> _contacts = (await ContactsService.getContacts(withThumbnails: false)).toList();
setState(() {
contacts = _contacts;
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text('Contact info'
),),
body: Container(
padding: EdgeInsets.all(20),
child: Column(
children: <Widget>[ Text ('test'),
ListView.builder(
shrinkWrap: true,
itemCount: contacts.length,
itemBuilder: (context, index) {
Contact contact = contacts[index];
return ListTile(
title: Text(contact.displayName),
subtitle: Text(
contact.phones.elementAt(0).value
),
);
},
)
],
),
),
);
}
}
uj5u.com熱心網友回復:
import 'package:contacts_service/contacts_service.dart';
import 'package:flutter/material.dart';
class Contacts extends StatefulWidget {
@override
_Contacts createState() => _Contacts();
}
class _Contacts extends State<Contacts>{
List<Contact> contacts =[];
@override
void initState() {
super.initState();
getAllContacts();
}
getAllContacts() async{
List<Contact> _contacts = (await ContactsService.getContacts(withThumbnails:
false)).toList();
setState(() {
contacts = _contacts;
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text('Contact info'
),),
body: Container(
padding: EdgeInsets.all(20),
child: Column(
children: <Widget>[ Text ('test'),
ListView.builder(
shrinkWrap: true,
itemCount: contacts.length,
itemBuilder: (context, index) {
return ListTile(
title: Text("${contact.displayName}"),
subtitle: Text(
"${contact.phones.elementAt(0).value}"
),
);
},
)
],
),
),
);
}
}
嘗試這個
uj5u.com熱心網友回復:
首先,我想讓你參考這個關于類的檔案Contact。
它的屬性都是可為空的。因此,在您自己檢查之前,您永遠不會知道它是否為空。
如果你想設定一個默認值,以防它為空,你可以對這段代碼這樣做。
Text(contact.displayName)->Text(contact.displayName??'default value')
第二個代碼檢查是否contact.displayName為空,如果是,'default value'將回傳字串文字。您可以回傳任何其他您想要的默認值。
讓我們談談第二個。如果您嘗試呼叫可空物件的方法,您不妨檢查它是否為空。
如果您確定它在邏輯上不能為空(不是在編程上),您可以告訴編譯器這在運行時不會為空。
contact.phones.elementAt(0).value -> contact.phones!.elementAt(0).value
但是如果有一點contact.phones可能為空的概率,您將再次看到空檢查錯誤。然后讓我們像第一種情況一樣設定一個默認值。
contact.phones.elementAt(0).value -> contact.phones?.elementAt(0)??defaultValue
在上面的代碼中,?在phones作業之后,只有當不為 null時 contact.phones才會執行方法呼叫。所以,如果它是空的,什么都不會做,最終會是空的。然后將做與第一個案例相同的事情。contact.phones
我希望這會有所幫助。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/377665.html
上一篇:為什么布爾狀態不會隨鉤子改變?
