这个问题对我来说很重要,以便了解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');
}
}
如果有人帮助我,我将不胜感激。
谢谢。