gpt4 book ai didi

dart - Flutter将获取的数据发送到导航栏项目

转载 作者:行者123 更新时间:2023-12-03 03:42:08 25 4
gpt4 key购买 nike

我的页面(用户)比较困惑,底部有两个导航栏(用户信息和讨论)。我通过用户列表转到此页面,并将其传递给已选择的用户ID。然后,该页面查询用户信息,然后将用户信息传递到用户信息页面,并将讨论传递到讨论页面。

class UserView extends StatefulWidget {
final String userUUID;

UserView({this.userUUID});

@override
State<StatefulWidget> createState() {
return _UserViewState();
}
}

class _UserViewState extends State<UserView> {
int _currentIndex = 0;
String _userUUID;
UserView _user;

List<Widget> _children;

@override
void initState() {
super.initState();
_userUUID = widget.userUUID;
_children = [
UserInfo(user: _user),
UserComments()
];
}

@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(_user.userFirstName + " " + _user.userLastName),
),
body: new FutureBuilder(
future: _getUserInfo(http.Client(), _userUUID),
builder: (BuildContext context, AsyncSnapshot snapshot){
if(snapshot.hasError) print(snapshot.error);
return snapshot.hasData ?
UserInfo(user: snapshot.data):
Center(child: CircularProgressIndicator());
}
),
bottomNavigationBar: BottomNavigationBar(
currentIndex: _currentIndex, // this will be set when a new tab is tapped
items: [
BottomNavigationBarItem(
icon: new Icon(Icons.info),
title: new Text('Info'),
),
BottomNavigationBarItem(
icon: new Icon(Icons.chat),
title: new Text('Discussion'),
)
],
onTap: (int index) {
setState(() {
_currentIndex = index;
});
},
),
);
}
}

Future<User> _getUserInfo(http.Client client, String userUUID) async {
final SharedPreferences prefs = await SharedPreferences.getInstance();
Map<String, String> headersMap = {
'Authorization' : 'Bearer ' + prefs.getString("TOKEN")
};

final response = await http.get(
'https://myapi/user/view/' + userUUID,
headers: headersMap
);

if(response.statusCode == 200) {
return User.fromJson(json.decode(response.body));
} else {
throw Exception('Failed to load user data');
}
}

我正在使用FutureBuilder从API获取信息,并希望将User对象传递给User Info页面,并将Discussion列表传递给Discussion页面。

来自服务器的响应如下所示:
{
"uuid": "829998e8-6a48-4a50-a7e0-3581aeaaee87",
"first_name": "John",
"last_name": "Doe",
"age": 22,
"gender": "Male",
"phone": "",
"email": "",
"created_at": "2018-10-09T00:44:04.000Z",
"updated_at": "2018-10-09T00:44:04.000Z",
"comments": [
{
"uuid": "d2c046c8-efd4-4dfa-bcef-5ee021192a7e",
"user_uuid": "829998e8-6a48-4a50-a7e0-3581aeaaee87",
"comment": "this is comment",
"created_at": "2018-10-16T23:23:25.000Z",
"updated_at": "2018-10-16T23:23:25.000Z"
}
]
}

最佳答案

您可以将FutureBuilder提升为Scaffold,以便您的AppBarBottomNavigationBar可以访问_getUserInfo的响应数据

@override
Widget build(BuildContext context) {
return new FutureBuilder(
future: _getUserInfo(_userUUID),
builder: (BuildContext context, AsyncSnapshot snapshot) {
if(snapshot.hasError) print(snapshot.error);

_user = snapshot.data ?? _user;

return Scaffold(
appBar: AppBar(
title: Text((_user != null) ? _user.userFirstName + " " + _user.userLastName : ""),
),
body: (_user != null) ? UserInfo(user: _user) : Center(child: CircularProgressIndicator()),
bottomNavigationBar: BottomNavigationBar(
currentIndex: _currentIndex, // this will be set when a new tab is tapped
items: [
BottomNavigationBarItem(
icon: new Icon(Icons.info),
title: new Text('Info'),
),
BottomNavigationBarItem(
icon: new Icon(Icons.chat),
title: new Text('Discussion'),
)
],
onTap: (int index) {
setState(() {
_currentIndex = index;
});
},
),
);
}
);
}

关于dart - Flutter将获取的数据发送到导航栏项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52849949/

25 4 0