1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85
| import 'dart:async'; import 'dart:math';
import 'package:flutter/material.dart';
void main() { runApp(MyApp()); }
class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( title: 'Flutter Demo', theme: ThemeData( primarySwatch: Colors.blue, visualDensity: VisualDensity.adaptivePlatformDensity, ), home: HomePage(), ); } }
class HomePage extends StatefulWidget { @override _HomePageState createState() => _HomePageState(); }
class _HomePageState extends State<HomePage> { final StreamController<List<String>> _streamController = StreamController();
@override void initState() { super.initState(); _init(); }
@override Widget build(BuildContext context) { return Scaffold( appBar: AppBar(), body: RefreshIndicator( onRefresh: () async { List<String> data = await _fetchData(); _streamController.sink.add(data); return Future.value(); }, child: StreamBuilder( stream: _streamController.stream, builder: (context, snapshot) { List<String> _data = snapshot.data; return ListView.separated( itemBuilder: (context, index) => Container( height: 60, child: Container( padding: const EdgeInsets.all(8), color: Colors.grey, child: Text(_data[index]), ), ), separatorBuilder: (context, index) => SizedBox(height: 8), itemCount: _data?.length ?? 0, ); }, ), ), ); }
void _init() async { List<String> data = await _fetchData(); _streamController.sink.add(data); }
Future<List<String>> _fetchData() async { await Future.delayed(Duration(seconds: 1)); return List.generate(Random().nextInt(20), (index) => "Test $index"); }
@override void dispose() { super.dispose(); _streamController.close(); } }
|