Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 提供程序未在另一个屏幕中显示更新状态,但仅在第一个显示模态类和更改通知程序的屏幕中显示更新状态_Android_Flutter_Dart - Fatal编程技术网

Android 提供程序未在另一个屏幕中显示更新状态,但仅在第一个显示模态类和更改通知程序的屏幕中显示更新状态

Android 提供程序未在另一个屏幕中显示更新状态,但仅在第一个显示模态类和更改通知程序的屏幕中显示更新状态,android,flutter,dart,Android,Flutter,Dart,因此,我正在使用provider和change notifier,问题是当我更改同一文件中的状态和notifiy侦听器时,用户界面会更新,但当我尝试在另一个屏幕中访问来自模型的相同数据时,它仍然保留原始或第一个版本,而不是更新的版本,另一个文件中的类甚至使用了change notifier提供程序和使用者,就像内部包含模态类的文件一样,但没有更改值,它只保留初始值,第二个文件只有changenotifierprovider和使用者,但它只显示初始值,而不是更新的,而是包含模型类的第一个文件,ch

因此,我正在使用provider和change notifier,问题是当我更改同一文件中的状态和notifiy侦听器时,用户界面会更新,但当我尝试在另一个屏幕中访问来自模型的相同数据时,它仍然保留原始或第一个版本,而不是更新的版本,另一个文件中的类甚至使用了change notifier提供程序和使用者,就像内部包含模态类的文件一样,但没有更改值,它只保留初始值,第二个文件只有changenotifierprovider和使用者,但它只显示初始值,而不是更新的,而是包含模型类的第一个文件,change notifier函数在其小部件中显示更新版本,我通常使用提供者将数据从小部件树中的一个小部件一直共享到小部件树的另一个区域中的某个小部件

例如:

定义扩展ChangeNotifier的提供程序类 用这样的提供者小部件包装你的应用程序
导入“包装:颤振/材料.省道”;
导入“包:provider/provider.dart”;
void main(){
runApp(
材料聚丙烯(
initialRoute:“/root”,
路线:{
“/root”:(上下文)=>MyApp(),
},
标题:“你的应用程序标题”,
),
);
}
类MyApp扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
///Multiprovider允许您拥有多个提供程序,这对于多个应用程序来说非常有用
///复杂的应用程序,您可能需要共享有关用户以外的其他内容的数据
回程多供应商(
供应商:[
///这将确保你应用程序中的所有小部件都能监听提供商的更改,
///将得到通知,并将共享数据提供给他们
ChangeNotifierProvider.value(值:UserProvider()),
],
孩子:MaterialApp(
主:Wrapper(),
),
);
}
}
在应用程序中的任何位置访问和存储数据
导入“包装:颤振/材料.省道”;
导入“包:provider/provider.dart”;
///确保导入UserProvider.dart文件
导入“包:app/services/UserProvider.dart”;
类主屏幕扩展StatefulWidget{
@凌驾
_HomeScreenState createState()=>\u HomeScreenState();
}
类_homescrenstate扩展状态{
用户提供者用户提供者;
@凌驾
小部件构建(构建上下文){
///收听提供程序中的更改/更新
userProvider=Provider.of(上下文);
返回脚手架(
正文:安全区(
儿童:中心(
子:文本(
///这是您从提供者获取更新数据的方式
userProvider.user.firstName,
),
),
),
);
}
}
在应用程序中的任意位置更新数据
导入“包装:颤振/材料.省道”;
导入“包:provider/provider.dart”;
///确保导入UserProvider.dart文件
导入“包:app/services/UserProvider.dart”;
类其他屏幕扩展StatefulWidget{
@凌驾
_另一个ScreenState createState()=>另一个ScreenState();
}
类_其他屏幕状态扩展状态{
用户提供者用户提供者;
@凌驾
小部件构建(构建上下文){
///收听提供程序中的更改/更新
userProvider=Provider.of(上下文);
返回脚手架(
正文:安全区(
儿童:中心(
孩子:升起按钮(
///这是更新提供程序中数据的方式
已按下:(){
userProvider.user=AppUser(“新建”、“用户”);
setState((){});
},
子项:文本(“更新用户”),
),
),
),
);
}
}
希望这有助于解决您的问题

import 'package:flutter/material.dart';
import 'package:app/utils/AppUser.dart';

class UserProvider extends ChangeNotifier {
  /// You can either set an initial value here or use a UserProvider object 
  /// and call the setter to give it an initial value somewhere in your app, like in main.dart

  AppUser _user; /// or AppUser _user = AppUser("firstName", "lastName");

  AppUser get user => _user;

  set user(AppUser newUser) {
    _user = newUser;

    /// MAKE SURE YOU NOTIFY LISTENERS IN YOUR SETTER
    notifyListeners();
  }

}