Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // ****** MyHomePageBloc ******
- import 'dart:async';
- import 'package:bloc_again/endereco_model.dart';
- import 'package:dio/dio.dart';
- class MyHomePageBloc {
- final StreamController<String> _streamController = StreamController<String>();
- Sink<String> get input => _streamController.sink;
- Stream<EnderecoModel> get output => _streamController.stream
- .where((cep) => cep.length > 7)
- .asyncMap((cep) => _searchCep(cep));
- String url(String cep) => "http://viacep.com.br/ws/$cep/json";
- Future<EnderecoModel> _searchCep(String cep) async {
- Response response = await Dio().get(url(cep));
- return EnderecoModel.fromJson(response.data);
- }
- }
- // ****** MyHomePage ******
- import 'package:bloc_again/endereco_model.dart';
- import 'package:bloc_again/myhomepage_bloc.dart';
- import 'package:flutter/material.dart';
- class MyHomePage extends StatefulWidget {
- MyHomePage({Key key, this.title}) : super(key: key);
- final String title;
- @override
- _MyHomePageState createState() => _MyHomePageState();
- }
- class _MyHomePageState extends State<MyHomePage> {
- MyHomePageBloc bloc = MyHomePageBloc();
- @override
- Widget build(BuildContext context) {
- return Scaffold(
- appBar: AppBar(
- title: Text(widget.title),
- centerTitle: true,
- ),
- body: Padding(
- padding: const EdgeInsets.all(8),
- child: Column(
- mainAxisAlignment: MainAxisAlignment.start,
- children: <Widget>[
- TextField(
- onChanged: (value) {
- bloc.input.add(value);
- },
- decoration: InputDecoration(
- hintText: 'Digite seu CEP',
- border: OutlineInputBorder(),
- ),
- ),
- Center(
- child: StreamBuilder<EnderecoModel>(
- stream: bloc.output,
- initialData: EnderecoModel(bairro: "Sem bairro"),
- builder: (context, snapshot) {
- if (!snapshot.hasError) {
- return Text("Erro na pesquisa");
- }
- EnderecoModel model = snapshot.data;
- return Text("Bairro: ${model.bairro}");
- },
- ),
- ),
- ],
- ),
- ),
- );
- }
- }
Add Comment
Please, Sign In to add comment