<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: tedTecch</title>
    <description>The latest articles on Forem by tedTecch (@tedtecch).</description>
    <link>https://forem.com/tedtecch</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F863221%2F1049bc56-7b9a-4b1d-abb0-5f608f2e5496.png</url>
      <title>Forem: tedTecch</title>
      <link>https://forem.com/tedtecch</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/tedtecch"/>
    <language>en</language>
    <item>
      <title>Integrate computer vision with flutter (using Google Teachable)</title>
      <dc:creator>tedTecch</dc:creator>
      <pubDate>Sun, 26 Mar 2023 18:31:10 +0000</pubDate>
      <link>https://forem.com/tedtecch/integrate-computer-vision-with-into-flutter-app-using-google-teachable-fn4</link>
      <guid>https://forem.com/tedtecch/integrate-computer-vision-with-into-flutter-app-using-google-teachable-fn4</guid>
      <description>&lt;h2&gt;
  
  
  &lt;strong&gt;Introduction&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;In recent years, computer vision AI has become increasingly popular in the development of mobile applications. With computer vision AI, mobile apps can perform a variety of tasks, such as image recognition, object detection, emotion detection and facial recognition. Google Teachable is a platform that allows users to create and train their own machine learning models, without requiring any programming knowledge. By integrating computer vision AI with Google Teachable in a Flutter app, developers can create intelligent mobile applications that can recognise and classify images with high accuracy.&lt;/p&gt;

&lt;p&gt;In this article, we will explore the process of integrating computer vision AI with Google Teachable in a Flutter app. We will discuss the steps required to create and train a machine learning model using Google Teachable, and how to export it as a TensorFlow Lite model that can be used in a Flutter app. We will also demonstrate how to use the TensorFlow Lite interpreter to perform image(fruit) classification in a Flutter app, and how to build a user interface that captures and processes images.&lt;/p&gt;

&lt;p&gt;Finally, we will discuss the benefits of using computer vision AI in mobile apps, and the potential applications of this technology in the future.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Getting Started&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;In this section, we will discuss how to integrate computer vision AI into a Flutter app using Google Teachable. Specifically, we will cover the initial steps of creating a new Flutter project and installing the necessary packages and dependencies.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Creating a New Flutter Project&lt;/strong&gt;&lt;br&gt;
Before we can begin integrating computer vision AI into our Flutter app, we need to create a new Flutter project. This can be done using the following command in the terminal:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;flutter create &amp;lt;project-name&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This command will create a new Flutter project with the specified name. Once the project is created, navigate to the project directory using the cd command in the terminal.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Installing Necessary Packages and Dependencies&lt;/strong&gt;&lt;br&gt;
Now that we have created our new Flutter project, we need to install the necessary packages and dependencies for integrating computer vision AI. The packages required for this integration are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://pub.dev/packages/camera" rel="noopener noreferrer"&gt;camera&lt;/a&gt;: This package provides access to the device's camera, which we will need for capturing images for computer vision AI analysis.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://pub.dev/packages/tflite" rel="noopener noreferrer"&gt;tflite&lt;/a&gt;: This package provides support for TensorFlow Lite models, which are used for machine learning and computer vision AI.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To install these packages, add them to the pubspec.yaml file in the project directory and run the following command in the terminal:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;flutter pub get
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  &lt;strong&gt;Integrating Google Teachable with Flutter App&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Google Teachable is a platform that allows developers to train custom machine learning models without writing any code. With Google Teachable, we can easily create and train machine learning models using a simple drag-and-drop interface. This makes it an excellent tool for adding computer vision AI capabilities to our Flutter app.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Setting up a Google Teachable Account&lt;/strong&gt;&lt;br&gt;
To get started with Google Teachable, we need to create an account. To do this, visit &lt;a href="https://teachablemachine.withgoogle.com/" rel="noopener noreferrer"&gt;https://teachablemachine.withgoogle.com/&lt;/a&gt; and sign in with your Google account. Once you have signed in, you will be taken to the Teachable Machine dashboard where you create a new image project just like the image below:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjsus0yppbrho6yqtwsch.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjsus0yppbrho6yqtwsch.png" alt="Teachable Machine dashboard"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Creating a Custom Machine Learning Model in Google Teachable&lt;/strong&gt;&lt;br&gt;
Now that we have set up our Google Teachable account and a new project, we can create a custom machine learning model. For the purpose of this tutorial, we will be creating an image classification model that can identify different fruits(strawberries, oranges, apples).&lt;/p&gt;

&lt;p&gt;To create the model, we will use the Teachable Machine webcam feature to capture images of different fruits. The images of these fruits would be in separate folders or class, you can do this by renaming the folders(class) according to the category of each fruit(strawberries, oranges, apples). Alternatively, we could upload images of the fruits we want to classify.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Foi7peovfcnlzi2zf6alg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Foi7peovfcnlzi2zf6alg.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once we have captured enough images for each fruit(300 images in this case for each category), we can train the model by clicking on the Train Model button. This will train the machine learning model and generate a classification model and a set of classification labels. The training can take some time so be patient till its done.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftp7vrux15adqvh2k5nr7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftp7vrux15adqvh2k5nr7.png" alt="Dataset ready to be trained"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Exporting the Model as a TensorFlow Lite Model&lt;/strong&gt;&lt;br&gt;
After training the model, we need to export it as a TensorFlow Lite model. To do this, we can select the TensorFlow Lite export option from the Export Model dropdown menu, then click the download model button. This will generate a TensorFlow Lite model file that we can integrate into our Flutter app.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fod0gprsv0ztbispv44fo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fod0gprsv0ztbispv44fo.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqsn44hh1f27u3lq9ro3k.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqsn44hh1f27u3lq9ro3k.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Integrating the TensorFlow Lite Model in Flutter App&lt;/strong&gt;&lt;br&gt;
Now that we have exported the TensorFlow Lite model from Google Teachable, we can integrate it into our Flutter app. To do this, we need to unzip the downloaded file and copy the model and label file to our assets folder in our flutter app.&lt;/p&gt;

&lt;p&gt;Once we have loaded the TensorFlow Lite model in our Flutter app, we can use it to perform image classification on images captured from the device's camera using the camera package. We can then display the classification results in the Flutter app UI.&lt;/p&gt;
&lt;h2&gt;
  
  
  &lt;strong&gt;Implementing Computer Vision AI in Flutter App&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Using TensorFlow Lite Interpreter in Flutter app to perform image classification&lt;/strong&gt;&lt;br&gt;
First, we need to initialize our camera in Flutter. We do this by adding a CameraController to our initState() method. We set up the camera using the availableCameras() method from the camera package. We then set the back-facing camera as our default camera and initialize the camera using the initialize() method. We start the image stream from the camera using the startImageStream() method, which is called when the camera is initialized. This allows us to capture frames from the camera continuously.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  CameraImage? cameraImage;
  CameraController? cameraController;

  @override
  void initState() {
    super.initState();
    loadCamera();
  }

  loadCamera() async {
    final cameras = await availableCameras();
    final frontCamera = cameras.firstWhere(
        (camera) =&amp;gt; camera.lensDirection == CameraLensDirection.back);
    cameraController = CameraController(
      frontCamera,
      ResolutionPreset.medium,
      enableAudio: false,
    );

    cameraController!.initialize().then((_) {
      if (!mounted) {
        return;
      } else {
        setState(() {
          cameraController!.startImageStream((imageStream) {
            cameraImage = imageStream;
          });
        });
      }
    });
  }

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Next, we need to use the Tflite package to perform image classification. We load our model and labels using the loadModel() method. We then use the runModelOnFrame() method to classify each frame from the camera stream. This method takes in the bytesList, image height, image width, imageMean, imageStd, rotation, numResults, and threshold as parameters. We set the asynch parameter to true so that the model runs on a separate thread, preventing the UI from freezing.Finally, we are using the forEach() function to loop through the predictions and update the UI with the predicted output.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  String output = '';

  runModel() async {
    if (cameraImage != null) {
      var prediction = await Tflite.runModelOnFrame(
        bytesList: cameraImage!.planes.map((plane) {
          return plane.bytes;
        }).toList(),
        imageHeight: cameraImage!.height,
        imageWidth: cameraImage!.width,
        imageMean: 127.5,
        imageStd: 127.5,
        rotation: 90,
        numResults: 2,
        threshold: 0.1,
        asynch: true,
      );
      prediction!.forEach((element) {
        setState(() {
          output = element['label'];
        });
      });
    }
  }

  loadModel() async {
    await Tflite.loadModel(
      model: 'assets/model_unquant.tflite',
      labels: 'assets/labels.txt',
    );
  }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;*** Building a user interface to capture and process images**&lt;/p&gt;

&lt;p&gt;Next, we will build the user interface to capture and display images. In the Scaffold() widget, we will create an AppBar() widget with the title "Fruit Classification". We will then use the SafeArea() widget to avoid overlapping the UI with the device's system UI. We will create a Container() widget with a height of 70% of the device height and width of the device width to hold the camera preview. We will then check if the camera controller is initialized and use the AspectRatio() widget to set the aspect ratio of the camera preview. Finally, we will add a Text() widget to display the output label from the machine learning model.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Scaffold(
  appBar: AppBar(
    title: const Text("Fruit classification "),
  ),
  body: SafeArea(
    child: Padding(
      padding: const EdgeInsets.all(16.0),
      child: Column(
        crossAxisAlignment: CrossAxisAlignment.start,
        children: [
          Container(
            height: MediaQuery.of(context).size.height * 0.7,
            width: MediaQuery.of(context).size.width,
            child: !cameraController!.value.isInitialized
                ? Container()
                : AspectRatio(
                    aspectRatio: cameraController!.value.aspectRatio,
                    child: CameraPreview(cameraController!),
                  ),
          ),
          Text(
            output,
            style: const TextStyle(
                fontWeight: FontWeight.bold, fontSize: 20),
          )
        ],
      ),
    ),
  ));

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That concludes the logic, when you run your project, you should have something similar to the video below.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi529qzuc09sngzuj3xnv.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi529qzuc09sngzuj3xnv.gif" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Conclusion&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;In conclusion, this article has demonstrated how to integrate computer vision AI into a Flutter app using Google Teachable. We have explored how to create a custom machine learning model in Google Teachable, export the model as a TensorFlow Lite model, and integrate it into a Flutter app using the TensorFlow Lite Interpreter. We have also built a user interface to capture and process images and displayed the results of the classification in real-time.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Future possibilities and improvements&lt;/strong&gt;&lt;br&gt;
As for future possibilities and improvements, there are various ways to enhance the user experience by integrating computer vision AI with other technologies such as augmented reality (AR). For instance, we could build an AR app that displays additional information about the classified fruits, such as their nutritional value and recipes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Importance of computer vision AI in mobile app development&lt;/strong&gt;&lt;br&gt;
The importance of computer vision AI in mobile app development cannot be overstated. It opens up endless possibilities for creating innovative and intelligent mobile apps that can recognize and understand the world around them. With the help of Google Teachable and Flutter, developers can easily integrate computer vision AI into their mobile apps and enhance the user experience.&lt;/p&gt;

&lt;p&gt;You can find the complete code for this project on the following link: &lt;a href="https://github.com/lyon-zas/Computer-vision-mobile-app" rel="noopener noreferrer"&gt;Repo&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>flutter</category>
      <category>datascience</category>
      <category>mobile</category>
    </item>
    <item>
      <title>CRYPTO WALLET DAPP WITH FLUTTER AND SOLIDITY</title>
      <dc:creator>tedTecch</dc:creator>
      <pubDate>Sat, 21 May 2022 15:27:35 +0000</pubDate>
      <link>https://forem.com/tedtecch/crypto-wallet-dapp-with-flutter-and-solidity-ngj</link>
      <guid>https://forem.com/tedtecch/crypto-wallet-dapp-with-flutter-and-solidity-ngj</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;The evolution of web3 has been growing at a very fast pace, with a lot of products and tools coming out making it easy to understand and perform transactions on the blockchain. The use of blockchain technologies to develop web apps and mobile apps, also known as decentralised applications (Dapps), like our crypto wallets (trust wallet, metamask), pancake swap, etc., is also growing at a very fast pace. Therefore, anyone who intends to stay current and ahead of the growth should learn how to use and integrate this technology.&lt;/p&gt;

&lt;p&gt;In this article, I’ll show you how to connect your Solidity smart contract to a flutter application and perform basic CRUD operations. This article is a continuation of my previous article on creating an ERC20 token on a polygon network. In the article, I explain some basic terminologies that won't be repeated in this article, so check it out &lt;a href="https://dev.to/tedtecch/create-an-erc-20-token-on-poygon-3ako"&gt;Here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;We’ll cover the following in details: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Connecting to a smart contract&lt;/li&gt;
&lt;li&gt;Getting the balance of an address&lt;/li&gt;
&lt;li&gt;Fetching data from the blockchain, e.g., name, symbol, e.t.c.&lt;/li&gt;
&lt;li&gt;Transfer our token from one address to another&lt;/li&gt;
&lt;li&gt;Mint tokens to our address &lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Prerequisites
&lt;/h3&gt;

&lt;p&gt;To understand and follow through this article, you need to have:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://flutter.dev"&gt;Flutter&lt;/a&gt; pre-installed&lt;/li&gt;
&lt;li&gt;Basic understanding of flutter and dart&lt;/li&gt;
&lt;li&gt;Code editor&lt;/li&gt;
&lt;li&gt;Web Browser(chrome)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Getting started
&lt;/h2&gt;

&lt;p&gt;After writing, compiling, and deploying the smart contract, we need a blockchain server to run it on. There are some platforms that offer this service, like Infura, Alchemy, etc. We will be using Alchemy for its simplicity and also because it provides us access to different blockchain networks.&lt;br&gt;
Simply create an account and create a new app on the platform, enter project details, then you can select the chain, in this case, polygon and network in polygon Mumbai.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--O_v5N1_E--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/j042aoxv521ia45rc24w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--O_v5N1_E--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/j042aoxv521ia45rc24w.png" alt="Image description" width="880" height="304"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After creating the app, click on "view key," which would give us a key and two links, as in the image below. You can pick any of the links, but we would use the http link by copying it.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--fZh9_May--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/jrvzhsdxcao7flnpoez1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--fZh9_May--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/jrvzhsdxcao7flnpoez1.png" alt="Image description" width="880" height="203"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The next thing is to create a new Flutter project and develop a basic design for our app with three buttons: send, receive, and a floating action button (to refresh our screen). The send and receive buttons provide a cupertino alert dialog where we can input an address and amount.&lt;br&gt;
But before we start coding the logic of the app, we need to add some packages.&lt;/p&gt;

&lt;p&gt;The first package we require is &lt;a href="%E2%80%8B%E2%80%8Bhttps://pub.dev/packages/web3dart"&gt;web3dart&lt;/a&gt;, which is a dart library that connects to the Ethereum blockchain. It connects to an Ethereum node to send transactions, interact with smart contracts, and much more. And the second package is &lt;a href="https://pub.dev/packages/http"&gt;http&lt;/a&gt;, which is used for making https requests in a flutter.&lt;/p&gt;

&lt;p&gt;We start by creating the following variables below. We also paste our metamask address, the http link provided by Alchemy in the blockchain url, and declare a variable &lt;code&gt;dec&lt;/code&gt;, which represent &lt;code&gt;10^18&lt;/code&gt; which is the erc20 decimal standard.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
 late Client httpClient;
  late Web3Client ethClient;
  //Polygon address
  final String myAddress = "0x4818569AA9dE13d3cC1D702Cd10a95932799a674";
  //url from alchemy
  final String blockchainUrl = "https://polygon-mumbai.g.alchemy.com/v2/xhOSAQIFW6H_-NjxcSrpa1vJbwckXTUC";
  bool data = false;
  int myAmount = 0;
  int amt = 0;
  var addressTo = "";
  var dec = pow(10, 18);
  var mydata;
  var mybalance;
  late String transHash;
  var balance;
  var name;
  var symbol;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After that, we head back to our &lt;strong&gt;Remix&lt;/strong&gt; &lt;strong&gt;IDE&lt;/strong&gt;, and in the Solidity compiler tab, we copy the &lt;strong&gt;ABI&lt;/strong&gt; of our smart contract as shown in the image below, marked by the &lt;strong&gt;red&lt;/strong&gt; arrow. Also, ensure the contract file is our created contract as marked with the &lt;strong&gt;blue&lt;/strong&gt; arrow.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--k5KBL5j1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wekjexl3tawdu9saqcdc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--k5KBL5j1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/wekjexl3tawdu9saqcdc.png" alt="Image description" width="880" height="432"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Then in our flutter project, we create an assets folder in our root folder and within it we create a file named ‘token.json’, in this file, we paste the copied abi. We can then move to our &lt;code&gt;pubspec.yaml&lt;/code&gt; file and &lt;u&gt;uncomment&lt;/u&gt;, adding assets to our application looking like the code below. Then we can run &lt;code&gt;flutter pub get&lt;/code&gt; command.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt; assets:
    - assets/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In our initState callback, we will initialize our httpClient and Web3client, as well as call a method to retrieve the name, symbol, and balance values from our smart contract:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;@override
  void initState() {
    httpClient = Client();
    ethClient = Web3Client(blockchainUrl, httpClient);
    super.initState();
    getName();
    getSymbol();
    getBalance(myAddress);
  }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Connect Smart Contract
&lt;/h3&gt;

&lt;p&gt;We declare a contract using the &lt;code&gt;DeployedContract&lt;/code&gt; class from our &lt;code&gt;web3dart&lt;/code&gt; package, which takes in the ABI file, the name of our smart contract, which in our case is &lt;code&gt;FirstToken&lt;/code&gt;, and the contract address and returns it from our function.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Future&amp;lt;DeployedContract&amp;gt; getContract() async {
    String abiFile = await rootBundle.loadString("assets/token.json");
    String contractAddress = "0x50338cAF974F2ec1869020e83eF48E36aCE93caf";
    final contract = DeployedContract(
        ContractAbi.fromJson(abiFile, "FirstToken"),
        EthereumAddress.fromHex(contractAddress));
    return contract;
  }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Fetch Data From TheBlockchain
&lt;/h3&gt;

&lt;p&gt;The next function, &lt;code&gt;query&lt;/code&gt; is used to call a function inside our smart contract, I used it mainly for read operations. This function connects to our smart contract using the call extension from the &lt;code&gt;web3dart&lt;/code&gt; EthereumClient class, we will be calling this function in another function.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Future&amp;lt;List&amp;lt;dynamic&amp;gt;&amp;gt; query(String functionName, List&amp;lt;dynamic&amp;gt; args) async {
    //
    final contract = await getContract();
    final ethFunction = contract.function(functionName);
    // This line below doesn't work.
    final result = await ethClient.call(
        contract: contract, function: ethFunction, params: args);
    // print(result.toString());
    return result;
  }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Write To The Blockchain
&lt;/h3&gt;

&lt;p&gt;In this submit function we are performing a write operation to the blockchain therefore it requires our private key which you can get from metamask, but in a normal wallet, this private key is stored securely in the app when you import or generate a wallet, take note that you should not reveal your private key under any circumstances.&lt;/p&gt;

&lt;p&gt;Also, we used a &lt;code&gt;Transaction.callContract&lt;/code&gt; to pass in our gotten contract, the function we are requesting in our smart contract, the parameters imputed in the function and maximum gas fee, after we used &lt;code&gt;sendTransaction&lt;/code&gt; from &lt;code&gt;web3dart&lt;/code&gt; to pass in our private key, the transaction object and &lt;code&gt;fetchChainIdFromNetworkId&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Future&amp;lt;String&amp;gt; submit(String functionName, List&amp;lt;dynamic&amp;gt; args) async {
    DeployedContract contract = await getContract();
    final ethFunction = contract.function(functionName);
    snackBar(label: "Recording tranction");
    EthPrivateKey key = EthPrivateKey.fromHex(
        "5288***********************************60ffbd08");
    Transaction transaction = await Transaction.callContract(
        contract: contract,
        function: ethFunction,
        parameters: args,
        maxGas: 100000);
    print(transaction.nonce);
    final result = await ethClient.sendTransaction(key, transaction,
        fetchChainIdFromNetworkId: true, chainId: null);
    print(result);
    ScaffoldMessenger.of(context).removeCurrentSnackBar();
    snackBar(label: "verifying transaction");
    //set a 20 seconds delay to allow the transaction to be verified before trying to retrieve the balance
    Future.delayed(const Duration(seconds: 20), () {
      ScaffoldMessenger.of(context).removeCurrentSnackBar();
      snackBar(label: "retriving balance");
      getBalance(myAddress);
      ScaffoldMessenger.of(context).clearSnackBars();
    });
    return result;
  }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We set a 20-sec delay before calling our &lt;code&gt;getBalance&lt;/code&gt; function to ensure that the transaction has been executed because it takes a while, we also add some snackBar to make sure a user knows what is going on.&lt;/p&gt;

&lt;p&gt;Moving forward we have the main &lt;code&gt;getBalance&lt;/code&gt;, &lt;code&gt;getName&lt;/code&gt; and &lt;code&gt;getSymbol&lt;/code&gt; function, these functions calls the &lt;code&gt;query&lt;/code&gt; read request function explained above, pass the function name as it is written in solidity and save it as a variable in our flutter app.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Future&amp;lt;void&amp;gt; getBalance(String targetAddress) async {
    EthereumAddress address = EthereumAddress.fromHex(targetAddress);
    // print('In getGreeting');
    List&amp;lt;dynamic&amp;gt; result = await query('balanceOf', [address]);
    print('In getGreeting');
    print(result[0]);
    mybalance = result[0];
    var div = BigInt.from(dec);
    balance = BigInt.from(mybalance / div);

    print("balance: $balance");
    data = true;
    setState(() {});
  }
  Future&amp;lt;void&amp;gt; getName() async {
    // print('In getGreeting');
    List&amp;lt;dynamic&amp;gt; result = await query('name', []);
    print(result[0]);
    name = result[0];
    data = true;
    print(name);
    setState(() {});
  }
  Future&amp;lt;void&amp;gt; getSymbol() async {
    List&amp;lt;dynamic&amp;gt; result = await query('symbol', []);
    print(result[0]);
    symbol = result[0];
    data = true;
    setState(() {});
  }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Finally, we have our ‘sendCoin’ and ‘recieveCoin’ functions, these functions use the ‘submit’ function explained earlier passing the function name as it is in solidity, also the address it should be sent to and the amount.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Future&amp;lt;String&amp;gt; reciveCoin() async {
    EthereumAddress addressTo =
        EthereumAddress.fromHex("0x4818569AA9dE13d3cC1D702Cd10a95932799a674");
    var bigAmount = BigInt.from(myAmount);
    var response = await submit('mint', [addressTo, bigAmount]);
    print('Recieved');
    transHash = response;
    setState(() {});
    return response;
  }
  Future&amp;lt;String&amp;gt; transferCoin() async {
    var amount = BigInt.from(amt *dec);
    EthereumAddress to = EthereumAddress.fromHex(addressTo);
    print("amo: $amount");
    var response = await submit('transfer', [to, amount]);
    print('Transfered');
    transHash = response;
    setState(() {});
    return response;
  }

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That concludes our logic, when you run your project, you should have something like this.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--X-MEbGvk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vir4bofip03jj29s7ozv.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--X-MEbGvk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vir4bofip03jj29s7ozv.gif" alt="Image description" width="600" height="338"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;This smart integration has covered enough to help you understand and execute read and write operations to the block chain using flutter which is relatively new, so keep exploring and experimenting. Keep in mind there is no learning without practice.&lt;br&gt;
Check out the link below to access the project's repository.&lt;br&gt;
&lt;a href="https://github.com/lyon-zas/ERC-20-wallet"&gt;https://github.com/lyon-zas/ERC-20-wallet&lt;/a&gt;&lt;/p&gt;

</description>
      <category>flutter</category>
      <category>solidity</category>
      <category>web3</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Create an ERC-20 token on Polygon</title>
      <dc:creator>tedTecch</dc:creator>
      <pubDate>Mon, 16 May 2022 22:12:23 +0000</pubDate>
      <link>https://forem.com/tedtecch/create-an-erc-20-token-on-poygon-3ako</link>
      <guid>https://forem.com/tedtecch/create-an-erc-20-token-on-poygon-3ako</guid>
      <description>&lt;p&gt;The adoption of cryptocurrencies and block-chain technology has been amazing in the past few years, leading to more coins being created with different use-cases from Defi to exchanges etc.&lt;br&gt;
In this article, I would teach you how to create an ERC-20 token using solidity and deploy it on the polygon block-chain network.&lt;br&gt;
But before we start, Let’s define some of the terms we will come across in this article.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is ERC-20?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Erc-20 is a technical standard used in a smart contract on the Ethereum blockchain to provide and implement a list of rules that all Ethereum based tokens must follow according to &lt;a href="https://www.investopedia.com/news/what-erc20-and-what-does-it-mean-ethereum/"&gt;Investopedia&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is a smart contract?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A “contract” simply means an agreement between two or more people and the word “smart” means automated or independent, therefore a smart contract is an automated document or instruction that executes an agreement running independently on a block-chain network.&lt;/p&gt;

&lt;p&gt;According to Wikipedia, a &lt;strong&gt;Block-chain&lt;/strong&gt; is a growing list of records called blocks that are securely linked together using cryptography, each block contains a cryptographic hash of the previous block, time and transaction data.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is Polygon?&lt;/strong&gt;&lt;br&gt;
Polygon is a secondary layer solution that is compatible with and complements the Ethereum block-chain. Polygon complements the Ethereum block-chain by providing additional features relating to security, block-chain sovereignty, fast and cheap transactions.&lt;/p&gt;
&lt;h2&gt;
  
  
  &lt;strong&gt;Getting Started&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;To begin, we must first download and install MetaMask. So, go ahead and &lt;a href="https://metamask.io/"&gt;click this link to add the MetaMask extension to your browser&lt;/a&gt; (preferably Chrome).&lt;br&gt;
After that, create and configure your cryptocurrency wallet. Because this is a learning exercise, click here, scroll down and click “add Mumbai network” to add the polygon test network and switch your network from &lt;strong&gt;Ethereum&lt;/strong&gt; &lt;strong&gt;Mainnet&lt;/strong&gt; to &lt;strong&gt;Matic&lt;/strong&gt; &lt;strong&gt;Mumbai&lt;/strong&gt; as seen in the image below.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--9vthVf8v--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/tp3n64f4gvgol4vdyfxp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--9vthVf8v--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/tp3n64f4gvgol4vdyfxp.png" alt="Image description" width="353" height="592"&gt;&lt;/a&gt;&lt;br&gt;
The next thing is to get some test Matic to handle gas fees when performing write operations to our smart contract. Click this link and paste your wallet address to get some as seen in the images below.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Bk2K4E_3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/e6fn3sc735yjnpvkqte3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Bk2K4E_3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/e6fn3sc735yjnpvkqte3.png" alt="Image description" width="880" height="423"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1: Create Remix File&lt;/strong&gt; &lt;br&gt;
To write the code we would use Remix by clicking on &lt;a href="https://docs.openzeppelin.com/contracts/4.x/wizard"&gt;remix.ethereum.org&lt;/a&gt;, Remix is an online integrated development environment(IDE) for solidity.  Click on the contract folder by the left and create a file called &lt;code&gt;token.sol&lt;/code&gt;, the “sol” here stands for solidity.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step2: Using OpenZeppelin&lt;/strong&gt;&lt;br&gt;
OpenZeppelin provides the ERC-20 token standard we discussed above and other templates for different tokens. Therefore we can utilise the wizard feature on their website to create the token even without prior knowledge of solidity.&lt;br&gt;
In the &lt;a href="https://docs.openzeppelin.com/contracts/4.x/wizard"&gt;Wizard page here&lt;/a&gt;, we add the name “First Token”, and the symbol “FRT” for our token, we also make it mintable meaning you can create a supply for the token. you can see this in the image below.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--rVpLtgCS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/s1bg6fb7wn5bfv6kpmun.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--rVpLtgCS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/s1bg6fb7wn5bfv6kpmun.png" alt="copy the generated code and head over to remix." width="880" height="397"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Explanation:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// SPDX-License-Identifier: MIT
pragma solidity ^0.8.7;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In the first line, we added the license type, followed by the second line that declares the version of solidity we are using, which is 0.8.7 in this file.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
import "@openzeppelin/contracts/access/Ownable
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Lines 4 and 5 import the openZeppelin’s ERC-20 and ownable packages respectively, Then declare a contract followed by the name “First Token” we also specify that the contract is ER20 and it’s ownable.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;constructor() ERC20("First Token", "FRT") {}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;next, we declared the constructor to initialize the ERC20 name and symbol whenever we create an instance.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
function mint(uint256 amount) public onlyOwner {
        _mint(msg.sender, amount* 10**uint(decimals()));
    }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Final we have a function that collects the address the token will be minted to and the amount to be minted, then a public modifier which means the function can be called outside the contract and another modifier only owner indicating only the owner(the address that deployed the contract) can call the function, it then passes this input details to the _mint() function.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;
import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
contract FirstToken is ERC20, Ownable {
    constructor() ERC20("First Token", "FRT") {}
    function mint(uint256 amount) public onlyOwner {
        _mint(msg.sender, amount* 10**uint(decimals()));
    }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Step4: Compile the contract&lt;/strong&gt;&lt;br&gt;
Using remix makes it so easy to compile our smart contract, you can do this by clicking on the solidity compiler which is the third icon on the left navbar. Next, we ensure that our solidity version in the second line in our contract is the same as our compiler version to prevent any errors, then you click the “compile token.sol” button, subsequently you can just “CTRL + S” to compile which saves time.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step5: Deploy Contract&lt;/strong&gt;&lt;br&gt;
Now that our contract is compiled we can deploy it to Ethereum, polygon blockchain, Binance etc. Here we would deploy on the polygon Mumbai testnet because this would cost some gas fees to deploy, also testnet is a great way for developers to learn without any cost.&lt;/p&gt;

&lt;p&gt;To deploy the contract, we move to the last icon on the left navbar. First, we change the deployment environment &lt;strong&gt;JavaScript VM(london)&lt;/strong&gt; to &lt;strong&gt;injected web3&lt;/strong&gt;, and approve the "connect” metamask wallet address to remix. The next thing we check is if the contract we are about to deploy is the “token.sol” you can do this by checking the above the deploy button.&lt;/p&gt;

&lt;p&gt;Finally, we can now click the deploy button, confirm the transaction on metamask and wait for the traction to be approved which would take some seconds.&lt;br&gt;
Now that our token has been successfully deployed we are going to mint &lt;strong&gt;1000 FirstToken&lt;/strong&gt; and confirm the transaction, we can also check the total supply of this token feel free to play around with other functions. Note the orange buttons are written operations that would cost a gas fee and the blue buttons are read operations which won't cost any gas fees.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;View Deployed Token In Wallet&lt;/strong&gt;&lt;br&gt;
Now, that we have our token deployed on the polygon network, it would be amazing to view this token in our wallet just like any other token right? &lt;br&gt;
To view, this token opens up metamask, click on the assets tab and &lt;br&gt;
“import tokens” at the bottom of our MetaMask app. On the provided page we can fill out some empty fields but we would need only the contract address and the rest would the filled with the help of MetaMask.&lt;br&gt;
You can get the contract address by clicking on the copy icon in the remix as seen in the image below. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--B4QCh5PM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/51qf6t5qtukrtjymxubb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--B4QCh5PM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/51qf6t5qtukrtjymxubb.png" alt="Image description" width="333" height="99"&gt;&lt;/a&gt;&lt;br&gt;
Click on the “add Custom Token” button and we have our token imported successfully. As you can see from the image below, we have “1000 FRT” which we minted earlier and you can also see the history of the transaction, we can also transfer this coin to your friends with just their address.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--a_XIpAAf--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0ngko6rg4pqyf7zbjtt1.png" alt="" width="355" height="587"&gt;&lt;/td&gt;
&lt;td&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--oDi-GcTW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rcawmx0zqbprz223s52n.png" alt="" width="357" height="585"&gt;&lt;/td&gt;
&lt;td&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--IIfjMhOS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/d4dj2kv3ngi9cwgo55xs.png" alt="Image description" width="348" height="585"&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Conclusion&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;In this article, we have covered some blockchain terminologies, solidity, how to create an erc20 token and also viewing this token in your MetaMask wallet.&lt;br&gt;
I hope this article has been helpful to you in your tech journey, remember there is no learning without practice so make sure your practice.&lt;br&gt;
Thank you.&lt;/p&gt;

&lt;p&gt;In the second part of this article, I will be integrating this smart contract into a flutter application.&lt;br&gt;
You can read the second article &lt;a href="https://dev.to/tedtecch/crypto-wallet-dapp-with-flutter-and-solidity-ngj"&gt;here&lt;/a&gt; &lt;/p&gt;

</description>
      <category>web3</category>
      <category>programming</category>
      <category>webdev</category>
      <category>blockchain</category>
    </item>
  </channel>
</rss>
