MST

星途 面试题库

面试题:Flutter 中 Stream 的基本使用

在 Flutter 中,如何创建一个简单的 Stream 来异步加载整数数据,并在 UI 中显示这些数据?请给出关键代码示例,并解释 StreamController 和 StreamBuilder 的作用。
33.4万 热度难度
前端开发Flutter

知识考点

AI 面试

面试题答案

一键面试
  1. 创建异步加载整数数据的 Stream 及关键代码示例
    import 'dart:async';
    import 'package:flutter/material.dart';
    
    void main() => runApp(MyApp());
    
    class MyApp extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          home: MyHomePage(),
        );
      }
    }
    
    class MyHomePage extends StatefulWidget {
      @override
      _MyHomePageState createState() => _MyHomePageState();
    }
    
    class _MyHomePageState extends State<MyHomePage> {
      final StreamController<int> _streamController = StreamController<int>();
    
      @override
      void initState() {
        super.initState();
        // 模拟异步加载整数数据
        Future.delayed(const Duration(seconds: 2), () {
          _streamController.add(42);
        });
      }
    
      @override
      void dispose() {
        _streamController.close();
        super.dispose();
      }
    
      @override
      Widget build(BuildContext context) {
        return Scaffold(
          appBar: AppBar(
            title: Text('Stream Example'),
          ),
          body: Center(
            child: StreamBuilder<int>(
              stream: _streamController.stream,
              builder: (context, snapshot) {
                if (snapshot.hasData) {
                  return Text('Loaded data: ${snapshot.data}');
                } else if (snapshot.hasError) {
                  return Text('Error: ${snapshot.error}');
                }
                return CircularProgressIndicator();
              },
            ),
          ),
        );
      }
    }
    
  2. StreamController 的作用
    • StreamController 是用于创建和控制 Stream 的类。
    • 它允许我们向 Stream 中添加数据(通过 add 方法),并且可以关闭 Stream(通过 close 方法)。在上述代码中,_streamController 用于创建一个 Stream,并在异步操作完成后(Future.delayed 模拟的异步加载完成),通过 _streamController.add(42) 将整数数据添加到 Stream 中。
  3. StreamBuilder 的作用
    • StreamBuilder 是一个 Flutter 中的 Widget,它根据 Stream 的状态来构建 UI。
    • 它接收一个 stream 参数,该参数是要监听的 Streambuilder 回调函数会根据 Stream 的状态(snapshot)来构建不同的 UI。当 snapshot.hasData 时,表示 Stream 中有数据,此时构建显示数据的 UI;当 snapshot.hasError 时,表示 Stream 发生错误,构建显示错误信息的 UI;当既没有数据也没有错误时(初始状态),构建加载指示器(CircularProgressIndicator)的 UI。这样可以方便地根据 Stream 的异步数据加载状态实时更新 UI。