wemersonrv

Stream has already been listened to

Sep 8th, 2019
116
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Dart 2.31 KB | None | 0 0
  1. // ****** MyHomePageBloc ******
  2. import 'dart:async';
  3.  
  4. import 'package:bloc_again/endereco_model.dart';
  5. import 'package:dio/dio.dart';
  6.  
  7. class MyHomePageBloc {
  8.   final StreamController<String> _streamController = StreamController<String>();
  9.   Sink<String> get input => _streamController.sink;
  10.   Stream<EnderecoModel> get output => _streamController.stream
  11.       .where((cep) => cep.length > 7)
  12.       .asyncMap((cep) => _searchCep(cep));
  13.  
  14.   String url(String cep) => "http://viacep.com.br/ws/$cep/json";
  15.  
  16.   Future<EnderecoModel> _searchCep(String cep) async {
  17.     Response response = await Dio().get(url(cep));
  18.     return EnderecoModel.fromJson(response.data);
  19.   }
  20. }
  21.  
  22.  
  23. // ****** MyHomePage ******
  24. import 'package:bloc_again/endereco_model.dart';
  25. import 'package:bloc_again/myhomepage_bloc.dart';
  26. import 'package:flutter/material.dart';
  27.  
  28. class MyHomePage extends StatefulWidget {
  29.   MyHomePage({Key key, this.title}) : super(key: key);
  30.  
  31.   final String title;
  32.  
  33.   @override
  34.   _MyHomePageState createState() => _MyHomePageState();
  35. }
  36.  
  37. class _MyHomePageState extends State<MyHomePage> {
  38.   MyHomePageBloc bloc = MyHomePageBloc();
  39.  
  40.   @override
  41.   Widget build(BuildContext context) {
  42.     return Scaffold(
  43.       appBar: AppBar(
  44.         title: Text(widget.title),
  45.         centerTitle: true,
  46.       ),
  47.       body: Padding(
  48.         padding: const EdgeInsets.all(8),
  49.         child: Column(
  50.           mainAxisAlignment: MainAxisAlignment.start,
  51.           children: <Widget>[
  52.             TextField(
  53.               onChanged: (value) {
  54.                 bloc.input.add(value);
  55.               },
  56.               decoration: InputDecoration(
  57.                 hintText: 'Digite seu CEP',
  58.                 border: OutlineInputBorder(),
  59.               ),
  60.             ),
  61.             Center(
  62.               child: StreamBuilder<EnderecoModel>(
  63.                 stream: bloc.output,
  64.                 initialData: EnderecoModel(bairro: "Sem bairro"),
  65.                 builder: (context, snapshot) {
  66.                   if (!snapshot.hasError) {
  67.                     return Text("Erro na pesquisa");
  68.                   }
  69.  
  70.                   EnderecoModel model = snapshot.data;
  71.                   return Text("Bairro: ${model.bairro}");
  72.                 },
  73.               ),
  74.             ),
  75.           ],
  76.         ),
  77.       ),
  78.     );
  79.   }
  80. }
Add Comment
Please, Sign In to add comment