【问题标题】:Create stream builder创建流构建器
【发布时间】:2020-10-02 05:40:53
【问题描述】:

得到这个错误:

1. 函数“stream”不能返回“Stream”类型的值,因为它的返回类型为“Stream”。 (return_of_invalid_type at blahblah)

2.参数类型'Stream'不能赋值给参数类型'Stream'。 (argument_type_not_assignable at blahblah)

为什么? 这是基于 Flutter 团队的this video 创建流构建器的代码


void main() {
  runApp(MyApp());

  //listen to subscribe to stream
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: SafeArea(
        child: Center(
          child: Stream(),
        ),
      ),
    );
  }
}

class Stream extends StatefulWidget {
  @override
  _StreamState createState() => _StreamState();
}

class _StreamState extends State<Stream> {
  @override
  Widget build(BuildContext context) {
    return StreamBuilder(
      //Error number 2
      stream: NumberCreator().stream,
      builder: (context, snapshot) {
        if (snapshot.connectionState == ConnectionState.waiting) {
          return CircularProgressIndicator();
        } else if (snapshot.connectionState == ConnectionState.done) {
          return Text('done');
        } else if (snapshot.hasError) {
          return Text('Error!');
        } else {
          return Text(snapshot.data);
        }
      },
    );
  }
}

class NumberCreator {
  NumberCreator() {
    Timer.periodic(Duration(seconds: 1), (timer) {
      //add count to stream
      _controller.sink.add(_count);
      _count++;
    });
  }
  var _count = 1;
  final _controller = StreamController<int>();
  
  //error number 1
  Stream<int> get stream => _controller.stream;

  dispose() {
    _controller.close();
  }
}

我们是否需要 statefulWidget 来创建 stramBuilder?

【问题讨论】:

  • 我尝试复制粘贴并运行代码,这解决了我的错误Stream&lt;dynamic&gt; get stream =&gt; _controller.stream;

标签: flutter dart


【解决方案1】:

您的小部件类的名称导致问题,因为

class Stream extends StatefulWidget

导致与 StreamBuildWidget 参数使用的名称冲突

stream: NumberCreator().stream,

所以尝试将您的 widgetName 更改为 StreamPage 等。

还有变化

return Text(snapshot.data);

return Text(snapshot.data.toString());

即使这是抛出错误文本小部件期望字符串不是 int

更正的代码版本

class StreamBuilderPage extends StatefulWidget {
  @override
  _StreamBuilderPageState createState() => _StreamBuilderPageState();
}

class _StreamBuilderPageState extends State<StreamBuilderPage> {
  @override
  Widget build(BuildContext context) {
    return StreamBuilder(
      //Error number 2
      stream: NumberCreator().stream,
      builder: (context, snapshot) {
        if (snapshot.connectionState == ConnectionState.waiting) {
          return CircularProgressIndicator();
        } else if (snapshot.connectionState == ConnectionState.done) {
          return Text('done');
        } else if (snapshot.hasError) {
          return Text('Error!');
        } else {
          return Text(snapshot.data.toString());
        }
      },
    );
  }
}

【讨论】:

    猜你喜欢
    • 2019-12-18
    • 1970-01-01
    • 2019-05-09
    • 1970-01-01
    • 1970-01-01
    • 2020-11-06
    • 2017-09-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多