Flutter 如何使用FutureBuilder实现滚动不定式

Flutter 如何使用FutureBuilder实现滚动不定式,flutter,flutter-layout,flutter-dependencies,flutter-animation,Flutter,Flutter Layout,Flutter Dependencies,Flutter Animation,我试图用futurebuilder实现一个InfinitiveScroll,但我不知道如何调用该方法来加载更多数据。 我留下了调用第一个用户的代码,我使用的是reqres.in的API。 我尝试了一个状态,但结果是一个无限循环。 检查示例,但它们使用ListView.builder,对于此用例,FutureBuilder不是最佳选项 Mi代码: import 'package:animate_do/animate_do.dart'; import 'package:flutter/materia

我试图用futurebuilder实现一个InfinitiveScroll,但我不知道如何调用该方法来加载更多数据。 我留下了调用第一个用户的代码,我使用的是reqres.in的API。 我尝试了一个状态,但结果是一个无限循环。 检查示例,但它们使用ListView.builder,对于此用例,FutureBuilder不是最佳选项

Mi代码:

import 'package:animate_do/animate_do.dart';
import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;
import 'package:watu_flutter/models/req_model.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Material App',
      home: Scaffold(
          appBar: AppBar(
            title: Text('Material App Bar'),
          ),
          body: MiPagina()),
    );
  }
}

Future<ReqResRespuesta> getUsuarios() async {
  final resp = await http.get('https://reqres.in/api/users?page=2');
  print(resp.body);
  //resp.body es un Json
  return reqResRespuestaFromJson(resp.body);
}

class MiPagina extends StatefulWidget {
  const MiPagina({Key key}) : super(key: key);

  @override
  _MiPaginaState createState() => _MiPaginaState();
}

class _MiPaginaState extends State<MiPagina> {
  List<Usuario> usuariooState;
  @override
  void initState() {
    // TODO: implement initState
    super.initState();
    usuariooState = [];
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: FutureBuilder(
        future: getUsuarios(),
        builder: (context, AsyncSnapshot<ReqResRespuesta> snapshot) {
          if (snapshot.connectionState == ConnectionState.waiting) {
            return Center(child: CircularProgressIndicator());
          } else if (snapshot.connectionState == ConnectionState.done) {
            return ListaUsuarios(snapshot.data.data);
          }
        },
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: () {
          //HERE CALL METHOD FETCH MORE USERS
        },
      ),
    );
  }
}

class ListaUsuarios extends StatelessWidget {
  final List<Usuario> usuarios;
  ListaUsuarios(this.usuarios);
  @override
  Widget build(BuildContext context) {
    print(usuarios);
    return ListView.builder(
      itemCount: usuarios.length,
      itemBuilder: (context, index) {
        final usuario = usuarios[index];
        return FadeInLeft(
          duration: Duration(milliseconds: 300 * index),
          child: ListTile(
            trailing: Image.network(usuario.avatar),
            title: Text(usuario.firstName),
          ),
        );
      },
    );
  }
}

import'package:animate_do/animate_do.dart';
进口“包装:颤振/材料.省道”;
将“package:http/http.dart”导入为http;
导入“包装:watu_颤振/models/req_model.dart”;
void main()=>runApp(MyApp());
类MyApp扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回材料PP(
标题:“材料应用程序”,
家:脚手架(
appBar:appBar(
标题:文本(“材质应用栏”),
),
正文:MiPagina()),
);
}
}
Future getUsuarios()异步{
final resp=wait http.get('https://reqres.in/api/users?page=2');
印刷品(分别为正文);
//resp.body es un Json
返回REQUESPRESUESTAFROMJSON(响应主体);
}
类MiPagina扩展了StatefulWidget{
const MiPagina({Key}):super(Key:Key);
@凌驾
_miPaginAtate createState()=>\u miPaginAtate();
}
类_mipaginate扩展状态{
表1-1-1;
@凌驾
void initState(){
//TODO:实现initState
super.initState();
usuariostate=[];
}
@凌驾
小部件构建(构建上下文){
返回脚手架(
正文:未来建设者(
future:getUsuarios(),
生成器:(上下文,异步快照){
if(snapshot.connectionState==connectionState.waiting){
返回中心(子项:CircularProgressIndicator());
}else if(snapshot.connectionState==connectionState.done){
返回ListaUsuarios(snapshot.data.data);
}
},
),
浮动操作按钮:浮动操作按钮(
已按下:(){
//这里调用方法获取更多用户
},
),
);
}
}
类ListaUsuarios扩展了无状态小部件{
最终清单惯例;
ListaUsuarios(这是usuarios);
@凌驾
小部件构建(构建上下文){
印刷品(通常);
返回ListView.builder(
itemCount:usuarios.length,
itemBuilder:(上下文,索引){
最终usuario=usuarios[索引];
返回FadeInLeft(
持续时间:持续时间(毫秒:300*索引),
孩子:ListTile(
尾随:Image.network(usuario.avatar),
标题:文本(usuario.firstName),
),
);
},
);
}
}