首页 > 解决方案 > 找不到 StreamZip 或 StreamGroup

问题描述

由于某种原因,我无法使用StreamGroupStreamZip

这是代码(完全没用,但我不想激怒管理员)

import 'dart:async';
import 'package:flutter/material.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  const MyApp() : super(key: const Key('MyApp'));

  @override
  Widget build(BuildContext context) => const MaterialApp(home: MyHomePage());
}

class MyHomePage extends StatefulWidget {
  const MyHomePage() : super(key: const Key('MyHomePage'));

  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  static const _duration = Duration(seconds: 3);
  static const _initialCx = 3.0;

  final _pageStream = Stream<int>.periodic(_duration, (int i) => i);

  ScrollController _scrollController;
  StreamController<double> _throttle;
  

  @override
  void initState() {
    _scrollController = ScrollController();
    _throttle = StreamController();

    StreamGroup<num>.merge([_pageStream, _throttle.stream]); // <= this

    StreamZip([_pageStream, _throttle.stream]); //  or this

    /// i NEED TO IMPLEMENT A LISTENER HERE... THE CODE IS USELESS OTHERWISE

    super.initState();
  }

  @override
  void dispose() {
    _scrollController?.dispose();
    _throttle?.close();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) => Scaffold(
        body: Stack(children: <Widget>[
          ListView.builder(
            controller: _scrollController,
            itemBuilder: (BuildContext context, int index) => const Center(
              child: FlutterLogo(size: 160),
            ),
          ),
          Align(
            alignment: Alignment.bottomCenter,
            child: StreamBuilder<double>(
              builder: (context, throttle) => Slider(
                min: 1,
                max: 5,
                onChanged: (double value) => _throttle.sink.add(value),
                value: throttle.data ?? _initialCx,
              ),
            ),
          ),
        ]),
      );
}

这里分别是错误

流压缩

没有为类型“_MyHomePageState”定义方法“StreamZip”。尝试将名称更正为现有方法的名称,或定义名为“StreamZip”的方法。

流压缩错误

蒸汽集团

名称“StreamGroup”不是一个类。尝试更正名称以匹配现有类。

流组错误

诚然,我对这些课程没有太多经验,所以解决方案可能很简单,

你能解释一下我如何访问这些吗?

谢谢

标签: flutterasynchronousdartstream

解决方案


由于 Flutter API 文档将所有内容合并在一起的方式,这并不明显,StreamZip而是StreamGroup来自. 您需要在文件中替换并添加依赖项。package:asyncdart:asyncimport 'dart:async';import 'package:async/async.dart';asyncpubspec.yaml

(尽管package:async它来自 Dart 开发人员,但它是分开的,dart:async因为:

  • 中的类和函数package:async不被视为 Dart SDK 的核心部分。
  • package:async可以用纯 Dart 代码实现。
  • 可以独立于 Dart SDK 单独更新一个单独的包,允许更频繁的更新。)

推荐阅读