Я хотел бы преобразовать поток до того, как он достигнет StreamBuilder, но понятия не имею, как это будет выглядеть. В качестве теста я создал простой обратный отсчет ниже. Я бы хотел передать CountDownConversion в StreamBuilder, но если я раскомментирую его, я получу ошибки компиляции. Я читал о потоках и StreamBuilder, но не видел, чтобы кто-либо выполнял этот тип преобразования до StreamBuilder. Если бы кто-нибудь мог подсказать мне, я был бы признателен.
import 'package:flutter/material.dart';
final Color darkBlue = Color.fromARGB(255, 18, 32, 47);
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
theme: ThemeData.dark().copyWith(scaffoldBackgroundColor: darkBlue),
debugShowCheckedModeBanner: false,
home: Scaffold(
body: Center(
child: MyWidget(),
),
),
);
}
}
Stream<int> countDown() async* {
int i = 42;
while (true) {
await Future.delayed(Duration(seconds: 1));
yield i--;
if (i == 0) break;
}
}
// Stream<String> countDownConverter() {
// final number = countDown();
// return number.toString();
// }
class MyWidget extends StatelessWidget {
@override
Widget build(BuildContext context) {
return StreamBuilder(
stream: countDown(), // <- want countDownConverter() here
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.active) {
final String count = snapshot.data.toString();
return Text(count, style: Theme.of(context).textTheme.headline4);
} else return Text('Working...');
});
}
}
Stream.map
, напримерvar mapped = countDown().map((i) => i.toString());
, теперь вы можете использоватьstream: mapped
- person pskink   schedule 04.02.2021var mapped = countDown().map((i) => i.toString());
, а неstream: countDown().map((i) => i.toString()),
- просто вызовите методmap
, в котором вы получаете свой firestoreStream
(блок, провайдер и т. д.) - другими словами: сопоставьте свой firestoreStream
с другимStream
- person pskink   schedule 04.02.2021