我在屏幕 1 中显示 deviceName。 我尝试从屏幕 2 设置 deviceName,然后导航回来。 在 setDeviceName 表示变量已更新后,即使在我的打印中,UI 也不会更新。
我导航的代码:
globalStateProvider.setDeviceName('name');
print(globalStateProvider.deviceName); (prints new name)
Navigator.pushReplacement(context, WidgetAnimator(MainWidget(), 0));
我尝试过的:
import 'package:flutter/cupertino.dart';
class GlobalStateProvider with ChangeNotifier {
String _deviceName = '';
String get deviceName => _deviceName;
setDeviceName(String newName) {
_deviceName = newName;
notifyListeners();
}
}
// Global value to access whole app
final globalStateProvider = GlobalStateProvider();
然后我就从我的文件中调用:
globalStateProvider.setDeviceName('name');
globalStateProvider.deviceName;
其他尝试:
在我需要的地方声明 globalStateProvider。
final globalStateProvider =
Provider.of<GlobalStateProvider>(context, listen: false);
因此,在我想要使用它的所有小部件中,我只需声明它并调用函数。但这不起作用。
其他尝试:
Provider.of<GlobalStateProvider>(context, listen: false).setDeviceName('');
Consumer<GlobalStateProvider>(builder: (context, state, child) {
return Text(state.deviceName),
}),
仍然没有任何作用...
你不能使用
final globalStateProvider = GlobalStateProvider();
provider
的工作方式如下:它提供 BuildContext
中小组件树下的值。您需要首先在应用程序根目录的某个位置使用
globalStateProvider
或 Provider
小部件提供 Provider.value
,以便能够侦听其更改。
但是,当您使用
ChangeNotifier
时,您将专门需要一个 ChangeNotifierProvider
。不过,对于您的情况,如果您确实希望将 globalStateProvider
作为全局变量,则可以仅使用 ListenableBuilder
并将其作为 listenable
传递。因此,每当此可听对象调用 ListenableBuilder.builder
时,都会重建 notifyListeners
中的子树返回。