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可能取决于他使用的上下文。