颤抖的通知列列列者不断地重建

发布于 2025-01-28 23:46:58 字数 1806 浏览 3 评论 0原文

这是我与数据库通信的我的服务功能

Future<News?> getNewsList(String token) async {
var url = Uri.tryParse('${baseUrl}get-news-list');
var response =
    await http.post(url!, headers: {'Authorization': 'Bearer $token'});
if (response.statusCode == 200) {
  var map = json.decode(response.body);
  var list = News.fromJson(map);
  print("map:${list.data![0]}");
  return News.fromJson(map);
} else {
  return News(message: null, status: false, data: null);
}

}

这是我使用MVVM模式的ViewModel

class NewsViewModel extends ChangeNotifier {
ApiOp api = ApiOp();

Future<List<NewsModel?>?> getNews() async {
String token ="token-here";
var map = await api.getNewsList(token);

List<NewsModel?>? list = map!.data;
print("object:${list![0]!.title}");
notifyListeners();
return list;

类 }

在这里我在视图上显示数据的位置,

 Consumer<NewsViewModel?>(
                builder: (context, value, child) => FutureBuilder<dynamic>(
                    future: value!.getNews(),
                    builder: (context, snapshot) {
                      List? list = snapshot.data;
                      
                      print("list:$list");
                      return ListView.builder(
                        itemCount: 2,
                        itemBuilder: (context, index) {
                          return FirsatWidget(
                            title:"",
                            date: "",
                            photoUrl: "lib/assets/temp/4.jpg",
                          );
                        },
                      );
                    }),
              ),

但是当我运行应用程序时,一些打印功能在调试中像这些打印一样垃圾邮件 打印(“对象:$ {list![0]!。title}”); 打印(“地图:$ {list.data![0]}”); 该代码是连续将帖子发送到服务器还是只是重建消费者

This is my service function that communicate with the database

Future<News?> getNewsList(String token) async {
var url = Uri.tryParse('${baseUrl}get-news-list');
var response =
    await http.post(url!, headers: {'Authorization': 'Bearer $token'});
if (response.statusCode == 200) {
  var map = json.decode(response.body);
  var list = News.fromJson(map);
  print("map:${list.data![0]}");
  return News.fromJson(map);
} else {
  return News(message: null, status: false, data: null);
}

}

This my viewModel class I am using mvvm pattern

class NewsViewModel extends ChangeNotifier {
ApiOp api = ApiOp();

Future<List<NewsModel?>?> getNews() async {
String token ="token-here";
var map = await api.getNewsList(token);

List<NewsModel?>? list = map!.data;
print("object:${list![0]!.title}");
notifyListeners();
return list;

}
}

And here where I show the data on the view

 Consumer<NewsViewModel?>(
                builder: (context, value, child) => FutureBuilder<dynamic>(
                    future: value!.getNews(),
                    builder: (context, snapshot) {
                      List? list = snapshot.data;
                      
                      print("list:$list");
                      return ListView.builder(
                        itemCount: 2,
                        itemBuilder: (context, index) {
                          return FirsatWidget(
                            title:"",
                            date: "",
                            photoUrl: "lib/assets/temp/4.jpg",
                          );
                        },
                      );
                    }),
              ),

But when I run the app some print function spamming in the debug like these prints
print("object:${list![0]!.title}");
print("map:${list.data![0]}");
Is this code continuously send post to the server or just rebuilding the consumer

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

海拔太高太耀眼 2025-02-04 23:46:58

此代码是连续发送帖子或仅重建服务器的
消费者

您正在连续将HTTP重新确定到服务器的

。您不需要使用消费者&lt; newsViewModel?&gt; and notifyListeners();,因为您正在使用未来获取数据的FutureBuilder。

尝试此代码:

FutureBuilder<dynamic>(
                    future: Provider.of<NewsViewModel>(context,listen:false).getNews(),
                    builder: (context, snapshot) {
                      List? list = snapshot.data;
                      
                      print("list:$list");
                      return ListView.builder(
                        itemCount: 2,
                        itemBuilder: (context, index) {
                          return FirsatWidget(
                            title:"",
                            date: "",
                            photoUrl: "lib/assets/temp/4.jpg",
                          );
                        },
                      );
                    }),
              ),

并注释NotifyListeners()

class NewsViewModel extends ChangeNotifier {
ApiOp api = ApiOp();

Future<List<NewsModel?>?> getNews() async {
String token ="token-here";
var map = await api.getNewsList(token);

List<NewsModel?>? list = map!.data;
print("object:${list![0]!.title}");
// notifyListeners();
return list;

让我知道您是否有问题并且仍然有重建。

Is this code continuously send post to the server or just rebuilding
the consumer

You are continuosly sending http reqests to your server.

You don't need to use Consumer<NewsViewModel?> and notifyListeners(); because you are using FutureBuilder which gets data from that future.

Try this code:

FutureBuilder<dynamic>(
                    future: Provider.of<NewsViewModel>(context,listen:false).getNews(),
                    builder: (context, snapshot) {
                      List? list = snapshot.data;
                      
                      print("list:$list");
                      return ListView.builder(
                        itemCount: 2,
                        itemBuilder: (context, index) {
                          return FirsatWidget(
                            title:"",
                            date: "",
                            photoUrl: "lib/assets/temp/4.jpg",
                          );
                        },
                      );
                    }),
              ),

And comment notifyListeners()

class NewsViewModel extends ChangeNotifier {
ApiOp api = ApiOp();

Future<List<NewsModel?>?> getNews() async {
String token ="token-here";
var map = await api.getNewsList(token);

List<NewsModel?>? list = map!.data;
print("object:${list![0]!.title}");
// notifyListeners();
return list;

Let me know if you have issues and still have rebuilds.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文