【发布时间】:2021-07-08 00:02:18
【问题描述】:
每当用户更改操作系统的主题时,我都会尝试获得通知。我想使用 Provider 来实现这一点,但是 dart Provider 需要一个提供快照的流,无论何时更改或更新。所以我需要实现或者更确切地说是使用一个 Stream,只要操作系统主题发生变化,它就会给我一个快照。
这是我的代码。这没什么特别的。但我真的很想知道如何让这个 Provider 启动并使用 Stream 运行
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
void main() => runApp(MaterialApp(initialRoute: '/', routes: {
'/': (context) => MainPage(),
}));
这个类是 HomePage 的包装器。它包含提供者。 (value:brightnessStream) 是一个虚拟值,这就是我需要实现的。
class MainPage extends StatefulWidget {
@override
_MainPageState createState() => _MainPageState();
}
class _MainPageState extends State<MainPage> {
@override
Widget build(BuildContext context) {
return StreamProvider<Brightness>.value(
initialData: Brightness.light,
value: brightnessStream,
child: Home(),
);
}
}
在这堂课中,每当亮度变化并显示显示当前主题的文本时,我都会聆听 Stream。
class Home extends StatefulWidget {
@override
_HomeState createState() => _HomeState();
}
class _HomeState extends State<Home> {
@override
Widget build(BuildContext context) {
final brightness = Provider.of<Brightness>(context);
return Scaffold(
backgroundColor: Colors.white,
appBar: AppBar(
title: Text('App'),
),
body: Center(
child: Text(brightness.toString()),
),
);
}
}
流应该像这样。
Stream<Brightness> get brightnessStream {
// return stream of os brigtness (os theme)
}
那怎么可能呢?
【问题讨论】:
标签: android flutter dart stream provider