Flutter開發技巧集錦

flutter中單例的寫法

class AccountManager {
 factory AccountManager() => _instance ??= AccountManager._();
 
   /// 銷燬單例
  static void destroyInstance() => _instance = null;
}

flutter 頁面路由

利用GetX框架來實現

get: ^4.6.5

CoinRankPage 爲具體的頁面實現

點擊查看代碼
abstract class Routes {
  Routes._();
static const main = "/main";
  ///頁面合集
  static final routePage = [
      GetPage(
      name: coinRink,
      page: () => const CoinRankPage(),
      binding: CoinRankBinding(),
    ),
  ]
  }

刷新和加載更多的實現

依賴框架

pull_to_refresh: ^2.0.0

頭部刷新和底部加載更多widget封裝

點擊查看代碼
import 'package:flutter/cupertino.dart';

import 'package:pull_to_refresh/pull_to_refresh.dart';

/// 頭部刷新控件
class RefreshHeader extends StatelessWidget {
  const RefreshHeader({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return const WaterDropHeader(
      complete: Center(
        child: Text("下拉刷新完成"),
      ),
    );
  }
}

/// 底部加載更多控件
class RefreshFooter extends StatelessWidget {
  const RefreshFooter({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return CustomFooter(
      builder: (context, mode) {
        Widget body;
        if (mode == LoadStatus.idle) {
          body = const Text("上拉加載");
        } else if (mode == LoadStatus.loading) {
          body = const CupertinoActivityIndicator();
        } else if (mode == LoadStatus.failed) {
          body = const Text("加載失敗!點擊重試!");
        } else if (mode == LoadStatus.canLoading) {
          body = const Text("鬆手,加載更多!");
        } else {
          body = const Text("沒有更多數據了!");
        }
        return Center(child: body);
      },
    );
  }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章