如何通过Provider.of访问数据

时间:2020-10-18 10:05:29

标签: flutter dart

我试图弄清楚如何通过提供程序获取数据,但是我被困住了。

我的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(

我的数据中没有任何错误

3 个答案:

答案 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]));

现在一切正常