我试图弄清楚如何通过提供程序获取数据,但是我被困住了。
我的main.dart
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MultiProvider(
providers: [
ChangeNotifierProvider<UserBocorp>(
create: (context) => UserBocorp(),
)
],
child: MaterialApp(
debugShowCheckedModeBanner: false,
home: IsLogin(),
routes: {
LoginPage.routeName: (ctx) => LoginPage(),
HomePage.routeName: (ctx) => HomePage(),
Article.routeName: (ctx) => Article(),
Staffs.routeName: (ctx) => Staffs(),
},
),
);
}
}
但是一旦我想在另一个小部件中获取数据,我就会得到空
我的userBocorp类:
class UserBocorp extends ChangeNotifier {
final int id;
final String name;
final String lastname;
final String photo;
final int typeUser;
UserBocorp({this.id, this.name, this.lastname, this.photo, this.typeUser});
factory UserBocorp.fromJson(Map<String, dynamic> json) {
return UserBocorp(
id: json['id'],
name: json['name'],
lastname: json['lastname'],
photo: json['avatar'],
typeUser: json['type'],
);
}
UserBocorp jsonresponse;
Future<UserBocorp> createAlbum() async {
final http.Response response = await http.post(
'https://test.com/api/getUserName',
headers: <String, String>{
'Content-Type': 'application/json; charset=UTF-8',
},
body: jsonEncode(<String, String>{
'title': 'test@test.com',
}),
);
final jsonresponse = json.decode(response.body);
notifyListeners();
return UserBocorp.fromJson(jsonresponse[0]);
}
}
如何在其他任何小部件中获取用户数据?我将不胜感激
我是在首页小部件返回中第一次获取数据
FutureBuilder <UserBocorp> (
future: Provider.of <UserBocorp> (context, listen: false) .createAlbum (),
它可以很好地显示数据,但是只要我想通过以下方式访问另一个小部件中的相同数据:
Widget build(BuildContext context) {
var user = Provider.of<UserBocorp>(context);
return Drawer(
我的数据中没有任何错误
答案 0 :(得分:0)
您要寻找的是使用该数据的“消费者”。
看看:https://flutter.dev/docs/development/data-and-backend/state-mgmt/simple。
简而言之,像这样:
return Consumer<UserBocorp>(
builder: (context, user, child) {
return Text("Name: ${user.name}");
},
);
答案 1 :(得分:0)
尝试使用ChangeNotifierProvider.value
代替ChangeNotifierProvider
ChangeNotifierProvider.value(value: UserBocorp()),
答案 2 :(得分:0)
我通过在班上添加get来解决了这个问题
var _userInfo;
get userInfo => _userInfo;
void setUserInfo(info) {
_userInfo = info;
}
并且在收到答案后:
setUserInfo(UserBocorp.fromJson(jsonresponse[0]));
现在一切正常