在Flutter中,是否可以使用Provider来创建侦听器函数



所以我有这个提供程序

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
}
});
}

因为否则,我必须将整个侦听器逻辑和变量移动到提供程序。

您可以根据有状态的小部件生命周期添加和删除侦听器。这意味着myListenerFunction将在每次从RideInfoProvider调用notifyListeners()时被调用,直到小部件被处理为止。请将侦听器作为一个单独的函数添加,以便以后通过相同的引用(对函数(将其删除。

正如@josip-domazet所评论的,我不建议使用消费者,因为它会从小部件的构建方法内部调用myListenerFunction,所以每次flutter重新绘制该小部件时都会调用它,而不是只有在通知程序中进行新更改时才调用。

@override
void initState() {
super.initState();
_rideInfoProvider = context.read<RideInfoProvider>();
_rideInfoProvider.addListener(myListenerFunction);
}

@override
void dispose() {
super.dispose();
_rideInfoProvider.removeListener(myListenerFunction);
}

相关内容

最新更新