Flutter 如何通过Provider.of访问数据
我正试图找出如何通过提供商获取数据,但我被卡住了 我的主飞镖Flutter 如何通过Provider.of访问数据,flutter,dart,Flutter,Dart,我正试图找出如何通过提供商获取数据,但我被卡住了 我的主飞镖 class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MultiProvider( providers: [ ChangeNotifierProvider<UserBocorp>( create: (context) => U
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(),
},
),
);
}
}
类MyApp扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
回程多供应商(
供应商:[
变更通知提供者(
create:(context)=>UserBocorp(),
)
],
孩子:MaterialApp(
debugShowCheckedModeBanner:false,
home:IsLogin(),
路线:{
LoginPage.routeName:(ctx)=>LoginPage(),
HomePage.routeName:(ctx)=>HomePage(),
Article.routeName:(ctx)=>Article(),
staff.routeName:(ctx)=>staff(),
},
),
);
}
}
但只要我想在另一个小部件中获取数据,我就会得到null
我的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]);
}
}
class UserBocorp扩展变更通知程序{
最终int id;
最后的字符串名;
最后一个字符串lastname;
最后的弦乐照片;
最终int类型用户;
UserBocorp({this.id,this.name,this.lastname,this.photo,this.typeUser});
工厂UserBocorp.fromJson(映射json){
返回UserBocorp(
id:json['id'],
名称:json['name'],
lastname:json['lastname'],
照片:json['avatar'],
typeUser:json['type'],
);
}
UserBocorp jsonresponse;
Future createAlbum()异步{
final http.Response Response=wait http.post(
'https://test.com/api/getUserName',
标题:{
“内容类型”:“应用程序/json;字符集=UTF-8”,
},
正文:JSONECODE({
'标题':'test@test.com',
}),
);
final jsonresponse=json.decode(response.body);
notifyListeners();
返回UserBocorp.fromJson(jsonresponse[0]);
}
}
如何在任何其他小部件中获取用户数据?如果有任何帮助,我将不胜感激
我第一次在主页小部件返回中获取数据
FutureBuilder <UserBocorp> (
future: Provider.of <UserBocorp> (context, listen: false) .createAlbum (),
FutureBuilder(
future:Provider.of(context,listen:false).createAlbum(),
它可以很好地显示数据,但只要我想通过以下方式访问另一个小部件中的相同数据:
Widget build(BuildContext context) {
var user = Provider.of<UserBocorp>(context);
return Drawer(
小部件构建(构建上下文){
var user=Provider.of(上下文);
回程抽屉(
我只是在我的数据中得到空值,没有任何错误您要查找的是使用该数据的“消费者” 看看: 简单地说,就是这样:
return Consumer<UserBocorp>(
builder: (context, user, child) {
return Text("Name: ${user.name}");
},
);
返回消费者(
生成器:(上下文、用户、子对象){
返回文本(“名称:${user.Name}”);
},
);
尝试使用ChangeNotifierProvider.value
而不是ChangeNotifierProvider
ChangeNotifierProvider.value(value: UserBocorp()),
我在班上增加了get,解决了这个问题
var _userInfo;
get userInfo => _userInfo;
void setUserInfo(info) {
_userInfo = info;
}
在收到答复后:
setUserInfo(UserBocorp.fromJson(jsonresponse[0]));
现在一切都正常了谢谢你的回答,但是我一直都会得到空值,即使你得到一个没有错误的空值,可能你的数据是空的,并且你没有对它们进行popolating。事实上,你只是有一些类似于
String name;
的东西,但是如果你没有正确初始化它呢?如果将是空的。他提到,数据正在主窗口中获取tIt可能取决于他使用的上下文。