Flutter 實現刮刮卡效果

2021-03-02 老孟Flutter

作者:Shaiq khan

原文連結:https://medium.com/flutterdevs/scratch-card-in-flutter-8e8c6f335be2

我們拿起手機,然後把錢寄給我們的朋友,以獲得一些現金返還。現金返還是一種提高使用戶粘度的有效舉動。

對於普通用戶來說,這簡直就是彩票,無論如何,您是否會說您是一位被UI驚呆了並且需要在您的應用程式中實現等效功能的應用程式開發人員?屆時,您將是一個完美的選擇。

在這個博客,我們將探討 Flutter 中 刮刮卡 效果。我們將了解如何在flutter應用程式中使用scratcher包實現刮板卡。

目錄

刮刮卡

刮刮卡是您在不同的購物應用程式和支付應用程式上可以看到的著名事物之一。這些刮刮卡用於為用戶提供獎品和現金返還。它可以具有廣泛的使用案例;但是,它基本上用於為應用程式用戶創建隨機獎品。

該演示視頻演示了如何在Flutter中創建刮刮卡。它顯示了刮卡將如何工作使用scratcher在Flutter應用程式包。它顯示打開的對話框,然後顯示刮刮卡,您將獲得收入。它會顯示在您的設備上。

屬性

scratcher的一些屬性是:

**child:**此屬性用於聲明容器和不同的Widget。**brushSize:**此屬性用於在劃痕期間提供不同大小的畫筆。**threshold:**此屬性用於給出劃痕區域的百分比級別。**onChange:**顯示該區域的新部分時,將使用此屬性進行回調。**image:**此屬性用於在刮刮卡上聲明圖片。**onThreshold:**此屬性用於調用回調。> **accuracy:**此屬性用於確定報告應進行的準確性。較低的精度意味著較高的性能。引入

步驟1:添加依賴項,將依賴項添加到pubspec-yaml文件。

scratcher: ^1.4.1

步驟2:添加asset

assets:
  - assets/

步驟3:導入包

import 'package:scratcher/scratcher.dart';

第4步:在應用程式的根目錄中執行命令

flutter packages get

步驟5:啟用AndriodX

將此添加到您的gradle.properties文件:

org.gradle.jvmargs = -Xmx1536M 
android.enableR8 = true 
android.useAndroidX = true 
android.enableJetifier = true

如何在dart文件中實現代碼

在lib文件夾內創建一個名為scratch_card.dart的dart文件。

在此屏幕中,我們將創建一個Container,並將對齊方式設置為中心。內部子屬性添加一個**FlatButton。在FlatButton中,我們將添加文本,顏色,形狀,填充和onPressed()方法。我們將添加一個scratchDialog(context)**函數。

Container(
  alignment: Alignment.center,
  child: FlatButton(
    onPressed: (){
      scratchDialog(context);
    },
    padding: EdgeInsets.symmetric(horizontal: 20, vertical: 20),
    shape: OutlineInputBorder(
      borderRadius: BorderRadius.circular(20),
      borderSide: BorderSide.none,
    ),
    color: Colors.cyan[300],
    child: Text("Scratch Card",
      style: TextStyle(color: Colors.white,
          fontWeight: FontWeight.bold,
          fontSize: 20),),

  ),
),

現在,我們將深入定義**scratchDialog()**函數:

我們將創建一個矩形對話框。在標題中,我們將在中心添加一個列小部件和對齊方式。在該列內,我們將添加文本和一個分隔符。

Future<void> scratchDialog(BuildContext context) {
  return showDialog(context: context,
      builder: (BuildContext context) {
        return AlertDialog(
          shape: RoundedRectangleBorder(
            borderRadius: BorderRadius.circular(30),
          ),
          title: Column(
            children: [
              Align(
                alignment: Alignment.center,
                child: Text("You Earned Gift",
                  style: TextStyle(
                      color: Colors.red,
                      fontSize: 25,
                      fontWeight: FontWeight.bold),
                ),
              ),
              Padding(
                padding: const EdgeInsets.only(left: 25,right: 25),
                child: Divider(
                  color: Colors.black,
                ),
              ),
            ],In
          ),

          content: StatefulBuilder(builder: (context, StateSetter setState) {
            return Scratcher(
              color: Colors.cyan,
              accuracy: ScratchAccuracy.low,
              threshold: 30,
              brushSize: 40,
              onThreshold: () {
                setState(() {
                  _opacity = 1;
                });
              },
              child: AnimatedOpacity(
                duration: Duration(milliseconds: 100),
                opacity: _opacity,
                child: Container(
                  height: MediaQuery.of(context).size.height*0.2,
                  width: MediaQuery.of(context).size.width*0.6,
                  child: Column(
                    children: [
                      Text("Hurray! you won",
                     style:TextStyle(fontSize: 20),),
                    Expanded(child: Image.asset("assets/gift.png",))
                    ],
                  ),
                ),
              ),
            );
          }),
        );
      }
  );
}

在content方法中,我們將返回Scratcher()。在刮板內部,我們將添加刮板卡的顏色,增加刮板的精度以提高性能,為刮板區域的百分比級別添加閾值,並為刮板在刮擦期間的不同尺寸添加brushSize。在子屬性中,添加一個**AnimatedOpacity(),**我們將添加一個duration,opacity和child屬性,以添加具有高度和寬度的conatiner。在容器內,我們將文本,圖像和自動換行添加到列窗口小部件。運行應用程式時,我們應該獲得屏幕輸出,如屏幕下方的捕獲。

代碼文件
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:scratcher/scratcher.dart';

class ScratchCard extends StatefulWidget {
  @override
  _ScratchCardState createState() => _ScratchCardState();
}

class _ScratchCardState extends State<ScratchCard> {
  double _opacity = 0.0;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("Scratch Card In Flutter",
          style: TextStyle(color: Colors.white),),
        automaticallyImplyLeading: false,
      ),
      body: Container(
        alignment: Alignment.center,
        child: FlatButton(
          onPressed: (){
            scratchDialog(context);
          },
          padding: EdgeInsets.symmetric(horizontal: 20, vertical: 20),
          shape: OutlineInputBorder(
            borderRadius: BorderRadius.circular(20),
            borderSide: BorderSide.none,
          ),
          color: Colors.cyan[300],
          child: Text("Scratch Card",
            style: TextStyle(color: Colors.white,
                fontWeight: FontWeight.bold,
                fontSize: 20),),

        ),
      ),
    );
  }

  Future<void> scratchDialog(BuildContext context) {
    return showDialog(context: context,
        builder: (BuildContext context) {
          return AlertDialog(
            shape: RoundedRectangleBorder(
              borderRadius: BorderRadius.circular(30),
            ),
            title: Column(
              children: [
                Align(
                  alignment: Alignment.center,
                  child: Text("You Earned Gift",
                    style: TextStyle(
                        color: Colors.red,
                        fontSize: 25,
                        fontWeight: FontWeight.bold),
                  ),
                ),
                Padding(
                  padding: const EdgeInsets.only(left: 25,right: 25),
                  child: Divider(
                    color: Colors.black,
                  ),
                ),
              ],
            ),

            content: StatefulBuilder(builder: (context, StateSetter setState) {
              return Scratcher(
                color: Colors.cyan,
                accuracy: ScratchAccuracy.low,
                threshold: 30,
                brushSize: 40,
                onThreshold: () {
                  setState(() {
                    _opacity = 1;
                  });
                },
                child: AnimatedOpacity(
                  duration: Duration(milliseconds: 100),
                  opacity: _opacity,
                  child: Container(
                    height: MediaQuery.of(context).size.height*0.2,
                    width: MediaQuery.of(context).size.width*0.6,
                    child: Column(
                      children: [
                        Text("Hurray! you won",style: TextStyle(fontSize: 20),),
                      Expanded(child: Image.asset("assets/gift.png",))
                      ],
                    ),
                  ),
                ),

              );
            }),
          );
        }
    );
  }
}

結論

在這篇文章中,解釋了刮刮卡的基本結構。您可以根據自己的選擇修改此代碼。這是 我對Scratch Card On User Interaction的一個小介紹,並且正在使用它。

相關焦點

  • Flutter和桌面應用的最新進展
    眾所周知,在開發 Flutter 時,我們希望通過單一代碼庫支持 Flutter 在各類設備 (包括 iOS、Android、Windows、Linux、macOS 和 Web) 上的應用,並實現原生編譯和遊戲級別的視覺效果
  • 解決flutter運行報錯:flutter_tools depends的處理方法
    我是您的朋友義縣遊學電子科技.今天帶來的flutter的錯誤解決方法是關於web平臺運行時提示:"Because flutter_tools depends on shelf_packages_handler any which doesn't exist(could not find package
  • flutter控制項:pageview的使用案例分析和重點說明
    今天我來跟您介紹一下flutter的控制項使用案例。一是工作之餘興趣愛好,二是作為一個學習總結,把學習的過程記錄下來。那我今天會把一個項目中用到的控制項逐一進行總結,希望大家多多支持。因為從這個事例中我們可以完全連接flutter的開發思想和編程方法,話不多說我們進入正題。1.配置好你的flutter環境,我這邊以web瀏覽器環境為演示的平臺。開發工具為vs code.如果不出意外,你只要把我這邊的代碼複製到vs code裡就應該可以正常運行的。
  • Flutter到底香不香?
    今晚停電,導致沒法寫代碼,聊一聊flutter,早就想聊了,一直沒時間。每個新的框架的出現都會引來大家的討論,flutter也不例外。大公司對於新技術會比較慎重的,穩定才是王道。去年在我開發一款代購產品時,我決定嘗試使用flutter,使用一周以後我徹底愛上了它。flutter中萬物皆為widget的思想與Java中的萬物皆對象如出一轍。很多人不習慣flutter手寫布局的方式,但是這麼長時間用下來之後,我覺得效率並不低。
  • 《CF》2020刮刮卡活動怎麼樣 刮刮卡活動地址分享
    ,並且還有積分兌換功能,那麼接下來小編就給大家帶來了3月cf刮刮卡活動介紹。 在3月24日,穿越火線開啟了全新的刮刮卡4.0活動,玩家可以在活動中獲得非常豐厚的獎勵,比如炫金超新星和炫金騎士,並且還有積分兌換功能,那麼接下來小編就給大家帶來了3月cf刮刮卡活動介紹。
  • Flutter實戰篇:計數器實例Demo分析
    它可以幫助你:提高開發效率同一份代碼開發iOS和Android用更少的代碼做更多的事情輕鬆迭代在應用程式運行時更改代碼並重新加載(通過熱重載)修復崩潰並繼續從應用程式停止的地方進行調試創建美觀,高度定製的用戶體驗受益於使用Flutter框架提供的豐富的Material Design和Cupertino(iOS風格)的widget實現定製、美觀、品牌驅動的設計,而不受原生控制項的限制
  • Google同時啟動Flutter 1.2和Dart 2.2
    dart flutterFlutter 1.2的新功能1.更多的插件Flutter窗口小部件檢查器:此更新是為了改善可視化效果並啟用對樹層次結構的探索,該樹層次結構被框架用於渲染。日誌記錄視圖:這是此更新中包含的另一個視圖,基本上顯示了應用程式中開發人員的日誌記錄活動以及其他收集事件。
  • 謹防中刮刮卡巨獎式的陷阱
    市民在地上撿到一張刮刮卡,一刮竟是巨獎,告訴你中了一張26萬元的現金支票,在這張卡片的背面寫著:一等獎寶馬車一輛、二等獎26萬元支票一張、三等獎平板電腦一部價值4500元……獎品是夠誘人的,很多人就會動心撥打電話。
  • 菜鳥裹裹APP是如何使用「刮刮卡」做好活動運營的
    阿里巴巴旗下的菜鳥裹裹APP就在雙十一上線了「查包裹快遞送淘寶紅包」的刮刮卡活動。用戶使用菜鳥裹裹APP完成規定行為,即可獲得回血卡。用戶可以在開獎當天,刮開自己的回血卡,看看能得到多少紅包。有人會覺得刮刮卡很low,玩法很單一,盒子菌想說的是,不是刮刮卡low,而是你不懂得使用。
  • 最強啤酒【刮刮卡】來襲,京東酒世界助你引爆夏日
    5月20日~6月30日,京東酒世界為廣大酒友傾心打造的「啤酒【刮刮卡】福利大放送」活動,即將震撼登陸!活動期間,凡在京東酒世界小程序或美團、到家等第三方平臺購買啤酒品類商品,便可以參與啤酒【刮刮卡】活動,開啟浪漫520的同時,讓京東酒世界承包你整個夏天的暢飲體驗!
  • 杭州一大學霸氣喊話:集齊七字「刮刮卡」,到年底的午餐我們包了!
    而杭州師範大學把活動推向了新高潮:只要集齊七字「刮刮卡」,就能兌換長期飯票,享受免費午餐。專設「折扣菜」窗口廚餘垃圾少了三分之二眼下,杭州師範大學剛開學,校園迎來萬名學生。「光碟」活動正在如火如進行中。
  • 年初新寵《全球使命3》超能暴君刮刮卡來襲
    如今,隨全視角第三人稱PVE射擊網遊《全球使命3》全新版本推出的「超能暴君刮刮卡」活動開啟!不僅能刮出永久的暴君武器,還可以刮出稀有裝備。活動限時開啟,機會不容錯過,快登錄官網活動頁面刮出你的心動好禮吧!
  • 神秘客人在華人酒吧買刮刮卡贏了5百萬歐
    義大利華人街(微信訂閱號:huarenjie0039)編譯Leggo新聞網綜合報導2019年2月2日Pordenone消息:一名神秘的玩家在酒吧買了一張20塊的刮刮卡並贏走了了這張票是'Maxi Miliardario''系列刮刮卡,是日前在Pordenone省Fiume Veneto鎮via Molino 1的Bar Sport酒吧裡賣出的。但是這位幸運的且身份保密的客人並未通知酒吧老闆夫婦贏走了這筆巨額獎金。
  • 體彩刮刮卡中獎幾十萬元,中獎一次以後都不玩了
    走進彩票店首先就機選兩注雙色球或者大樂透看看快樂十分,然後再去抽幾張刮刮卡試試手氣,試手氣?到底能不能刮中大獎呢?我是半信半疑,都掛了三四年了,反正最高的兩次一次是五元的刮中一千塊,第二次是十塊的刮中一千元,反正總體來說只有大把的錢是陪進去的
  • 杭師大「霸氣」喊話: 集齊七字刮刮卡,午餐學校包了!
    杭師大「霸氣」喊話: 集齊七字刮刮卡杭州師範大學把活動推向了新高潮:只要集齊七字「刮刮卡」,就能可能兌換到長期飯票,享受免費午餐。9月17日中午,在杭師大倉前校區勤園餐廳,一群身著紅色文化衫的「科學健康飲食宣傳員」舉著標語牌,提醒大家適量點餐。在「爭做師大光碟俠」的大型海報上,該校幼教專業大二學生何倚蓉籤下自己的名字,承諾「拒絕舌尖上的浪費」。「以前吃不完,確實浪費了。」
  • 18歲少年玩刮刮卡中獎210多萬,因疫情隔離花不出去
    據LadBible網站3月31日報導,一名來自英國斯託克的18歲少年凱爾·伯克(Kyle Burke)通過刮刮卡贏得24萬英鎊(約人民幣211.5萬元)的獎金,但由於疫情封鎖狀態,這筆錢暫時花不出去。圖:凱爾·伯克凱爾在JD Sports商店擔任助理工作,他在3月19日從哈密路便利店(英國特倫特河畔斯託克市哈密路221號)買了一張「英國彩票」刮刮卡,出人意料的是,他發現這張刮刮卡中獎了,承諾他全年可以每月獲得20,000英鎊(約人民幣17.6萬元),總計240,000英鎊(約人民幣211.5萬元)的獎金。
  • 如何使用BLoC架構開發Flutter應用
    逐步集成BLoC體系結步驟1:將BLoC架構添加到您的項目中您需要將flutter_bloc:^ 2.0.1依賴項添加到pub spec.yaml文件中。Bloc小部件是實現所有業務邏輯所需的基本組件。要使用它,需要擴展Bloc類並覆蓋mapEventToState 和initialState方法。 在mapEventToState中,您需要處理代表動作的參數。
  • Flutter 1.20穩定版發布 基於Dart程式語言2.9版本構建
    如果想利用此高級功能,可參見 flutter.dev 上的 SkSL warm-up 頁面。  • 重構了滑鼠命中測試,將基於 Web 的微基準的性能提高了 15 倍。因此,Google 能夠添加對滑鼠光標的支持,該滑鼠光標將顯示在幾個常用的小部件中。
  • 杭師大「光碟行動」出奇招:集齊七字「刮刮卡」,到年底的午餐學校...
    就餐完畢,何依蓉起身,拿著空盤走向餐盤收集處,放好餐盤,就收到了一張刮刮卡,刮開一看,刮獎區寫著「飲品」兩字。巧合的是,和何依蓉一起就餐的潘奕涵,也刮到了「飲品」。兩人開開心心前往兌換處,一人選了雪碧,一人選了冰紅茶。途中,兩位女生還在「爭做師大光碟俠」的大型海報上籤下自己的名字。
  • 「CFM」活動先知:黑龍魂回歸刮刮卡;遊騎兵-花瓣賽事限定來襲!
    兩款活動分別為電競奪寶、超級刮刮卡,看似毫無瓜葛的兩款活動,其實有巧妙的聯繫,下面我們就一起探索吧!黑龍魂曠世回歸,超級刮刮卡即刻來襲:活動時間:7月3日(本周五)開啟首先我們來看超級刮刮卡活動,活動的參與方式為購買資格參與抽獎,獎池中包含武器道具或積分,可直接通過抽獎獲得武器道具,也可通過積分兌換,玩法比較簡單。