ket*_*t-c 3 state-management dart flutter riverpod flutter-riverpod
当小部件位于同一文件中时,我能够在小部件之间共享数据,但是当小部件位于不同文件中时,用户界面不会重建,而且我似乎没有得到正确的结果。
请检查下面的代码,看看我的不足之处。(我添加了图像以便于阅读和文本代码以便于 CTRL C - CTRL V)
但它不会通知其他小部件/重建当点击第 45 行的按钮时,第 44 行的文本成功更改,但第 26 行的屏幕没有更改
//-------------navigation_provider.dart----------------//
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
class NavigationProvider extends ChangeNotifier{
bool showUserProfile = true;
void toggleProfile(toggle){
showUserProfile = toggle;
notifyListeners();
}
}
Run Code Online (Sandbox Code Playgroud)
//--------------desktop_scaffold.dart----------------//
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:premiumpeaches/providers/navigation_provider.dart';
import 'package:flutter/material.dart';
final navigatorProvider = ChangeNotifierProvider((ref) => NavigationProvider());
class DesktopScaffold extends ConsumerWidget {
@override
Widget build(BuildContext context, WidgetRef ref) {
return SizedBox(
child: ref.watch(navigatorProvider).showUserProfile == true ? UserProfileComponent() : ProfileSettingsComponent()
)
}
Run Code Online (Sandbox Code Playgroud)
//--------------user_profile_component.dart----------------//
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:premiumpeaches/providers/navigation_provider.dart';
import 'package:flutter/material.dart';
final navigatorProvider = ChangeNotifierProvider((ref) => NavigationProvider());
class UserProfileComponent extends ConsumerWidget {
@override
Widget build(BuildContext context, WidgetRef ref) {
return InkWell(
onTap:(){
ref.watch(navigatorProvider).toggleProfile(false);
},
child:Text('Click Me')
)
}
Run Code Online (Sandbox Code Playgroud)
你定义了navigatorProvider两次。
这可能就是你的问题的根源。两个提供者意味着两种不同的状态。所以与一个人互动navigatorProvider不会对另一个人产生影响
navigatorProvider您最有可能想要导入它,而不是定义两次。
例如在里面desktop_scaffold.dart你可以这样做:
import 'user_profile_component.dart';
Run Code Online (Sandbox Code Playgroud)
然后您就可以使用navigatorProvider所有相同的。但现在,您只有一个navigatorProvider,因此所有交互都通过该一个。
| 归档时间: |
|
| 查看次数: |
952 次 |
| 最近记录: |