面试题答案
一键面试- 创建异步加载整数数据的 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(); }, ), ), ); } }
- StreamController 的作用:
StreamController
是用于创建和控制Stream
的类。- 它允许我们向
Stream
中添加数据(通过add
方法),并且可以关闭Stream
(通过close
方法)。在上述代码中,_streamController
用于创建一个Stream
,并在异步操作完成后(Future.delayed
模拟的异步加载完成),通过_streamController.add(42)
将整数数据添加到Stream
中。
- StreamBuilder 的作用:
StreamBuilder
是一个 Flutter 中的Widget
,它根据Stream
的状态来构建 UI。- 它接收一个
stream
参数,该参数是要监听的Stream
。builder
回调函数会根据Stream
的状态(snapshot
)来构建不同的 UI。当snapshot.hasData
时,表示Stream
中有数据,此时构建显示数据的 UI;当snapshot.hasError
时,表示Stream
发生错误,构建显示错误信息的 UI;当既没有数据也没有错误时(初始状态),构建加载指示器(CircularProgressIndicator
)的 UI。这样可以方便地根据Stream
的异步数据加载状态实时更新 UI。