您好,我尝试在initState和WidgetBuild方法中调用getContacts()函数,但没有得到任何响应,而当我尝试在无状态窗口小部件主类中使用相同的函数并在WidgetBuild方法中调用它时,它可以正常工作。
class ContactsPage extends StatefulWidget {
@override
_ContactsPageState createState() => _ContactsPageState();
}
class _ContactsPageState extends State<ContactsPage>
with SingleTickerProviderStateMixin {
Query _ref;
bool isSearching = false;
get reference => null;
TabController _tabController;
Future<void> getContacts() async {
var client = http.Client();
String contacts_url =
'api url example';
String basicAuth = 'Basic auth example';
var response = await client.get(contacts_url,
headers: <String, String>{'authorization': basicAuth});
print(response.statusCode);
developer.log(response.body);
}
@override
Widget build(BuildContext context) {
getContacts();
return DefaultTabController(
length: 2,
..........
.......发布于 2021-03-27 19:23:13
我不太明白你的意图是什么。如果希望在build方法中使用getContacts返回的值,可以选择使用FutureBuilder。这将允许您根据未来的状态轻松地实现控制流。在下面的代码中,我模拟了示例中getContacts方法的行为。
class ContactsPage extends StatefulWidget {
@override
_ContactsPageState createState() => _ContactsPageState();
}
class _ContactsPageState extends State<ContactsPage> {
Future<List<String>> getContacts() {
return Future.value(['Contact A', 'Contact B', 'Contact C']);
}
@override
Widget build(BuildContext context) {
return FutureBuilder(
future: getContacts(),
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.done) {
final contacts = snapshot.data as List<String>;
return ListView.builder(
itemCount: contacts.length,
itemBuilder: (BuildContext context, int index) {
return ListTile(title: Text(contacts[index]));
},
);
} else {
return CircularProgressIndicator();
}
},
);
}
}https://stackoverflow.com/questions/66830002
复制相似问题