繁体   English   中英

如何通过Provider.of访问数据

[英]How to access data through Provider.of

我试图弄清楚如何通过提供者获取数据,但我被卡住了。

我的主要.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(),
        },
      ),
    );
  }
}

但是一旦我想在另一个小部件中获取数据,我就会得到 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]);
  }
}

如何在任何其他小部件中获取用户数据? 我将不胜感激任何帮助

我第一次在主页面小部件返回中获取数据

FutureBuilder <UserBocorp> (
      future: Provider.of <UserBocorp> (context, listen: false) .createAlbum (),

它可以很好地显示数据,但是一旦我想通过以下方式访问另一个小部件中的相同数据:

Widget build(BuildContext context) {
    var user = Provider.of<UserBocorp>(context);
    return Drawer(

我只是在我的数据中得到空值而没有任何错误

您正在寻找的是使用该数据的“消费者”。

看看: https : //flutter.dev/docs/development/data-and-backend/state-mgmt/simple

简而言之,是这样的:

return Consumer<UserBocorp>(
  builder: (context, user, child) {
    return Text("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]));

现在一切正常

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM