国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Flutter 庫:強大的下拉刷新上拉加載框架——EasyRefresh

這篇具有很好參考價值的文章主要介紹了Flutter 庫:強大的下拉刷新上拉加載框架——EasyRefresh。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

Flutter 庫:強大的下拉刷新上拉加載框架——EasyRefresh

一、概述

1、簡介

EasyRefresh 是一個用于 Flutter 應(yīng)用程序的簡單易用的下拉刷新上拉加載框架。它支持幾乎所有的 Flutter 可滾動小部件。它的功能與Android 的 SmartRefreshLayout 非常相似,并吸收了許多第三方庫的優(yōu)點。EasyRefresh 集成了各種樣式的頁眉和頁腳,但沒有任何限制,您可以輕松自定義它們。利用Flutter強大的動畫功能,即使只是一個簡單的控件也可以實現(xiàn)復(fù)雜的效果。EasyRefresh的目標是為Flutter創(chuàng)建一個功能強大、穩(wěn)定和成熟的下拉刷新框架。

2、特征

EasyRefresh具有以下特性:

  • 支持所有可滾動小部件
  • 滾動物理范圍,完全匹配可滾動小部件
  • 集成多個酷頁眉和頁腳樣式
  • 支持自定義樣式,實現(xiàn)各種動畫效果
  • 支持下拉刷新和上拉加載(可通過控制器觸發(fā)和完成)
  • 支持指示器位置設(shè)置,結(jié)合監(jiān)聽器可以放置在任意位置
  • 支持頁面啟動時刷新,并可自定義視圖
  • 支持安全區(qū)域,不會遮擋內(nèi)容
  • 可自定義滾動參數(shù),允許列表具有不同的滾動反饋和慣性

3、在線演示

https://xuelongqy.github.io/flutter_easy_refresh/#/

4、APK下載

https://github.com/xuelongqy/flutter_easy_refresh/releases

5、接口參考

https://pub.flutter-io.cn/documentation/easy_refresh/latest/文章來源地址http://www.zghlxwxcb.cn/news/detail-804993.html

二、官方示例

1、默認構(gòu)造函數(shù)

dartCopy codeEasyRefresh(
  onRefresh: () async {
    // 下拉刷新邏輯
    // ...
  },
  onLoad: () async {
    // 上拉加載邏輯
    // ...
  },
  child: ListView(),
);

2、生成器構(gòu)造函數(shù)

dartCopy codeEasyRefresh.builder(
  onRefresh: () async {
    // 下拉刷新邏輯
    // ...
    return IndicatorResult.success;
  },
  onLoad: () async {
    // 上拉加載邏輯
    // ...
  },
  childBuilder: (context, physics) {
    return ListView(
      physics: physics,
    );
  },
);

3、指示器定位

EasyRefresh(
    header: Header(
        position: IndicatorPosition.locator,
    ),
    footer: Footer(
        position: IndicatorPosition.locator,
    ),
    onRefresh: () async {
        // 下拉刷新邏輯
        // ...
    },
    onLoad: () async {
        // 上拉加載邏輯
        // ...
        return IndicatorResult.noMore;
    },
    child: CustomScrollView(
        slivers: [
            SliverAppBar(),
            const HeaderLocator.sliver(),
            // ...
            const FooterLocator.sliver(),
        ],
    ),
);

4、使用指示器

EasyRefreshController _controller = EasyRefreshController(
    controlFinishRefresh: true,
    controlFinishLoad: true,
  );
  ....
  EasyRefresh(
    controller: _controller,
    onRefresh: () async {
      ....
      _controller.finishRefresh();
      _controller.resetFooter();
    },
    onLoad: () async {
      ....
      _controller.finishLoad(IndicatorResult.noMore);
    },
    ....
  );
  ....
  _controller.callRefresh();
  _controller.callLoad();

5、指定頁眉和頁腳

EasyRefresh(
    header: MaterialHeader(),
    footer: MaterialFooter(),
    child: ListView(),
    ....
  );
  // Global
  EasyRefresh.defaultHeaderBuilder = () => ClassicHeader();
  EasyRefresh.defaultFooterBuilder = () => ClassicFooter();

6、嵌套滾動視圖

EasyRefresh.builder(
    header: MaterialHeader(
      clamping: true,
    ),
    onRefresh: () async {
      ....
    },
    onLoad: () async {
      ....
    },
    childBuilder: (context, physics) {
      return NestedScrollView(
        physics: physics,
        body: ListView(
          physics: physics,
        );
      );
    },
  );
  // or
  EasyRefresh.builder(
    header: MaterialHeader(
      clamping: true,
      position: IndicatorPosition.locator,
    ),
    onRefresh: () async {
      ....
    },
    onLoad: () async {
      ....
    },
    childBuilder: (context, physics) {
      return NestedScrollView(
        physics: physics,
        headerSliverBuilder: (context, innerBoxIsScrolled) {
          return [
            const HeaderLocator.sliver(clearExtent: false),
            ....
          ];
        },
        body: ListView(
          physics: physics,
        );
      );
    },
  );

三、基本使用

1、安裝

flutter pub add easy_refresh

2、基本使用

import 'package:easy_refresh/easy_refresh.dart';
import 'package:flutter/material.dart';

class MyHomePage extends StatelessWidget {
  
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('EasyRefresh 示例'),
      ),
      body: EasyRefresh(
        onRefresh: () async {
          // 下拉刷新邏輯
          // ...
          await Future.delayed(Duration(seconds: 2));
        },
        onLoad: () async {
          // 上拉加載邏輯
          // ...
          await Future.delayed(Duration(seconds: 2));
        },
        child: ListView.builder(
          itemCount: 20,
          itemBuilder: (context, index) {
            return ListTile(
              title: Text('Item $index'),
            );
          },
        ),
      ),
    );
  }
}

void main() {
  runApp(MaterialApp(
    home: MyHomePage(),
  ));
}

3、運行結(jié)果

四、封裝 SimpleEasyRefresher

1、封裝

import 'dart:async';

import 'package:easy_refresh/easy_refresh.dart';
import 'package:flutter/material.dart';

class SimpleEasyRefresher extends StatefulWidget {
  const SimpleEasyRefresher({
    super.key,
    required this.easyRefreshController,
    this.onLoad,
    this.onRefresh,
    required this.childBuilder,
    this.indicatorPosition = IndicatorPosition.above,
  });

  // EasyRefreshController實例,用于控制刷新和加載的狀態(tài)
  final EasyRefreshController? easyRefreshController;

  // 加載回調(diào)函數(shù)
  final FutureOr<dynamic> Function()? onLoad;

  // 刷新回調(diào)函數(shù)
  final FutureOr<dynamic> Function()? onRefresh;

  // 構(gòu)建子組件的回調(diào)函數(shù)
  final Widget Function(BuildContext context, ScrollPhysics physics)?
      childBuilder;

  // 指示器的位置,默認為上方
  final IndicatorPosition indicatorPosition;

  
  State<SimpleEasyRefresher> createState() => _SimpleEasyRefresherState();
}

class _SimpleEasyRefresherState extends State<SimpleEasyRefresher> {
  
  Widget build(BuildContext context) {
    return EasyRefresh.builder(
      // 在開始刷新時立即觸發(fā)刷新
      refreshOnStart: true,
      // 刷新完成后重置刷新狀態(tài)
      resetAfterRefresh: true,
      // 同時觸發(fā)刷新和加載的回調(diào)函數(shù)
      simultaneously: true,
      // 加載回調(diào)函數(shù)
      onLoad: () async {
        await widget.onLoad?.call();
        setState(() {});
      },
      // 刷新回調(diào)函數(shù)
      onRefresh: () async {
        await widget.onRefresh?.call();
        setState(() {});
      },
      // 指定刷新時的頭部組件
      header: ClassicHeader(
        hitOver: true,
        safeArea: false,
        processedDuration: Duration.zero,
        showMessage: false,
        showText: false,
        position: widget.indicatorPosition,
        // 下面是一些文本配置
        // processingText: "正在刷新...",
        // readyText: "正在刷新...",
        // armedText: "釋放以刷新",
        // dragText: "下拉刷新",
        // processedText: "刷新成功",
        // failedText: "刷新失敗",
      ),
      // 指定加載時的底部組件
      footer: ClassicFooter(
        processedDuration: Duration.zero,
        showMessage: false,
        showText: false,
        position: widget.indicatorPosition,
        // 下面是一些文本配置
        // processingText: "加載中...",
        // processedText: "加載成功",
        // readyText: "加載中...",
        // armedText: "釋放以加載更多",
        // dragText: "上拉加載",
        // failedText: "加載失敗",
        // noMoreText: "沒有更多內(nèi)容",
      ),
      controller: widget.easyRefreshController,
      childBuilder: widget.childBuilder,
    );
  }
}

2、使用示例

import 'package:flutter/material.dart';
import 'package:easy_refresh/easy_refresh.dart';

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

class MyApp extends StatelessWidget {
  
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Pull to Refresh',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  EasyRefreshController _controller = EasyRefreshController();

  List<String> _dataList = List.generate(10, (index) => 'Item ${index + 1}');

  Future<void> _refresh() async {
    // 模擬刷新操作
    await Future.delayed(Duration(seconds: 2));
    setState(() {
      _dataList = List.generate(10, (index) => 'Item ${index + 1}');
    });
    _controller.finishRefresh();
  }

  Future<void> _loadMore() async {
    // 模擬加載更多操作
    await Future.delayed(Duration(seconds: 2));
    setState(() {
      _dataList.addAll(List.generate(10, (index) => 'Item ${_dataList.length + index + 1}'));
    });
    _controller.finishLoad();
  }

  
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Pull to Refresh'),
      ),
      body: SimpleEasyRefresher(
        easyRefreshController: _controller,
        onRefresh: _refresh,
        onLoad: _loadMore,
        childBuilder: (context, physics) {
          return ListView.builder(
            physics: physics,
            itemCount: _dataList.length,
            itemBuilder: (context, index) {
              return ListTile(
                title: Text(_dataList[index]),
              );
            },
          );
        },
      ),
    );
  }
}

3、運行結(jié)果

到了這里,關(guān)于Flutter 庫:強大的下拉刷新上拉加載框架——EasyRefresh的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 微信小程序 上列表拉加載下拉刷新

    ??上拉加載和下拉刷新是小程序開發(fā)的常見需求。本文將介紹如何在微信小程序中實現(xiàn)上拉加載和下拉刷新的功能,為用戶帶來更加流暢、便捷的使用體驗。 微信小程序 上列表拉加載下拉刷新 (1) 首先需要在使用到的 json 文件下配置 “enablePullDownRefresh”: true (2) 在 js 文件

    2024年01月16日
    瀏覽(25)
  • 【HarmonyOS開發(fā)】ArkUI實現(xiàn)下拉刷新/上拉加載

    【HarmonyOS開發(fā)】ArkUI實現(xiàn)下拉刷新/上拉加載

    ?列表下拉刷新、上拉加載更多,不管在web時代還是鴻蒙應(yīng)用都是一個非常常用的功能,基于ArkUI中TS擴展的聲明式開發(fā)范式實現(xiàn)一個下拉刷新,上拉加載。 如果數(shù)據(jù)量過大,可以使用LazyForEach代替ForEach 高階組件-上拉加載,下拉刷新 https://gitee.com/bingtengaoyu/harmonyos-advanced-com

    2024年01月20日
    瀏覽(18)
  • 微信小程序-上拉加載更多和下拉刷新

    微信小程序-上拉加載更多和下拉刷新

    頁面配置文件中配置 \\\"enablePullDownRefresh\\\": true 開啟下拉刷新 設(shè)置 onPullDownRefresh 方法 在用戶下拉時會調(diào)用 onPullDownRefresh 方法 在完成后需要調(diào)用 wx.stopPullDownRefresh() 關(guān)閉刷新狀態(tài) 可以在頁面配置文件中配置 \\\"onReachBottomDistance\\\":50 來設(shè)置觸發(fā)上拉加載的距離,單位為 px 。 默認:

    2024年02月15日
    瀏覽(16)
  • Android 實現(xiàn) RecyclerView下拉刷新,SwipeRefreshLayout上拉加載

    Android 實現(xiàn) RecyclerView下拉刷新,SwipeRefreshLayout上拉加載

    上拉、下拉的效果圖如下: 使用步驟 1、在清單文件中添加依賴 implementation ‘com.android.support:recyclerview-v7:27.1.1’ implementation “androidx.swiperefreshlayout:swiperefreshlayout:1.0.0” 2、main布局 item.xml footview.xml(底部提示) 2、MyAdapter 3、MainActivity實現(xiàn)

    2024年02月13日
    瀏覽(20)
  • H5如何做頁面下拉刷新和上拉加載

    這里以vant為例 結(jié)構(gòu) 處理方法

    2024年02月10日
    瀏覽(20)
  • 微信小程序 下拉分頁 z-paging下拉刷新、上拉加載

    微信小程序 下拉分頁 z-paging下拉刷新、上拉加載

    【z-paging下拉刷新、上拉加載】高性能,全平臺兼容。支持虛擬列表,支持nvue、vue3 - DCloud 插件市場 ?z-paging,使用非常簡單,按部就班就行了 1,首先將其導(dǎo)入自己的小程序項目中 ?導(dǎo)入后的效果 2,具體如何使用:https://z-paging.zxlee.cn? ? 選項式api寫法(vue2/vue3) 組合式api寫法

    2024年02月11日
    瀏覽(24)
  • uniapp使用自帶【刷新方法】與使用【scroll-view】實現(xiàn)下拉刷新上拉加載

    uniapp使用自帶【刷新方法】與使用【scroll-view】實現(xiàn)下拉刷新上拉加載

    前言:uniapp自帶下拉刷新,上拉加載功能基本可以滿足刷新需求,但是頂部有狀態(tài)欄的頁面就得進行特殊處理,使用scroll-view解決,狀態(tài)欄會連帶被下拉問題 ? 1、uniapp自帶下拉刷新、上拉加載 在page.json中對應(yīng)頁面路由設(shè)置【enablePullDownRefresh】值為true(開啟下拉刷新) 代碼:

    2024年02月11日
    瀏覽(21)
  • IOS 類似抖音下拉刷新與自定義上拉加載

    IOS 類似抖音下拉刷新與自定義上拉加載 首先考慮在UICollection與拖動手勢之間的問題。 解決UICollectionView上添加手勢不能觸發(fā)。 這里使用了子類繼承UICollectionView 在View上添加拖動手勢 self.startPoint = CGPointZero; self.isInLoading = NO; 處理手勢判斷 // 給加的手勢設(shè)置代理, 并實現(xiàn)此協(xié)議

    2024年02月09日
    瀏覽(23)
  • 學(xué)習(xí)微信小程序的下拉刷新和上拉加載更多

    好的,下面我將為你詳細介紹微信小程序中的下拉刷新和上拉加載更多功能,并提供代碼案例。 下拉刷新功能 下拉刷新是指當(dāng)用戶在小程序頁面下拉時,頁面可以重新加載最新的數(shù)據(jù)。為了實現(xiàn)下拉刷新功能,我們需要使用小程序提供的 onPullDownRefresh 生命周期函數(shù)。 以一個

    2024年04月14日
    瀏覽(18)
  • 微信小程序 - scroll-view組件之上拉加載下拉刷新(解決上拉加載不觸發(fā))

    微信小程序 - scroll-view組件之上拉加載下拉刷新(解決上拉加載不觸發(fā))

    最近在做微信小程序項目中,有一個功能就是做一個商品列表分頁限流然后實現(xiàn)上拉加載下拉刷新功能,遇到了一個使用scroll-viwe組件下拉刷新事件始終不觸發(fā)問題,網(wǎng)上很多說給scroll-view設(shè)置一個高度啥的就可以解決,有些人設(shè)置了高度也不觸發(fā),所以在下就研究了一波這個

    2024年02月14日
    瀏覽(90)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包