美文网首页
flutter io

flutter io

作者: f8d1cf28626a | 来源:发表于2022-11-29 07:29 被阅读0次

flutter stream (I/O)

  • StreamController
  • Sink
  • Stream
  • StreamSubscription
  1. stream 的简单使用
class CustomStreams {

  final StreamController<List<int>> _streamController =  StreamController<List<int>>();

  StreamSink<List<int>> get _streamSink => _streamController.sink;

  Stream<List<int>> get _streamCall => _streamController.stream;

  late StreamSubscription _streamSubscription;


  // 接送数据流
   void mySelfInit(){
    _streamSubscription = _streamCall.listen((event) {
      print('event $event');

    });

    _streamSubscription.onData((data) {
      String str = utf8.decode(data);
      print('datd : $str');
    });

    _streamSubscription.onDone(() {
      print('onDone');
    });
  }

  void sendStream(){
    String str = 'Hi hello';
    var data = utf8.encode(str);
    _streamSink.addStream(Stream.value(data));
  }

  void sendEvent(){
    String str = 'Hi hello';
    var data = utf8.encode(str);
    _streamSink.add(data);
  }

  void closeStream(){
     _streamSubscription.cancel();
     _streamController.close();
  }
}
  1. stream 结合 StreamBuilder 使用
StreamBuilder<List<String>>(
    stream: dataStream,
    initialData: ["none"],
    ///这里的 snapshot 是数据快照的意思
    builder: (BuildContext context, AsyncSnapshot<List<String>> snapshot) {
      ///获取到数据,更新 UI
      var data = snapshot.data;
      return Container();
    });

...以下是官方案例

Receiving stream events

Future<int> sumStream(Stream<int> stream) async {
  var sum = 0;
  await for (final value in stream) {
    sum += value;
  }
  return sum;
}

case

Future<int> sumStream(Stream<int> stream) async {
  var sum = 0;
  await for (final value in stream) {
    sum += value;
  }
  return sum;
}

Stream<int> countStream(int to) async* {
  for (int i = 1; i <= to; i++) {
    yield i;
  }
}

void main() async {
  var stream = countStream(10);
  var sum = await sumStream(stream);
  print(sum); // 55
}

Reading and decoding a file

import 'dart:convert';
import 'dart:io';

void main(List<String> args) async {
  var file = File(args[0]);
  var lines = utf8.decoder
      .bind(file.openRead())
      .transform(const LineSplitter());
  await for (final line in lines) {
    if (!line.startsWith('#')) print(line);
  }
}

周期性

var counterStream =
  Stream<int>.periodic(const Duration(seconds: 1), (x) => x)
      .where((event) => event.isEven)// 偶数
      .expand((element) => [element,element])
      .take(1);
  counterStream.forEach(print);

相关文章

网友评论

      本文标题:flutter io

      本文链接:https://www.haomeiwen.com/subject/swtdfdtx.html