gpt4 book ai didi

firebase - 如何避免将分析传递到小部件树中?

转载 作者:行者123 更新时间:2023-12-03 03:59:02 26 4
gpt4 key购买 nike

我想通过Firebase分析在Flutter应用中跟踪选项卡更改。在示例应用程序中,它们只是将FirebaseAnalyticsObserver传递给了小部件树:

class MyApp extends StatelessWidget {
static FirebaseAnalytics analytics = FirebaseAnalytics();
static FirebaseAnalyticsObserver observer =
FirebaseAnalyticsObserver(analytics: analytics);

@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Firebase Analytics Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
navigatorObservers: <NavigatorObserver>[observer],
home: MyHomePage(
title: 'Firebase Analytics Demo',
analytics: analytics,
observer: observer,
),
);
}
}

class MyHomePage extends StatefulWidget {
MyHomePage({Key key, this.title, this.analytics, this.observer})
: super(key: key);

final String title;
final FirebaseAnalytics analytics;
final FirebaseAnalyticsObserver observer;

@override
_MyHomePageState createState() => _MyHomePageState(analytics, observer);
}

class _MyHomePageState extends State<MyHomePage> {
_MyHomePageState(this.analytics, this.observer);

final FirebaseAnalyticsObserver observer;
final FirebaseAnalytics analytics;

但是问题是我的选项卡页面远远低于小部件树。因此很难一路走下去。

如何初始化FirebaseAnalytics观察器以跟踪正常的屏幕路线,但也可以将其提供给标签页?

我正在使用Provider和ChangeNotifier。所以也许我可以初始化一个服务,然后提供下来?例如
class Analytic extends ChangeNotifier {

static FirebaseAnalyticsObserver observer =
FirebaseAnalyticsObserver(analytics: analytics);
}

最佳答案

Flutter有一个InheritedWidget,它是一个完全做到这一点的小部件,它一直向下传递数据,您可以检查official video showcase或某些articles

要使用它,您可以将widget与Inheritedwidget一起包装

class MyApp extends StatelessWidget {
final FirebaseAnalytics analytics = FirebaseAnalytics();//don't make this static please
final FirebaseAnalyticsObserver observer =
FirebaseAnalyticsObserver(analytics: analytics); //don't make this static please

@override
Widget build(BuildContext context) {
return ObserverProvider(
child: MaterialApp(
title: 'Firebase Analytics Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
navigatorObservers: <NavigatorObserver>[observer],
home: MyHomePage(
title: 'Firebase Analytics Demo'
),
),
observer:observer,
analytics:analytics
)
;
}
}


class ObserverProvider extends InheritedWidget {
const ObserverProvider(
{Widget child,
Key key,
this.observer,
this.analytics})
: super(key: key, child: child);
final FirebaseAnalytics analytics;
final FirebaseAnalyticsObserver observer;

static ObserverProvider of(BuildContext context) {
return (context.inheritFromWidgetOfExactType(ObserverProvider));
}

@override
bool updateShouldNotify(ObserverProvider e) => false;
}

如果要访问数据,则可以为观察者调用 ObserverProvider.of(context).observer,为分析调用 ObserverProvider.of(context).analytics

关于firebase - 如何避免将分析传递到小部件树中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58698447/

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