在 Flutter 中,是不是可以使用 Provider 创建监听函数
Posted
技术标签:
【中文标题】在 Flutter 中,是不是可以使用 Provider 创建监听函数【英文标题】:In Flutter, is it possible to use Provider to create a listener function在 Flutter 中,是否可以使用 Provider 创建监听函数 【发布时间】:2022-01-22 21:58:42 【问题描述】:所以我有这个提供者
import 'package:flutter/material.dart';
import 'package:gotaxi_flutter/enums.dart';
import 'package:gotaxi_flutter/models/google_places_models/google_places_models.dart';
class PlaceInfo
GooglePlace place;
bool isDestination;
PlaceInfo(this.place, this.isDestination);
class RideInfoProvider with ChangeNotifier
CurrentRideScreen _currentRideScreen = CurrentRideScreen.none;
PlaceInfo? _place;
PlaceInfo? get place => _place;
CurrentRideScreen get currentRideScreen => _currentRideScreen;
void setCurrentRideScreen(CurrentRideScreen screen)
_currentRideScreen = screen;
notifyListeners();
//set origin or destination locations
void setPlace(GooglePlace place, bool isDestination)
_place = PlaceInfo(place, isDestination);
notifyListeners();
如何在我的小部件中创建类似于以下内容的内容:
@override
void initState()
super.initState();
_rideInfoProvider = RideInfoProvider();
_rideInfoProvider.addListener(()
print("RideInfoProvider changed");
if (_rideInfoProvider.place != null)
print(_rideInfoProvider.place);
//run other functions or instances that exist in this widget and may utilize the place variable
);
否则,我必须将整个侦听器逻辑和变量移至提供程序。
【问题讨论】:
为什么不能通过consumer
使用提供程序的正常方式?
【参考方案1】:
您可以根据有状态的小部件生命周期添加和删除您的侦听器。
这意味着在每次从RideInfoProvider
调用notifyListeners()
时都会调用myListenerFunction
,直到小部件被释放。
务必将侦听器添加为单独的函数,以便稍后通过相同的引用(到函数)将其删除。
正如@josip-domazet 评论的那样,我不建议为此使用消费者,因为这会从小部件的构建方法内部调用myListenerFunction
,因此每次颤振重绘该小部件时都会调用它,而不是仅当在通知程序中进行了新更改时。
@override
void initState()
super.initState();
_rideInfoProvider = context.read<RideInfoProvider>();
_rideInfoProvider.addListener(myListenerFunction);
@override
void dispose()
super.dispose();
_rideInfoProvider.removeListener(myListenerFunction);
【讨论】:
以上是关于在 Flutter 中,是不是可以使用 Provider 创建监听函数的主要内容,如果未能解决你的问题,请参考以下文章
如何检测我的 Flutter 应用程序是不是在 Web 中运行?
在 Flutter 包中使用自定义图标字体显示问号而不是自定义图标
Flutter,Android - 是不是可以在启动(启动)屏幕上更改状态栏颜色?