Flutter未来提供商

时间:2020-09-22 15:49:36

标签: flutter flutter-provider

这个问题对我来说很重要,以便了解FutureProvider在Flutter中的工作方式。 最后,我将有3或4个将来的提供程序(1xSharedPreferences,3xSqflite)。

我的问题是我无法更新数据。我创建了UserProfile对象(运行时),但是无法更新该特定对象。而不是我更新对象的源。我找不到解决方案,因为将来所有提供程序的示例都与Json相关,并且就我的知识水平而言确实很难理解。

这是我的代码; MAIN.DART文件

void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    final UserService userService = UserService();
    return FutureProvider<UserProfile>(
      create: (context) => userService.fetchUserProfile(),
      child: MaterialApp(
        home: HomePage(),
      ),
    );
  }
}

HOME_PAGE.DART FILE

class HomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    final UserProfile userData = Provider.of<UserProfile>(context);
    return Scaffold(
      body: Consumer<UserProfile>(
        builder: (context, value, widget) {
          return Column(
            children: [
              Text('User ID & Name : ${value.id} / ${value.name}'),
              RaisedButton(
                onPressed: () {
                  UserService dataChanger = UserService();
                  dataChanger.changeUserName();
                },
                child: Text('Press'),
              ),
            ],
          );
        }
      ),
    );
  }
}

USER.DART文件

class UserProfile {
  final int id;
  final String name;
  UserProfile({this.id, this.name});
}

USER_SERVICES.DART文件

class UserService {
  Future<UserProfile> fetchUserProfile() async {
    final prefs = await SharedPreferences.getInstance();
    if (prefs.getInt('ID') == null) {await prefs.setInt('ID', 1);}
    if (prefs.getString('NAME') == null) {await prefs.setString('NAME', 'Brad Pitt');}
    UserProfile userProfile = UserProfile(
        id: prefs.getInt('ID'),
        name: prefs.getString('NAME'),
    );
    return userProfile;
  }

  Future<void> changeUserName() async {
    final prefs = await SharedPreferences.getInstance();
    await prefs.setString('NAME', 'Angelina Julie');
  }
}

如果有人帮助我,我将不胜感激。

谢谢。

0 个答案:

没有答案