gpt4 book ai didi

flutter - 在Flutter中,是否可以使用Provider创建监听函数

转载 作者:行者123 更新时间:2023-12-05 02:35:52 27 4
gpt4 key购买 nike

所以我有这个提供者

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

}

关于flutter - 在Flutter中,是否可以使用Provider创建监听函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70436140/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com