我是使用提供程序包进行颤振状态管理的新手。有多少不同的原因生成这些类型的异常以及如何修复它,此异常是在didChangeDependency中调用getFollowing() 方法时生成的。
跟随.dart
class Follows with ChangeNotifier{
List<Follow> _following =[];
String userid;
String token;
List<Follow> get followingUser{
return [..._following];
}
void updates(String token,String userid){
this.userid = userid;
this.token = token;
}
Future<void> getFollowing(String id) async {
final response = await http.get("${Domain.ADDRESS}/user/following/$id",headers: {"auth-token" : this.token});
final data =json.decode(response.body)["following"] as List;
List<Follow> followingData =[];
data.forEach((user){
followingData.add(Follow(
id: user["_id"],
username: user["username"],
fullname: user["fullname"],
imageUrl: user["imageUrl"],
followerCount : (user["followers"] as List).length
));
});
_following = [...followingData];
notifyListeners();
}
.........
} …Run Code Online (Sandbox Code Playgroud) 我尝试将Hero小部件与ChangeNotifierProvider新的导航 2.0 系统一起使用。但我在那里面临着问题。相同的代码在不使用时有效。changeNotifier
我面临的问题是,弹出第二页 W2 后,第一页中的文本(即英雄的孩子)消失了。
下面是完整的代码。runApp(HeroTestApp2())正常工作。但我很想让第一种方法发挥作用。请帮忙。
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
main(List<String> args) {
runApp(HeroTestApp());
}
class MyModel extends ChangeNotifier {
bool _go = false;
bool get go => _go;
set go(bool go) {
_go = go;
notifyListeners();
}
}
class HeroTestApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return ChangeNotifierProvider<MyModel>(
create: (context) => MyModel(),
builder: (context, _) {
final state = context.watch<MyModel>();
return MaterialApp(
home: Navigator(
pages: [
MaterialPage(child: W1(onTapped: …Run Code Online (Sandbox Code Playgroud) dart flutter flutter-navigation flutter-provider flutter-widget
我正在ExpansionPanelList通过使用Provider包来实现 the ,而不是制作Widgetbe statefulWidget。然而,它expansionCallback永远不会起作用。如果我单击屏幕上的第一个折叠列表,它永远不会展开。具体来说,data[0].isExpanded总是false在SummitView.dart. 控制台中没有报告错误。
这是我的SummitView.dart:
import 'package:delta_y/modules/summits/model/Item.dart';
import 'package:delta_y/modules/summits/model/ItemsList.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
class SummitView extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("Summit/Milestone"),
),
body: ChangeNotifierProvider(
create: (context) => ItemsList(),
child: Summit(),
));
}
}
class Summit extends StatelessWidget {
@override
Widget build(BuildContext context) {
final itemModel = Provider.of<ItemsList>(context);
// List<Item> _data = generateItems(8); …Run Code Online (Sandbox Code Playgroud) 尝试获取当前用户的 uid 并发送短信,但遇到 Provider 实现错误。
尝试致电 Provider.of。这可能是一个错误,因此不受支持。如果您想公开一个可以是任何内容的变量,请考虑更改
dynamic为Object。'package:provider/src/provider.dart': 断言失败: 第 307 行 pos 7: 'T !=dynamic'
这是使用提供程序的代码
return SingleChildScrollView(
child: Column(
children: [
FutureBuilder(
future: Provider.of(context, listen: false).auth.getCurrentUid(),
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.done) {
return Text("${snapshot.data}");
} else {
return CircularProgressIndicator();
}
})
],
),
);
Run Code Online (Sandbox Code Playgroud)
获取当前uid的函数
//GET UID
Future<String> getCurrentUid() async {
return _auth.currentUser.uid;
}
Run Code Online (Sandbox Code Playgroud)
我怎样才能解决这个问题?非常感谢任何帮助!先感谢您。
简而言之,我是 flutter 的新手,我想知道 FutureProvider 和 StreamProvider 和 ChangeNotifierProvider 之间的区别以及何时使用每一个。提前致谢。
目前,我正在学习 flutter,当提供者中的值发生变化时,无法更新一个 textController。这是我已经尝试过的代码:
TextEditingController textController;
@override
void initState() {
TranslateTextProvider myProvider = Provider.of<TranslateTextProvider>(
context,
listen: false,
);
super.initState();
textController = TextEditingController(text: myProvider.translated);
}
@override
void dispose() {
textController.dispose();
super.dispose();
}
Run Code Online (Sandbox Code Playgroud)
提供程序正在正确更新,但文本字段没有更新,是的,我已在文本字段上设置了控制器。我会很感激每一个提示。
如何像inStateNotifier一样使用加载/错误状态?FutureProviderRiverpod
我们可以使用 setState、带三元运算符的 var isLoading 和 didChangeDependency 对 Provider 执行相同的操作。
我刚开始使用 RiverPod。之前我使用 Provider 进行状态管理。
如果是提供程序,我可以使用小部件树之外的提供程序来使用语法获取值
Provider.of<MyModel>(context,listen:true).someFunction();
Run Code Online (Sandbox Code Playgroud)
我如何在 RiverPod 中做同样的事情?现在我正在使用 Consumer Builder 和 Consumer Widget。我想知道是否有一种方法可以在不使用 Consumer 的情况下调用 Riverpod 提供商。
我有这个代码:
MultiBlocProvider(
providers: [
BlocProvider(
create: (context) => CubitExample(),
),
],
child: MaterialApp(
home: Home(),
),
);
Run Code Online (Sandbox Code Playgroud)
它工作正常,我有很多肘节/块,所以我决定将提供者列表移动到一个单独的类:
MultiBlocProvider(
providers: BlocProviders.blocs(),
child: MaterialApp(
home: Home(),
),
);
Run Code Online (Sandbox Code Playgroud)
// The class
class BlocProviders {
static List<BlocProvider> blocs() {
return <BlocProvider>[
BlocProvider(
create: (context) => CubitExample(()),
),
];
}
}
Run Code Online (Sandbox Code Playgroud)
现在抛出通常的块错误:
ProviderNotFoundException (Error: Could not find the correct Provider<ExampleCubit> above this BlocBuilder<ExampleCubit, ExampleState> Widget
Run Code Online (Sandbox Code Playgroud)
我不知道为什么当我尝试第二个代码时会抛出错误,为什么会抛出错误?
我错了吗Widget,或者如果我们只想将值传递给树,那Provider是InheritedWidget带有dispose方法的吗?
flutter ×10
flutter-provider ×10
dart ×3
riverpod ×2
bloc ×1
firebase ×1
flutter-bloc ×1
mobile ×1
textfield ×1