Flutter ListView实现下拉刷新

2,279 阅读1分钟

1、使用flutter_easyrefresh实现列表刷新

在pubspec.yaml添加包的应用,包括国际化

flutter_easyrefresh: ^2.1.1
dependencies:
  flutter:
    sdk: flutter
  flutter_localizations:
    sdk: flutter

2、创建一个list页面,并使用flutter_easyrefresh

class HomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
        appBar: AppBar(
          title: Text("首页"),
        ),
        body: Column(
          children: <Widget>[
            BannerContent(),
            Expanded(
              child:HomePageContent(),
            ),
          ],
        ));
  }
}

//banner
class BannerContent extends StatefulWidget {
  @override
  _BannerContentState createState() => _BannerContentState();
}

class _BannerContentState extends State<BannerContent> {
  final List<BannerData> bannerList = [];

  @override
  void initState() {
    super.initState();
    HomeRequest.requestBannerList().then((BannerEntity entity) {
      setState(() {
        if (entity.errorCode == 0) {
          bannerList.addAll(entity.data);
        }
      });
    });
  }

  @override
  Widget build(BuildContext context) {
    return BannerWidget(bannerList: bannerList);
  }
}

//列表list
class HomePageContent extends StatefulWidget {
  @override
  _HomePageContentState createState() => _HomePageContentState();
}

class _HomePageContentState extends State<HomePageContent> {
  final List<HomeDataData> homeDataList = [];
  var pageIndex=1;
  @override
  void initState() {
    super.initState();
    getData(pageIndex);
  }

  @override
  Widget build(BuildContext context) {
    return EasyRefresh(
      child: ListView.builder(
        itemCount: homeDataList.length,
        itemBuilder: (ctx, index) {
          return HomeListItem(homeDataList[index]);
        },
      ),
      onRefresh: () async {
        pageIndex=1;
        homeDataList.clear();
        getData(pageIndex);
      },
      onLoad: () async {
        pageIndex++;
        getData(pageIndex);
      },
    );
  }

  getData(index){
    HomeRequest.requestHomeList(index).then((HomeEntity entity) {
      setState(() {
        if (entity.errorCode == 0) {
          homeDataList.addAll(entity.data.datas);
        }
      });
    });
  }

}

3、添加国际化配置

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter widget',
      debugShowCheckedModeBanner: false,
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
      //国际化
      localizationsDelegates: [
        GlobalMaterialLocalizations.delegate,
        GlobalWidgetsLocalizations.delegate,
        GlobalEasyRefreshLocalizations.delegate,
      ],
      supportedLocales: [
        Locale('zh', 'CN'),
        Locale('en', 'US')],
    );
  }
}

4、源码地址:github.com/xulj-tech/f…