| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- import 'package:flutter/material.dart';
- import 'package:http/http.dart' as http;
- import 'dart:convert';
- import 'dart:async';
- class MyHomePage extends StatefulWidget {
- @override
- _MyHomePageState createState() => _MyHomePageState();
- }
- class _MyHomePageState extends State<MyHomePage> {
- ScrollController _controller;
- List<String> images;
- @override
- void initState() {
- super.initState();
- images = List();
- _controller = ScrollController();
- fetchTen();
- _controller.addListener(() {
- if (_controller.position.pixels == _controller.position.maxScrollExtent) {
- fetchTen();
- }
- });
- }
- @override
- void dispose() {
- super.dispose();
- _controller.dispose();
- }
- @override
- Widget build(BuildContext context) {
- return Scaffold(
- appBar: AppBar(
- title: Text('pull to loading demo'),
- ),
- body: RefreshIndicator(
- onRefresh: () async {
- await new Future.delayed(const Duration(seconds: 1));
- images.clear();
- fetchTen();
- },
- child: GridView.builder(
- gridDelegate: new SliverGridDelegateWithFixedCrossAxisCount(
- crossAxisCount: 2,
- mainAxisSpacing: 10.0,
- crossAxisSpacing: 10.0,
- childAspectRatio: 1.0),
- controller: _controller,
- itemCount: images.length,
- itemBuilder: (BuildContext context, int index){
- return _buildItem(images[index]);
- },
- ),
- ),
- );
- }
- Widget _buildItem(String url){
- return Container(
- constraints: BoxConstraints.tightFor(height: 150.0),
- child: Image.network(
- url,
- fit: BoxFit.cover,
- ),
- );
- }
- fetch() async {
- final response = await http.get('http://dog.ceo/api/breeds/image/random');
- if (response.statusCode == 200) {
- setState(() {
- images.add(json.decode(response.body)['message'],);
- });
- } else {
- throw Exception('Failed to load images');
- }
- }
- fetchTen() {
- for (int i = 0; i < 10; i++) {
- fetch();
- }
- }
- }
|