├── .gitignore ├── .metadata ├── README.md ├── analysis_options.yaml ├── android ├── .gitignore ├── app │ ├── build.gradle │ └── src │ │ ├── debug │ │ └── AndroidManifest.xml │ │ ├── main │ │ ├── AndroidManifest.xml │ │ ├── kotlin │ │ │ └── com │ │ │ │ └── example │ │ │ │ └── finder │ │ │ │ └── MainActivity.kt │ │ └── res │ │ │ ├── drawable-v21 │ │ │ └── launch_background.xml │ │ │ ├── drawable │ │ │ └── launch_background.xml │ │ │ ├── mipmap-hdpi │ │ │ └── ic_launcher.png │ │ │ ├── mipmap-mdpi │ │ │ └── ic_launcher.png │ │ │ ├── mipmap-xhdpi │ │ │ └── ic_launcher.png │ │ │ ├── mipmap-xxhdpi │ │ │ └── ic_launcher.png │ │ │ ├── mipmap-xxxhdpi │ │ │ └── ic_launcher.png │ │ │ ├── values-night │ │ │ └── styles.xml │ │ │ └── values │ │ │ └── styles.xml │ │ └── profile │ │ └── AndroidManifest.xml ├── build.gradle ├── gradle.properties ├── gradle │ └── wrapper │ │ └── gradle-wrapper.properties └── settings.gradle ├── assets ├── logo.png └── me.jpg ├── images ├── bm1.png ├── bm2.png ├── dm1.png └── dm2.png ├── lib ├── colors │ └── color.dart ├── constants │ └── platform_urls.dart ├── main.dart ├── pages │ ├── about_page.dart │ └── main_page.dart └── widget │ ├── finder_about_image.dart │ ├── finder_about_textinfo.dart │ ├── finder_appbar.dart │ ├── finder_drawer_header.dart │ ├── finder_list_tile.dart │ ├── finder_logo.dart │ ├── finder_platform_box.dart │ ├── finder_text_font.dart │ └── finder_textfield.dart ├── pubspec.lock ├── pubspec.yaml └── test └── widget_test.dart /.gitignore: -------------------------------------------------------------------------------- 1 | # Miscellaneous 2 | *.class 3 | *.log 4 | *.pyc 5 | *.swp 6 | .DS_Store 7 | .atom/ 8 | .buildlog/ 9 | .history 10 | .svn/ 11 | migrate_working_dir/ 12 | 13 | # IntelliJ related 14 | *.iml 15 | *.ipr 16 | *.iws 17 | .idea/ 18 | 19 | # The .vscode folder contains launch configuration and tasks you configure in 20 | # VS Code which you may wish to be included in version control, so this line 21 | # is commented out by default. 22 | #.vscode/ 23 | 24 | # Flutter/Dart/Pub related 25 | **/doc/api/ 26 | **/ios/Flutter/.last_build_id 27 | .dart_tool/ 28 | .flutter-plugins 29 | .flutter-plugins-dependencies 30 | .packages 31 | .pub-cache/ 32 | .pub/ 33 | /build/ 34 | 35 | # Symbolication related 36 | app.*.symbols 37 | 38 | # Obfuscation related 39 | app.*.map.json 40 | 41 | # Android Studio will place build artifacts here 42 | /android/app/debug 43 | /android/app/profile 44 | /android/app/release 45 | -------------------------------------------------------------------------------- /.metadata: -------------------------------------------------------------------------------- 1 | # This file tracks properties of this Flutter project. 2 | # Used by Flutter tool to assess capabilities and perform upgrades etc. 3 | # 4 | # This file should be version controlled. 5 | 6 | version: 7 | revision: 7211ca09d1f82ae452321c49fc81051eb645bb59 8 | channel: master 9 | 10 | project_type: app 11 | 12 | # Tracks metadata for the flutter migrate command 13 | migration: 14 | platforms: 15 | - platform: root 16 | create_revision: 7211ca09d1f82ae452321c49fc81051eb645bb59 17 | base_revision: 7211ca09d1f82ae452321c49fc81051eb645bb59 18 | - platform: android 19 | create_revision: 7211ca09d1f82ae452321c49fc81051eb645bb59 20 | base_revision: 7211ca09d1f82ae452321c49fc81051eb645bb59 21 | - platform: ios 22 | create_revision: 7211ca09d1f82ae452321c49fc81051eb645bb59 23 | base_revision: 7211ca09d1f82ae452321c49fc81051eb645bb59 24 | - platform: linux 25 | create_revision: 7211ca09d1f82ae452321c49fc81051eb645bb59 26 | base_revision: 7211ca09d1f82ae452321c49fc81051eb645bb59 27 | - platform: macos 28 | create_revision: 7211ca09d1f82ae452321c49fc81051eb645bb59 29 | base_revision: 7211ca09d1f82ae452321c49fc81051eb645bb59 30 | - platform: web 31 | create_revision: 7211ca09d1f82ae452321c49fc81051eb645bb59 32 | base_revision: 7211ca09d1f82ae452321c49fc81051eb645bb59 33 | - platform: windows 34 | create_revision: 7211ca09d1f82ae452321c49fc81051eb645bb59 35 | base_revision: 7211ca09d1f82ae452321c49fc81051eb645bb59 36 | 37 | # User provided section 38 | 39 | # List of Local paths (relative to this file) that should be 40 | # ignored by the migrate tool. 41 | # 42 | # Files that are not part of the templates will be ignored by default. 43 | unmanaged_files: 44 | - 'lib/main.dart' 45 | - 'ios/Runner.xcodeproj/project.pbxproj' 46 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |
2 | 3 | Logo 4 | 5 |

Finder

6 |

Written With Flutter 3.7.0-7.0.pre.1

7 | 8 | Operating System | Version | Download 9 | ------------- | ------------- | ------------- 10 | Android | 10 | [Download Apk](https://codeload.github.com/shervinbdndev/Finder/zip/refs/heads/apk) 11 | 12 |
13 |


14 |

15 | A Mobile application to find IDs in some Social Platforms. 16 |

17 | 18 |


19 |
20 |

Preview

21 | 22 | 23 | 24 | 25 |
26 |
27 | 28 |



29 | 30 |

Precendences

31 | 32 | - [x] Able to Show If any ID is on Github. 33 | - [x] Able to Show If any ID is on Pypi. 34 | - [ ] Able to Show If any ID is on Reddit. 35 | - [ ] Able to Show If any ID is on Twitter. 36 | - [ ] Able to Show If any ID is on Linkedin. 37 | - [ ] Able to Show If any ID is on Instagram. 38 | 39 |
40 |



41 |

Language and technologies used in This Project

42 | 43 | 44 | 45 | 46 | 47 | 48 |



49 |

WorkSpace

50 | 51 | 52 | 53 |
-------------------------------------------------------------------------------- /analysis_options.yaml: -------------------------------------------------------------------------------- 1 | # This file configures the analyzer, which statically analyzes Dart code to 2 | # check for errors, warnings, and lints. 3 | # 4 | # The issues identified by the analyzer are surfaced in the UI of Dart-enabled 5 | # IDEs (https://dart.dev/tools#ides-and-editors). The analyzer can also be 6 | # invoked from the command line by running `flutter analyze`. 7 | 8 | # The following line activates a set of recommended lints for Flutter apps, 9 | # packages, and plugins designed to encourage good coding practices. 10 | include: package:flutter_lints/flutter.yaml 11 | 12 | linter: 13 | # The lint rules applied to this project can be customized in the 14 | # section below to disable rules from the `package:flutter_lints/flutter.yaml` 15 | # included above or to enable additional rules. A list of all available lints 16 | # and their documentation is published at 17 | # https://dart-lang.github.io/linter/lints/index.html. 18 | # 19 | # Instead of disabling a lint rule for the entire project in the 20 | # section below, it can also be suppressed for a single line of code 21 | # or a specific dart file by using the `// ignore: name_of_lint` and 22 | # `// ignore_for_file: name_of_lint` syntax on the line or in the file 23 | # producing the lint. 24 | rules: 25 | # avoid_print: false # Uncomment to disable the `avoid_print` rule 26 | # prefer_single_quotes: true # Uncomment to enable the `prefer_single_quotes` rule 27 | 28 | # Additional information about this file can be found at 29 | # https://dart.dev/guides/language/analysis-options 30 | -------------------------------------------------------------------------------- /android/.gitignore: -------------------------------------------------------------------------------- 1 | gradle-wrapper.jar 2 | /.gradle 3 | /captures/ 4 | /gradlew 5 | /gradlew.bat 6 | /local.properties 7 | GeneratedPluginRegistrant.java 8 | 9 | # Remember to never publicly share your keystore. 10 | # See https://flutter.dev/docs/deployment/android#reference-the-keystore-from-the-app 11 | key.properties 12 | **/*.keystore 13 | **/*.jks 14 | -------------------------------------------------------------------------------- /android/app/build.gradle: -------------------------------------------------------------------------------- 1 | def localProperties = new Properties() 2 | def localPropertiesFile = rootProject.file('local.properties') 3 | if (localPropertiesFile.exists()) { 4 | localPropertiesFile.withReader('UTF-8') { reader -> 5 | localProperties.load(reader) 6 | } 7 | } 8 | 9 | def flutterRoot = localProperties.getProperty('flutter.sdk') 10 | if (flutterRoot == null) { 11 | throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.") 12 | } 13 | 14 | def flutterVersionCode = localProperties.getProperty('flutter.versionCode') 15 | if (flutterVersionCode == null) { 16 | flutterVersionCode = '1' 17 | } 18 | 19 | def flutterVersionName = localProperties.getProperty('flutter.versionName') 20 | if (flutterVersionName == null) { 21 | flutterVersionName = '1.0' 22 | } 23 | 24 | apply plugin: 'com.android.application' 25 | apply plugin: 'kotlin-android' 26 | apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" 27 | 28 | android { 29 | compileSdkVersion flutter.compileSdkVersion 30 | ndkVersion flutter.ndkVersion 31 | 32 | compileOptions { 33 | sourceCompatibility JavaVersion.VERSION_1_8 34 | targetCompatibility JavaVersion.VERSION_1_8 35 | } 36 | 37 | kotlinOptions { 38 | jvmTarget = '1.8' 39 | } 40 | 41 | sourceSets { 42 | main.java.srcDirs += 'src/main/kotlin' 43 | } 44 | 45 | defaultConfig { 46 | // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). 47 | applicationId "com.example.finder" 48 | // You can update the following values to match your application needs. 49 | // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration. 50 | minSdkVersion flutter.minSdkVersion 51 | targetSdkVersion flutter.targetSdkVersion 52 | versionCode flutterVersionCode.toInteger() 53 | versionName flutterVersionName 54 | } 55 | 56 | buildTypes { 57 | release { 58 | // TODO: Add your own signing config for the release build. 59 | // Signing with the debug keys for now, so `flutter run --release` works. 60 | signingConfig signingConfigs.debug 61 | } 62 | } 63 | } 64 | 65 | flutter { 66 | source '../..' 67 | } 68 | 69 | dependencies { 70 | implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" 71 | } 72 | -------------------------------------------------------------------------------- /android/app/src/debug/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /android/app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 7 | 15 | 19 | 23 | 24 | 25 | 26 | 27 | 28 | 30 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /android/app/src/main/kotlin/com/example/finder/MainActivity.kt: -------------------------------------------------------------------------------- 1 | package com.example.finder 2 | 3 | import io.flutter.embedding.android.FlutterActivity 4 | 5 | class MainActivity: FlutterActivity() { 6 | } 7 | -------------------------------------------------------------------------------- /android/app/src/main/res/drawable-v21/launch_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 12 | 13 | -------------------------------------------------------------------------------- /android/app/src/main/res/drawable/launch_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 12 | 13 | -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shervinbdndev/Finder/28d6b419a2a349c161104ef1dc0327d41a7fccc0/android/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shervinbdndev/Finder/28d6b419a2a349c161104ef1dc0327d41a7fccc0/android/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shervinbdndev/Finder/28d6b419a2a349c161104ef1dc0327d41a7fccc0/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shervinbdndev/Finder/28d6b419a2a349c161104ef1dc0327d41a7fccc0/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shervinbdndev/Finder/28d6b419a2a349c161104ef1dc0327d41a7fccc0/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/app/src/main/res/values-night/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | 15 | 18 | 19 | -------------------------------------------------------------------------------- /android/app/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | 15 | 18 | 19 | -------------------------------------------------------------------------------- /android/app/src/profile/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 3 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /android/build.gradle: -------------------------------------------------------------------------------- 1 | buildscript { 2 | ext.kotlin_version = '1.7.10' 3 | repositories { 4 | google() 5 | mavenCentral() 6 | } 7 | 8 | dependencies { 9 | classpath 'com.android.tools.build:gradle:7.2.0' 10 | classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" 11 | } 12 | } 13 | 14 | allprojects { 15 | repositories { 16 | google() 17 | mavenCentral() 18 | } 19 | } 20 | 21 | rootProject.buildDir = '../build' 22 | subprojects { 23 | project.buildDir = "${rootProject.buildDir}/${project.name}" 24 | } 25 | subprojects { 26 | project.evaluationDependsOn(':app') 27 | } 28 | 29 | task clean(type: Delete) { 30 | delete rootProject.buildDir 31 | } 32 | -------------------------------------------------------------------------------- /android/gradle.properties: -------------------------------------------------------------------------------- 1 | org.gradle.jvmargs=-Xmx1536M 2 | android.useAndroidX=true 3 | android.enableJetifier=true 4 | -------------------------------------------------------------------------------- /android/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionBase=GRADLE_USER_HOME 2 | distributionPath=wrapper/dists 3 | zipStoreBase=GRADLE_USER_HOME 4 | zipStorePath=wrapper/dists 5 | distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-all.zip 6 | -------------------------------------------------------------------------------- /android/settings.gradle: -------------------------------------------------------------------------------- 1 | include ':app' 2 | 3 | def localPropertiesFile = new File(rootProject.projectDir, "local.properties") 4 | def properties = new Properties() 5 | 6 | assert localPropertiesFile.exists() 7 | localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) } 8 | 9 | def flutterSdkPath = properties.getProperty("flutter.sdk") 10 | assert flutterSdkPath != null, "flutter.sdk not set in local.properties" 11 | apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle" 12 | -------------------------------------------------------------------------------- /assets/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shervinbdndev/Finder/28d6b419a2a349c161104ef1dc0327d41a7fccc0/assets/logo.png -------------------------------------------------------------------------------- /assets/me.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shervinbdndev/Finder/28d6b419a2a349c161104ef1dc0327d41a7fccc0/assets/me.jpg -------------------------------------------------------------------------------- /images/bm1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shervinbdndev/Finder/28d6b419a2a349c161104ef1dc0327d41a7fccc0/images/bm1.png -------------------------------------------------------------------------------- /images/bm2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shervinbdndev/Finder/28d6b419a2a349c161104ef1dc0327d41a7fccc0/images/bm2.png -------------------------------------------------------------------------------- /images/dm1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shervinbdndev/Finder/28d6b419a2a349c161104ef1dc0327d41a7fccc0/images/dm1.png -------------------------------------------------------------------------------- /images/dm2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/shervinbdndev/Finder/28d6b419a2a349c161104ef1dc0327d41a7fccc0/images/dm2.png -------------------------------------------------------------------------------- /lib/colors/color.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class FinderColors { 4 | // static const Color themePurple = Color(0xff800080); 5 | static const Color themePurple = Colors.deepPurple; 6 | static const Color lightGreen = Color(0xff9EDAB1); 7 | static const Color darkGreen = Color(0xff2C643D); 8 | static const Color lightRed = Color.fromRGBO(239, 154, 154, 1); 9 | static const Color darkRed = Color.fromRGBO(198, 40, 40, 1); 10 | static const Color grey = Color.fromARGB(255, 124, 123, 123); 11 | } 12 | -------------------------------------------------------------------------------- /lib/constants/platform_urls.dart: -------------------------------------------------------------------------------- 1 | const String github = 'https://github.com'; 2 | const String reddit = 'https://reddit.com'; 3 | const String pypi = 'https://pypi.org'; 4 | const String linkedin = 'https://linkedin.com'; 5 | const String instagram = 'https://instagram.com'; 6 | -------------------------------------------------------------------------------- /lib/main.dart: -------------------------------------------------------------------------------- 1 | import 'dart:io'; 2 | import 'package:flutter/material.dart'; 3 | import 'package:provider/provider.dart'; 4 | import 'package:finder/pages/main_page.dart'; 5 | import 'package:internet_connection_checker/internet_connection_checker.dart'; 6 | 7 | void main() { 8 | WidgetsFlutterBinding.ensureInitialized(); 9 | if (Platform.isAndroid) { 10 | runApp(const MyApp()); 11 | } else { 12 | exit(0); 13 | } 14 | } 15 | 16 | class MyApp extends StatelessWidget { 17 | const MyApp({super.key}); 18 | 19 | @override 20 | Widget build(BuildContext context) { 21 | return StreamProvider( 22 | create: (_) { 23 | return InternetConnectionChecker().onStatusChange; 24 | }, 25 | initialData: InternetConnectionStatus.connected, 26 | child: MaterialApp( 27 | title: 'Finder', 28 | debugShowCheckedModeBanner: !true, 29 | theme: ThemeData(brightness: Brightness.light), 30 | darkTheme: ThemeData(brightness: Brightness.dark), 31 | home: const Finder(), 32 | ), 33 | ); 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /lib/pages/about_page.dart: -------------------------------------------------------------------------------- 1 | import 'dart:io'; 2 | import 'package:flutter/material.dart'; 3 | import 'package:finder/colors/color.dart'; 4 | import 'package:finder/pages/main_page.dart'; 5 | import 'package:finder/widget/finder_appbar.dart'; 6 | import 'package:finder/widget/finder_list_tile.dart'; 7 | import 'package:finder/widget/finder_text_font.dart'; 8 | import 'package:finder/widget/finder_about_image.dart'; 9 | import 'package:finder/widget/finder_drawer_header.dart'; 10 | import 'package:finder/widget/finder_about_textinfo.dart'; 11 | import 'package:font_awesome_flutter/font_awesome_flutter.dart'; 12 | 13 | class FinderAboutPage extends StatelessWidget { 14 | const FinderAboutPage({super.key}); 15 | 16 | @override 17 | Widget build(BuildContext context) { 18 | return Scaffold( 19 | resizeToAvoidBottomInset: false, 20 | appBar: const FinderAppbar(), 21 | drawer: Drawer( 22 | child: ListView( 23 | padding: const EdgeInsets.all(2.0), 24 | children: [ 25 | const FinderDrawerHeader(), 26 | FinderListTile( 27 | icon: const FaIcon( 28 | FontAwesomeIcons.house, 29 | size: 20.0, 30 | color: FinderColors.grey, 31 | ), 32 | text: const FinderTextFont( 33 | text: 'Home', 34 | fontSize: 20.0, 35 | fontColor: FinderColors.grey, 36 | weight: FontWeight.normal, 37 | ), 38 | ontap: () { 39 | Navigator.push( 40 | context, 41 | MaterialPageRoute( 42 | builder: (context) => const Finder(), 43 | ), 44 | ); 45 | }, 46 | ), 47 | FinderListTile( 48 | icon: const FaIcon( 49 | FontAwesomeIcons.circleInfo, 50 | size: 20.0, 51 | color: FinderColors.themePurple, 52 | ), 53 | text: const FinderTextFont( 54 | text: 'About', 55 | fontSize: 20.0, 56 | fontColor: FinderColors.themePurple, 57 | weight: FontWeight.normal, 58 | ), 59 | ontap: () { 60 | Navigator.push( 61 | context, 62 | MaterialPageRoute( 63 | builder: (context) => const FinderAboutPage(), 64 | ), 65 | ); 66 | }, 67 | ), 68 | FinderListTile( 69 | icon: const FaIcon( 70 | FontAwesomeIcons.outdent, 71 | size: 20.0, 72 | color: FinderColors.grey, 73 | ), 74 | text: const FinderTextFont( 75 | text: 'Exit', 76 | fontSize: 20.0, 77 | fontColor: FinderColors.grey, 78 | weight: FontWeight.normal, 79 | ), 80 | ontap: () { 81 | exit(0); 82 | }, 83 | ), 84 | ], 85 | ), 86 | ), 87 | body: Center( 88 | child: Column( 89 | mainAxisAlignment: MainAxisAlignment.center, 90 | children: const [ 91 | FinderAboutImage(), 92 | Padding( 93 | padding: EdgeInsets.only(top: 30.0), 94 | child: FinderAboutTextInfo(), 95 | ), 96 | ], 97 | ), 98 | ), 99 | ); 100 | } 101 | } 102 | -------------------------------------------------------------------------------- /lib/pages/main_page.dart: -------------------------------------------------------------------------------- 1 | import 'dart:io'; 2 | import 'package:http/http.dart' as http; 3 | import 'package:flutter/material.dart'; 4 | import 'package:provider/provider.dart'; 5 | import 'package:finder/colors/color.dart'; 6 | import 'package:finder/pages/about_page.dart'; 7 | import 'package:finder/widget/finder_logo.dart'; 8 | import 'package:finder/widget/finder_appbar.dart'; 9 | import 'package:finder/constants/platform_urls.dart'; 10 | import 'package:finder/widget/finder_textfield.dart'; 11 | import 'package:finder/widget/finder_list_tile.dart'; 12 | import 'package:finder/widget/finder_text_font.dart'; 13 | import 'package:http_status_code/http_status_code.dart'; 14 | import 'package:finder/widget/finder_platform_box.dart'; 15 | import 'package:finder/widget/finder_drawer_header.dart'; 16 | import 'package:font_awesome_flutter/font_awesome_flutter.dart'; 17 | import 'package:internet_connection_checker/internet_connection_checker.dart'; 18 | 19 | class Finder extends StatefulWidget { 20 | const Finder({super.key}); 21 | 22 | @override 23 | State createState() => _FinderState(); 24 | } 25 | 26 | class _FinderState extends State { 27 | final TextEditingController _controller = TextEditingController(); 28 | 29 | FinderPlatformBox gitContainer = FinderPlatformBox( 30 | backgroundColor: Colors.white, 31 | color: FinderColors.grey, 32 | icon: FontAwesomeIcons.github, 33 | statusIcon: FontAwesomeIcons.circleInfo, 34 | text: 'Github', 35 | ); 36 | 37 | FinderPlatformBox pypiContainer = FinderPlatformBox( 38 | backgroundColor: Colors.white, 39 | color: FinderColors.grey, 40 | icon: FontAwesomeIcons.python, 41 | statusIcon: FontAwesomeIcons.circleInfo, 42 | text: 'Pypi', 43 | ); 44 | 45 | FinderPlatformBox redditContainer = FinderPlatformBox( 46 | backgroundColor: Colors.white, 47 | color: FinderColors.grey, 48 | icon: FontAwesomeIcons.redditAlien, 49 | statusIcon: FontAwesomeIcons.circleInfo, 50 | text: 'Reddit', 51 | ); 52 | 53 | FinderPlatformBox linkedinContainer = FinderPlatformBox( 54 | backgroundColor: Colors.white, 55 | color: FinderColors.grey, 56 | icon: FontAwesomeIcons.linkedin, 57 | statusIcon: FontAwesomeIcons.circleInfo, 58 | text: 'Linkedin', 59 | ); 60 | 61 | FinderPlatformBox instagramContainer = FinderPlatformBox( 62 | backgroundColor: Colors.white, 63 | color: FinderColors.grey, 64 | icon: FontAwesomeIcons.instagram, 65 | statusIcon: FontAwesomeIcons.circleInfo, 66 | text: 'Instagram', 67 | ); 68 | 69 | @override 70 | Widget build(BuildContext context) { 71 | return Scaffold( 72 | resizeToAvoidBottomInset: false, 73 | appBar: const FinderAppbar(), 74 | drawer: Drawer( 75 | child: ListView( 76 | padding: const EdgeInsets.all(2.0), 77 | children: [ 78 | const FinderDrawerHeader(), 79 | FinderListTile( 80 | icon: const FaIcon( 81 | FontAwesomeIcons.house, 82 | size: 20.0, 83 | color: FinderColors.themePurple, 84 | ), 85 | text: const FinderTextFont( 86 | text: 'Home', 87 | fontSize: 20.0, 88 | fontColor: FinderColors.themePurple, 89 | weight: FontWeight.normal, 90 | ), 91 | ontap: () { 92 | Navigator.push( 93 | context, 94 | MaterialPageRoute( 95 | builder: (context) => const Finder(), 96 | ), 97 | ); 98 | }, 99 | ), 100 | FinderListTile( 101 | icon: const FaIcon( 102 | FontAwesomeIcons.circleInfo, 103 | size: 20.0, 104 | color: FinderColors.grey, 105 | ), 106 | text: const FinderTextFont( 107 | text: 'About', 108 | fontSize: 20.0, 109 | fontColor: FinderColors.grey, 110 | weight: FontWeight.normal, 111 | ), 112 | ontap: () { 113 | Navigator.push( 114 | context, 115 | MaterialPageRoute( 116 | builder: (context) => const FinderAboutPage(), 117 | ), 118 | ); 119 | }, 120 | ), 121 | FinderListTile( 122 | icon: const FaIcon( 123 | FontAwesomeIcons.outdent, 124 | size: 20.0, 125 | color: FinderColors.grey, 126 | ), 127 | text: const FinderTextFont( 128 | text: 'Exit', 129 | fontSize: 20.0, 130 | fontColor: FinderColors.grey, 131 | weight: FontWeight.normal, 132 | ), 133 | ontap: () { 134 | exit(0); 135 | }, 136 | ), 137 | ], 138 | ), 139 | ), 140 | body: SafeArea( 141 | child: Column( 142 | crossAxisAlignment: CrossAxisAlignment.center, 143 | children: [ 144 | Padding( 145 | padding: const EdgeInsets.only(top: 50.0), 146 | child: Row( 147 | mainAxisAlignment: MainAxisAlignment.center, 148 | children: const [ 149 | FinderLogo( 150 | width: 150.0, 151 | height: 150.0, 152 | ), 153 | ], 154 | ), 155 | ), 156 | Padding( 157 | padding: const EdgeInsets.only(top: 40.0), 158 | child: FinderTextField( 159 | controller: _controller, 160 | ontap: () async { 161 | var username = _controller.text; 162 | var githubResult = 163 | await http.get(Uri.parse('$github/$username')); 164 | var pypiResult = 165 | await http.get(Uri.parse('$pypi/user/$username')); 166 | // var instagramResult = 167 | // await http.get(Uri.parse('$instagram/$username')); 168 | // var redditResult = 169 | // await http.get(Uri.parse('$reddit/user/$username')); 170 | if (githubResult.statusCode == StatusCode.OK) { 171 | setState(() { 172 | gitContainer = const FinderPlatformBox( 173 | backgroundColor: FinderColors.lightGreen, 174 | color: FinderColors.darkGreen, 175 | icon: FontAwesomeIcons.github, 176 | statusIcon: FontAwesomeIcons.check, 177 | text: 'Github', 178 | ); 179 | }); 180 | } else if (githubResult.statusCode == 181 | StatusCode.NOT_FOUND) { 182 | setState(() { 183 | gitContainer = const FinderPlatformBox( 184 | backgroundColor: FinderColors.lightRed, 185 | color: FinderColors.darkRed, 186 | icon: FontAwesomeIcons.github, 187 | statusIcon: FontAwesomeIcons.xmark, 188 | text: 'Github', 189 | ); 190 | }); 191 | } 192 | if (pypiResult.statusCode == StatusCode.OK) { 193 | setState(() { 194 | pypiContainer = const FinderPlatformBox( 195 | backgroundColor: FinderColors.lightGreen, 196 | color: FinderColors.darkGreen, 197 | icon: FontAwesomeIcons.python, 198 | statusIcon: FontAwesomeIcons.check, 199 | text: 'Pypi', 200 | ); 201 | }); 202 | } else if (pypiResult.statusCode == StatusCode.NOT_FOUND) { 203 | setState(() { 204 | pypiContainer = const FinderPlatformBox( 205 | backgroundColor: FinderColors.lightRed, 206 | color: FinderColors.darkRed, 207 | icon: FontAwesomeIcons.python, 208 | statusIcon: FontAwesomeIcons.xmark, 209 | text: 'Pypi', 210 | ); 211 | }); 212 | } 213 | // if (instagramResult.statusCode == StatusCode.OK) { 214 | // setState(() { 215 | // instagramContainer = const FinderPlatformBox( 216 | // backgroundColor: FinderColors.lightGreen, 217 | // color: FinderColors.darkGreen, 218 | // icon: FontAwesomeIcons.python, 219 | // statusIcon: FontAwesomeIcons.check, 220 | // text: 'Instagram', 221 | // ); 222 | // }); 223 | // } else if (instagramResult.statusCode == 224 | // StatusCode.NOT_FOUND) { 225 | // setState(() { 226 | // instagramContainer = const FinderPlatformBox( 227 | // backgroundColor: FinderColors.lightRed, 228 | // color: FinderColors.darkRed, 229 | // icon: FontAwesomeIcons.python, 230 | // statusIcon: FontAwesomeIcons.xmark, 231 | // text: 'Instagram', 232 | // ); 233 | // }); 234 | // } 235 | // if (redditResult.statusCode == StatusCode.OK) { 236 | // setState(() { 237 | // redditContainer = const FinderPlatformBox( 238 | // backgroundColor: FinderColors.lightGreen, 239 | // color: FinderColors.darkGreen, 240 | // icon: FontAwesomeIcons.redditAlien, 241 | // statusIcon: FontAwesomeIcons.check, 242 | // text: 'Reddit', 243 | // ); 244 | // }); 245 | // } else if (redditResult.statusCode == StatusCode.NOT_FOUND) { 246 | // setState(() { 247 | // redditContainer = const FinderPlatformBox( 248 | // backgroundColor: FinderColors.lightRed, 249 | // color: FinderColors.darkRed, 250 | // icon: FontAwesomeIcons.redditAlien, 251 | // statusIcon: FontAwesomeIcons.xmark, 252 | // text: 'Reddit', 253 | // ); 254 | // }); 255 | // } 256 | }), 257 | ), 258 | Padding( 259 | padding: const EdgeInsets.only(top: 40.0), 260 | child: Column( 261 | children: [ 262 | Row( 263 | mainAxisAlignment: MainAxisAlignment.spaceAround, 264 | crossAxisAlignment: CrossAxisAlignment.center, 265 | children: [ 266 | redditContainer, 267 | instagramContainer, 268 | ], 269 | ), 270 | const SizedBox(height: 10.0), 271 | Row( 272 | mainAxisAlignment: MainAxisAlignment.spaceAround, 273 | crossAxisAlignment: CrossAxisAlignment.center, 274 | children: [ 275 | gitContainer, 276 | pypiContainer, 277 | ], 278 | ), 279 | const SizedBox(height: 10.0), 280 | Row( 281 | mainAxisAlignment: MainAxisAlignment.spaceAround, 282 | crossAxisAlignment: CrossAxisAlignment.center, 283 | children: [ 284 | const FinderPlatformBox( 285 | backgroundColor: Colors.white, 286 | color: FinderColors.grey, 287 | icon: FontAwesomeIcons.twitter, 288 | statusIcon: FontAwesomeIcons.circleInfo, 289 | text: 'Twitter', 290 | ), 291 | linkedinContainer, 292 | ], 293 | ), 294 | ], 295 | ), 296 | ), 297 | Provider.of(context) == 298 | InternetConnectionStatus.disconnected 299 | ? const Padding( 300 | padding: EdgeInsets.only(top: 85.0), 301 | child: FinderTextFont( 302 | text: 'Not Connected', 303 | fontSize: 20.0, 304 | fontColor: FinderColors.darkRed, 305 | weight: FontWeight.bold, 306 | ), 307 | ) 308 | : const Padding( 309 | padding: EdgeInsets.only(top: 85.0), 310 | child: FinderTextFont( 311 | text: 'Connected', 312 | fontSize: 20.0, 313 | fontColor: FinderColors.darkGreen, 314 | weight: FontWeight.bold, 315 | ), 316 | ), 317 | ], 318 | ), 319 | ), 320 | ); 321 | } 322 | } 323 | -------------------------------------------------------------------------------- /lib/widget/finder_about_image.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:finder/colors/color.dart'; 3 | 4 | class FinderAboutImage extends StatelessWidget { 5 | const FinderAboutImage({super.key}); 6 | 7 | @override 8 | Widget build(BuildContext context) { 9 | return Container( 10 | decoration: BoxDecoration( 11 | borderRadius: BorderRadius.circular(100.0), 12 | border: Border.all( 13 | color: FinderColors.themePurple, 14 | width: 4.0, 15 | ), 16 | ), 17 | child: ClipRRect( 18 | borderRadius: BorderRadius.circular(100.0), 19 | child: Image.asset( 20 | 'assets/me.jpg', 21 | fit: BoxFit.cover, 22 | scale: 12.0, 23 | ), 24 | ), 25 | ); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /lib/widget/finder_about_textinfo.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:finder/colors/color.dart'; 3 | import 'package:url_launcher/url_launcher.dart'; 4 | import 'package:finder/constants/platform_urls.dart'; 5 | import 'package:finder/widget/finder_text_font.dart'; 6 | 7 | class FinderAboutTextInfo extends StatelessWidget { 8 | const FinderAboutTextInfo({super.key}); 9 | 10 | @override 11 | Widget build(BuildContext context) { 12 | var brightness = MediaQuery.of(context).platformBrightness; 13 | 14 | return SizedBox( 15 | width: double.infinity, 16 | child: Column( 17 | mainAxisAlignment: MainAxisAlignment.center, 18 | crossAxisAlignment: CrossAxisAlignment.center, 19 | children: [ 20 | Row( 21 | mainAxisAlignment: MainAxisAlignment.center, 22 | children: [ 23 | const FinderTextFont( 24 | text: 'Creator:', 25 | fontSize: 25.0, 26 | fontColor: FinderColors.themePurple, 27 | weight: FontWeight.bold, 28 | ), 29 | const SizedBox(width: 10.0), 30 | FinderTextFont( 31 | text: 'Shervin Badanara', 32 | fontSize: 20.0, 33 | fontColor: 34 | brightness == Brightness.dark ? Colors.white : Colors.black, 35 | weight: FontWeight.normal, 36 | ), 37 | ], 38 | ), 39 | const SizedBox(height: 20.0), 40 | Row( 41 | mainAxisAlignment: MainAxisAlignment.center, 42 | children: [ 43 | const FinderTextFont( 44 | text: 'Github:', 45 | fontSize: 25.0, 46 | fontColor: FinderColors.themePurple, 47 | weight: FontWeight.bold, 48 | ), 49 | const SizedBox(width: 10.0), 50 | Material( 51 | color: Colors.transparent, 52 | child: InkWell( 53 | onTap: () async { 54 | await launchUrl( 55 | Uri.parse('$github/shervinbdndev/'), 56 | ); 57 | }, 58 | child: FinderTextFont( 59 | text: '@shervinbdndev', 60 | fontSize: 20.0, 61 | fontColor: brightness == Brightness.dark 62 | ? Colors.white 63 | : Colors.black, 64 | weight: FontWeight.normal, 65 | ), 66 | ), 67 | ), 68 | ], 69 | ), 70 | ], 71 | ), 72 | ); 73 | } 74 | } 75 | -------------------------------------------------------------------------------- /lib/widget/finder_appbar.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:finder/colors/color.dart'; 3 | import 'package:finder/widget/finder_text_font.dart'; 4 | 5 | class FinderAppbar extends StatelessWidget implements PreferredSizeWidget { 6 | const FinderAppbar({super.key}); 7 | 8 | @override 9 | Size get preferredSize => const Size.fromHeight(60.0); 10 | 11 | @override 12 | Widget build(BuildContext context) { 13 | return AppBar( 14 | backgroundColor: FinderColors.themePurple, 15 | title: const FinderTextFont( 16 | text: 'Finder', 17 | fontSize: 25.0, 18 | fontColor: Colors.white, 19 | weight: FontWeight.bold, 20 | ), 21 | ); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /lib/widget/finder_drawer_header.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:finder/colors/color.dart'; 3 | import 'package:finder/widget/finder_logo.dart'; 4 | import 'package:finder/widget/finder_text_font.dart'; 5 | 6 | class FinderDrawerHeader extends StatelessWidget { 7 | const FinderDrawerHeader({super.key}); 8 | 9 | @override 10 | Widget build(BuildContext context) { 11 | return DrawerHeader( 12 | child: Row( 13 | children: [ 14 | Column( 15 | mainAxisAlignment: MainAxisAlignment.center, 16 | children: const [ 17 | FinderTextFont( 18 | text: 'Finder', 19 | fontSize: 40.0, 20 | fontColor: FinderColors.themePurple, 21 | weight: FontWeight.bold, 22 | ), 23 | SizedBox(height: 0.5), 24 | Padding( 25 | padding: EdgeInsets.only(right: 58.0), 26 | child: FinderTextFont( 27 | text: 'Version 1.0.0', 28 | fontSize: 10.0, 29 | fontColor: FinderColors.themePurple, 30 | weight: FontWeight.bold, 31 | ), 32 | ), 33 | ], 34 | ), 35 | const SizedBox(width: 8.0), 36 | const FinderLogo( 37 | width: 50.0, 38 | height: 50.0, 39 | ), 40 | ], 41 | ), 42 | ); 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /lib/widget/finder_list_tile.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class FinderListTile extends StatelessWidget { 4 | final Widget icon; 5 | final Widget text; 6 | final VoidCallback ontap; 7 | 8 | const FinderListTile({ 9 | Key? key, 10 | required this.icon, 11 | required this.text, 12 | required this.ontap, 13 | }) : super(key: key); 14 | 15 | @override 16 | Widget build(BuildContext context) { 17 | return ListTile( 18 | leading: icon, 19 | title: text, 20 | onTap: ontap, 21 | ); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /lib/widget/finder_logo.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | 3 | class FinderLogo extends StatelessWidget { 4 | final double width; 5 | final double height; 6 | 7 | const FinderLogo({ 8 | super.key, 9 | required this.width, 10 | required this.height, 11 | }); 12 | 13 | @override 14 | Widget build(BuildContext context) { 15 | return Transform.rotate( 16 | angle: 1.5, 17 | child: SizedBox( 18 | width: width, 19 | height: height, 20 | child: Image.asset( 21 | 'assets/logo.png', 22 | ), 23 | ), 24 | ); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /lib/widget/finder_platform_box.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:finder/widget/finder_text_font.dart'; 3 | import 'package:font_awesome_flutter/font_awesome_flutter.dart'; 4 | 5 | class FinderPlatformBox extends StatelessWidget { 6 | final Color backgroundColor; 7 | final IconData icon; 8 | final Color color; 9 | final String text; 10 | final IconData statusIcon; 11 | 12 | const FinderPlatformBox({ 13 | Key? key, 14 | required this.backgroundColor, 15 | required this.icon, 16 | required this.color, 17 | required this.text, 18 | required this.statusIcon, 19 | }) : super(key: key); 20 | 21 | @override 22 | Widget build(BuildContext context) { 23 | return Container( 24 | width: 175.0, 25 | height: 50, 26 | decoration: BoxDecoration( 27 | color: backgroundColor, 28 | border: Border.all( 29 | width: 2.0, 30 | color: color, 31 | ), 32 | borderRadius: BorderRadius.circular(8.0), 33 | ), 34 | child: Stack( 35 | alignment: Alignment.centerLeft, 36 | children: [ 37 | Padding( 38 | padding: const EdgeInsets.only(left: 10.0), 39 | child: Row( 40 | children: [ 41 | FaIcon( 42 | icon, 43 | color: color, 44 | ), 45 | const SizedBox(width: 5.0), 46 | FinderTextFont( 47 | text: text, 48 | fontSize: 13.0, 49 | fontColor: color, 50 | weight: FontWeight.normal, 51 | ) 52 | ], 53 | ), 54 | ), 55 | Row( 56 | mainAxisAlignment: MainAxisAlignment.end, 57 | children: [ 58 | Padding( 59 | padding: const EdgeInsets.only(right: 10.0), 60 | child: FaIcon( 61 | statusIcon, 62 | color: color, 63 | size: 20.0, 64 | ), 65 | ), 66 | ], 67 | ), 68 | ], 69 | ), 70 | ); 71 | } 72 | } 73 | -------------------------------------------------------------------------------- /lib/widget/finder_text_font.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:google_fonts/google_fonts.dart'; 3 | 4 | class FinderTextFont extends StatelessWidget { 5 | final String text; 6 | final double fontSize; 7 | final Color fontColor; 8 | final FontWeight weight; 9 | 10 | const FinderTextFont({ 11 | Key? key, 12 | required this.text, 13 | required this.fontSize, 14 | required this.fontColor, 15 | required this.weight, 16 | }) : super(key: key); 17 | 18 | @override 19 | Widget build(BuildContext context) { 20 | return Text( 21 | text, 22 | style: GoogleFonts.aldrich( 23 | textStyle: TextStyle( 24 | fontSize: fontSize, 25 | color: fontColor, 26 | fontWeight: weight, 27 | ), 28 | ), 29 | ); 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /lib/widget/finder_textfield.dart: -------------------------------------------------------------------------------- 1 | import 'package:flutter/material.dart'; 2 | import 'package:google_fonts/google_fonts.dart'; 3 | import 'package:finder/colors/color.dart'; 4 | 5 | class FinderTextField extends StatelessWidget { 6 | final TextEditingController controller; 7 | final VoidCallback ontap; 8 | 9 | const FinderTextField({ 10 | super.key, 11 | required this.controller, 12 | required this.ontap, 13 | }); 14 | 15 | @override 16 | Widget build(BuildContext context) { 17 | return SizedBox( 18 | width: 370.0, 19 | height: 60, 20 | child: TextField( 21 | controller: controller, 22 | style: GoogleFonts.aldrich( 23 | color: FinderColors.grey, 24 | fontWeight: FontWeight.normal, 25 | fontSize: 15.0, 26 | ), 27 | cursorColor: FinderColors.themePurple, 28 | textAlign: TextAlign.left, 29 | decoration: InputDecoration( 30 | enabledBorder: OutlineInputBorder( 31 | gapPadding: 0.0, 32 | borderRadius: BorderRadius.circular(8.0), 33 | borderSide: const BorderSide( 34 | width: 2.0, 35 | color: FinderColors.themePurple, 36 | ), 37 | ), 38 | focusedBorder: OutlineInputBorder( 39 | borderRadius: BorderRadius.circular(8.0), 40 | borderSide: const BorderSide( 41 | width: 2.0, 42 | color: FinderColors.themePurple, 43 | ), 44 | ), 45 | hintText: 'Enter the ID you want to find . . .', 46 | hintStyle: GoogleFonts.aldrich( 47 | color: FinderColors.grey, 48 | fontWeight: FontWeight.normal, 49 | fontSize: 13.0, 50 | ), 51 | isDense: true, 52 | prefixIcon: Padding( 53 | padding: const EdgeInsets.only( 54 | top: 10.0, 55 | left: 10.0, 56 | ), 57 | child: Text( 58 | '@ ', 59 | style: GoogleFonts.aldrich( 60 | color: FinderColors.grey, 61 | fontWeight: FontWeight.normal, 62 | fontSize: 25.0, 63 | ), 64 | ), 65 | ), 66 | suffixIcon: Container( 67 | height: 5.0, 68 | width: 5.0, 69 | decoration: BoxDecoration( 70 | borderRadius: BorderRadius.circular(6.0), 71 | color: FinderColors.themePurple, 72 | ), 73 | child: Material( 74 | color: Colors.transparent, 75 | child: InkWell( 76 | onTap: ontap, 77 | child: const Icon( 78 | Icons.search, 79 | color: Colors.white, 80 | size: 25.0, 81 | ), 82 | ), 83 | ), 84 | ), 85 | ), 86 | ), 87 | ); 88 | } 89 | } 90 | -------------------------------------------------------------------------------- /pubspec.lock: -------------------------------------------------------------------------------- 1 | # Generated by pub 2 | # See https://dart.dev/tools/pub/glossary#lockfile 3 | packages: 4 | archive: 5 | dependency: transitive 6 | description: 7 | name: archive 8 | sha256: ed7cc591a948744994714375caf9a2ce89e1d82e8243997c8a2994d57181c212 9 | url: "https://pub.dev" 10 | source: hosted 11 | version: "3.3.5" 12 | args: 13 | dependency: transitive 14 | description: 15 | name: args 16 | sha256: b003c3098049a51720352d219b0bb5f219b60fbfb68e7a4748139a06a5676515 17 | url: "https://pub.dev" 18 | source: hosted 19 | version: "2.3.1" 20 | async: 21 | dependency: transitive 22 | description: 23 | name: async 24 | sha256: bfe67ef28df125b7dddcea62755991f807aa39a2492a23e1550161692950bbe0 25 | url: "https://pub.dev" 26 | source: hosted 27 | version: "2.10.0" 28 | boolean_selector: 29 | dependency: transitive 30 | description: 31 | name: boolean_selector 32 | sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66" 33 | url: "https://pub.dev" 34 | source: hosted 35 | version: "2.1.1" 36 | characters: 37 | dependency: transitive 38 | description: 39 | name: characters 40 | sha256: e6a326c8af69605aec75ed6c187d06b349707a27fbff8222ca9cc2cff167975c 41 | url: "https://pub.dev" 42 | source: hosted 43 | version: "1.2.1" 44 | checked_yaml: 45 | dependency: transitive 46 | description: 47 | name: checked_yaml 48 | sha256: dd007e4fb8270916820a0d66e24f619266b60773cddd082c6439341645af2659 49 | url: "https://pub.dev" 50 | source: hosted 51 | version: "2.0.1" 52 | cli_util: 53 | dependency: transitive 54 | description: 55 | name: cli_util 56 | sha256: "66f86e916d285c1a93d3b79587d94bd71984a66aac4ff74e524cfa7877f1395c" 57 | url: "https://pub.dev" 58 | source: hosted 59 | version: "0.3.5" 60 | clock: 61 | dependency: transitive 62 | description: 63 | name: clock 64 | sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf 65 | url: "https://pub.dev" 66 | source: hosted 67 | version: "1.1.1" 68 | collection: 69 | dependency: transitive 70 | description: 71 | name: collection 72 | sha256: cfc915e6923fe5ce6e153b0723c753045de46de1b4d63771530504004a45fae0 73 | url: "https://pub.dev" 74 | source: hosted 75 | version: "1.17.0" 76 | convert: 77 | dependency: transitive 78 | description: 79 | name: convert 80 | sha256: "0f08b14755d163f6e2134cb58222dd25ea2a2ee8a195e53983d57c075324d592" 81 | url: "https://pub.dev" 82 | source: hosted 83 | version: "3.1.1" 84 | crypto: 85 | dependency: transitive 86 | description: 87 | name: crypto 88 | sha256: aa274aa7774f8964e4f4f38cc994db7b6158dd36e9187aaceaddc994b35c6c67 89 | url: "https://pub.dev" 90 | source: hosted 91 | version: "3.0.2" 92 | cupertino_icons: 93 | dependency: "direct main" 94 | description: 95 | name: cupertino_icons 96 | sha256: e35129dc44c9118cee2a5603506d823bab99c68393879edb440e0090d07586be 97 | url: "https://pub.dev" 98 | source: hosted 99 | version: "1.0.5" 100 | fake_async: 101 | dependency: transitive 102 | description: 103 | name: fake_async 104 | sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78" 105 | url: "https://pub.dev" 106 | source: hosted 107 | version: "1.3.1" 108 | ffi: 109 | dependency: transitive 110 | description: 111 | name: ffi 112 | sha256: a38574032c5f1dd06c4aee541789906c12ccaab8ba01446e800d9c5b79c4a978 113 | url: "https://pub.dev" 114 | source: hosted 115 | version: "2.0.1" 116 | file: 117 | dependency: transitive 118 | description: 119 | name: file 120 | sha256: "1b92bec4fc2a72f59a8e15af5f52cd441e4a7860b49499d69dfa817af20e925d" 121 | url: "https://pub.dev" 122 | source: hosted 123 | version: "6.1.4" 124 | flutter: 125 | dependency: "direct main" 126 | description: flutter 127 | source: sdk 128 | version: "0.0.0" 129 | flutter_launcher_icons: 130 | dependency: "direct dev" 131 | description: 132 | name: flutter_launcher_icons 133 | sha256: ce0e501cfc258907842238e4ca605e74b7fd1cdf04b3b43e86c43f3e40a1592c 134 | url: "https://pub.dev" 135 | source: hosted 136 | version: "0.11.0" 137 | flutter_lints: 138 | dependency: "direct main" 139 | description: 140 | name: flutter_lints 141 | sha256: aeb0b80a8b3709709c9cc496cdc027c5b3216796bc0af0ce1007eaf24464fd4c 142 | url: "https://pub.dev" 143 | source: hosted 144 | version: "2.0.1" 145 | flutter_test: 146 | dependency: "direct dev" 147 | description: flutter 148 | source: sdk 149 | version: "0.0.0" 150 | flutter_web_plugins: 151 | dependency: transitive 152 | description: flutter 153 | source: sdk 154 | version: "0.0.0" 155 | font_awesome_flutter: 156 | dependency: "direct main" 157 | description: 158 | name: font_awesome_flutter 159 | sha256: "875dbb9ec1ad30d68102019ceb682760d06c72747c1c5b7885781b95f88569cc" 160 | url: "https://pub.dev" 161 | source: hosted 162 | version: "10.3.0" 163 | google_fonts: 164 | dependency: "direct main" 165 | description: 166 | name: google_fonts 167 | sha256: "8f099045e2f2a30e4d4d0a35f40c6bc941a8f2ca0e10ad9d214ee9edd3f37483" 168 | url: "https://pub.dev" 169 | source: hosted 170 | version: "3.0.1" 171 | http: 172 | dependency: "direct main" 173 | description: 174 | name: http 175 | sha256: "6aa2946395183537c8b880962d935877325d6a09a2867c3970c05c0fed6ac482" 176 | url: "https://pub.dev" 177 | source: hosted 178 | version: "0.13.5" 179 | http_parser: 180 | dependency: transitive 181 | description: 182 | name: http_parser 183 | sha256: "2aa08ce0341cc9b354a498388e30986515406668dbcc4f7c950c3e715496693b" 184 | url: "https://pub.dev" 185 | source: hosted 186 | version: "4.0.2" 187 | http_status_code: 188 | dependency: "direct main" 189 | description: 190 | name: http_status_code 191 | sha256: "052b42add019380f060cbf9cc9669b6831ca7e0244c925c520de8c1867dd139d" 192 | url: "https://pub.dev" 193 | source: hosted 194 | version: "0.0.2" 195 | image: 196 | dependency: transitive 197 | description: 198 | name: image 199 | sha256: f6ffe2895e3c86c6ad5a27e6302cf807403463e397cb2f0c580f619ac2fa588b 200 | url: "https://pub.dev" 201 | source: hosted 202 | version: "3.2.2" 203 | internet_connection_checker: 204 | dependency: "direct main" 205 | description: 206 | name: internet_connection_checker 207 | sha256: "1c683e63e89c9ac66a40748b1b20889fd9804980da732bf2b58d6d5456c8e876" 208 | url: "https://pub.dev" 209 | source: hosted 210 | version: "1.0.0+1" 211 | js: 212 | dependency: transitive 213 | description: 214 | name: js 215 | sha256: "5528c2f391ededb7775ec1daa69e65a2d61276f7552de2b5f7b8d34ee9fd4ab7" 216 | url: "https://pub.dev" 217 | source: hosted 218 | version: "0.6.5" 219 | json_annotation: 220 | dependency: transitive 221 | description: 222 | name: json_annotation 223 | sha256: "3520fa844009431b5d4491a5a778603520cdc399ab3406332dcc50f93547258c" 224 | url: "https://pub.dev" 225 | source: hosted 226 | version: "4.7.0" 227 | lints: 228 | dependency: transitive 229 | description: 230 | name: lints 231 | sha256: "5e4a9cd06d447758280a8ac2405101e0e2094d2a1dbdd3756aec3fe7775ba593" 232 | url: "https://pub.dev" 233 | source: hosted 234 | version: "2.0.1" 235 | matcher: 236 | dependency: transitive 237 | description: 238 | name: matcher 239 | sha256: "16db949ceee371e9b99d22f88fa3a73c4e59fd0afed0bd25fc336eb76c198b72" 240 | url: "https://pub.dev" 241 | source: hosted 242 | version: "0.12.13" 243 | material_color_utilities: 244 | dependency: transitive 245 | description: 246 | name: material_color_utilities 247 | sha256: d92141dc6fe1dad30722f9aa826c7fbc896d021d792f80678280601aff8cf724 248 | url: "https://pub.dev" 249 | source: hosted 250 | version: "0.2.0" 251 | meta: 252 | dependency: transitive 253 | description: 254 | name: meta 255 | sha256: "6c268b42ed578a53088d834796959e4a1814b5e9e164f147f580a386e5decf42" 256 | url: "https://pub.dev" 257 | source: hosted 258 | version: "1.8.0" 259 | nested: 260 | dependency: transitive 261 | description: 262 | name: nested 263 | sha256: "03bac4c528c64c95c722ec99280375a6f2fc708eec17c7b3f07253b626cd2a20" 264 | url: "https://pub.dev" 265 | source: hosted 266 | version: "1.0.0" 267 | path: 268 | dependency: transitive 269 | description: 270 | name: path 271 | sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917" 272 | url: "https://pub.dev" 273 | source: hosted 274 | version: "1.8.3" 275 | path_provider: 276 | dependency: transitive 277 | description: 278 | name: path_provider 279 | sha256: "050e8e85e4b7fecdf2bb3682c1c64c4887a183720c802d323de8a5fd76d372dd" 280 | url: "https://pub.dev" 281 | source: hosted 282 | version: "2.0.11" 283 | path_provider_android: 284 | dependency: transitive 285 | description: 286 | name: path_provider_android 287 | sha256: a776c088d671b27f6e3aa8881d64b87b3e80201c64e8869b811325de7a76c15e 288 | url: "https://pub.dev" 289 | source: hosted 290 | version: "2.0.22" 291 | path_provider_ios: 292 | dependency: transitive 293 | description: 294 | name: path_provider_ios 295 | sha256: "03d639406f5343478352433f00d3c4394d52dac8df3d847869c5e2333e0bbce8" 296 | url: "https://pub.dev" 297 | source: hosted 298 | version: "2.0.11" 299 | path_provider_linux: 300 | dependency: transitive 301 | description: 302 | name: path_provider_linux 303 | sha256: ab0987bf95bc591da42dffb38c77398fc43309f0b9b894dcc5d6f40c4b26c379 304 | url: "https://pub.dev" 305 | source: hosted 306 | version: "2.1.7" 307 | path_provider_macos: 308 | dependency: transitive 309 | description: 310 | name: path_provider_macos 311 | sha256: "2a97e7fbb7ae9dcd0dfc1220a78e9ec3e71da691912e617e8715ff2a13086ae8" 312 | url: "https://pub.dev" 313 | source: hosted 314 | version: "2.0.6" 315 | path_provider_platform_interface: 316 | dependency: transitive 317 | description: 318 | name: path_provider_platform_interface 319 | sha256: f0abc8ebd7253741f05488b4813d936b4d07c6bae3e86148a09e342ee4b08e76 320 | url: "https://pub.dev" 321 | source: hosted 322 | version: "2.0.5" 323 | path_provider_windows: 324 | dependency: transitive 325 | description: 326 | name: path_provider_windows 327 | sha256: bcabbe399d4042b8ee687e17548d5d3f527255253b4a639f5f8d2094a9c2b45c 328 | url: "https://pub.dev" 329 | source: hosted 330 | version: "2.1.3" 331 | petitparser: 332 | dependency: transitive 333 | description: 334 | name: petitparser 335 | sha256: "49392a45ced973e8d94a85fdb21293fbb40ba805fc49f2965101ae748a3683b4" 336 | url: "https://pub.dev" 337 | source: hosted 338 | version: "5.1.0" 339 | platform: 340 | dependency: transitive 341 | description: 342 | name: platform 343 | sha256: "4a451831508d7d6ca779f7ac6e212b4023dd5a7d08a27a63da33756410e32b76" 344 | url: "https://pub.dev" 345 | source: hosted 346 | version: "3.1.0" 347 | plugin_platform_interface: 348 | dependency: transitive 349 | description: 350 | name: plugin_platform_interface 351 | sha256: dbf0f707c78beedc9200146ad3cb0ab4d5da13c246336987be6940f026500d3a 352 | url: "https://pub.dev" 353 | source: hosted 354 | version: "2.1.3" 355 | pointycastle: 356 | dependency: transitive 357 | description: 358 | name: pointycastle 359 | sha256: db7306cf0249f838d1a24af52b5a5887c5bf7f31d8bb4e827d071dc0939ad346 360 | url: "https://pub.dev" 361 | source: hosted 362 | version: "3.6.2" 363 | process: 364 | dependency: transitive 365 | description: 366 | name: process 367 | sha256: "53fd8db9cec1d37b0574e12f07520d582019cb6c44abf5479a01505099a34a09" 368 | url: "https://pub.dev" 369 | source: hosted 370 | version: "4.2.4" 371 | provider: 372 | dependency: "direct main" 373 | description: 374 | name: provider 375 | sha256: cdbe7530b12ecd9eb455bdaa2fcb8d4dad22e80b8afb4798b41479d5ce26847f 376 | url: "https://pub.dev" 377 | source: hosted 378 | version: "6.0.5" 379 | sky_engine: 380 | dependency: transitive 381 | description: flutter 382 | source: sdk 383 | version: "0.0.99" 384 | source_span: 385 | dependency: transitive 386 | description: 387 | name: source_span 388 | sha256: dd904f795d4b4f3b870833847c461801f6750a9fa8e61ea5ac53f9422b31f250 389 | url: "https://pub.dev" 390 | source: hosted 391 | version: "1.9.1" 392 | stack_trace: 393 | dependency: transitive 394 | description: 395 | name: stack_trace 396 | sha256: c3c7d8edb15bee7f0f74debd4b9c5f3c2ea86766fe4178eb2a18eb30a0bdaed5 397 | url: "https://pub.dev" 398 | source: hosted 399 | version: "1.11.0" 400 | stream_channel: 401 | dependency: transitive 402 | description: 403 | name: stream_channel 404 | sha256: "83615bee9045c1d322bbbd1ba209b7a749c2cbcdcb3fdd1df8eb488b3279c1c8" 405 | url: "https://pub.dev" 406 | source: hosted 407 | version: "2.1.1" 408 | string_scanner: 409 | dependency: transitive 410 | description: 411 | name: string_scanner 412 | sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde" 413 | url: "https://pub.dev" 414 | source: hosted 415 | version: "1.2.0" 416 | term_glyph: 417 | dependency: transitive 418 | description: 419 | name: term_glyph 420 | sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84 421 | url: "https://pub.dev" 422 | source: hosted 423 | version: "1.2.1" 424 | test_api: 425 | dependency: transitive 426 | description: 427 | name: test_api 428 | sha256: ad540f65f92caa91bf21dfc8ffb8c589d6e4dc0c2267818b4cc2792857706206 429 | url: "https://pub.dev" 430 | source: hosted 431 | version: "0.4.16" 432 | typed_data: 433 | dependency: transitive 434 | description: 435 | name: typed_data 436 | sha256: "26f87ade979c47a150c9eaab93ccd2bebe70a27dc0b4b29517f2904f04eb11a5" 437 | url: "https://pub.dev" 438 | source: hosted 439 | version: "1.3.1" 440 | url_launcher: 441 | dependency: "direct main" 442 | description: 443 | name: url_launcher 444 | sha256: "3c92b0efb5e9dcb8f846aefabf9f0f739f91682ed486b991ceda51c288e60896" 445 | url: "https://pub.dev" 446 | source: hosted 447 | version: "6.1.7" 448 | url_launcher_android: 449 | dependency: transitive 450 | description: 451 | name: url_launcher_android 452 | sha256: "6f91d30ce9060c204b2dbe728adb300750fa4b228e8f7ed1b961aa1ceb728799" 453 | url: "https://pub.dev" 454 | source: hosted 455 | version: "6.0.22" 456 | url_launcher_ios: 457 | dependency: transitive 458 | description: 459 | name: url_launcher_ios 460 | sha256: "6ba7dddee26c9fae27c9203c424631109d73c8fa26cfa7bc3e35e751cb87f62e" 461 | url: "https://pub.dev" 462 | source: hosted 463 | version: "6.0.17" 464 | url_launcher_linux: 465 | dependency: transitive 466 | description: 467 | name: url_launcher_linux 468 | sha256: "360fa359ab06bcb4f7c5cd3123a2a9a4d3364d4575d27c4b33468bd4497dd094" 469 | url: "https://pub.dev" 470 | source: hosted 471 | version: "3.0.1" 472 | url_launcher_macos: 473 | dependency: transitive 474 | description: 475 | name: url_launcher_macos 476 | sha256: a9b3ea9043eabfaadfa3fb89de67a11210d85569086d22b3854484beab8b3978 477 | url: "https://pub.dev" 478 | source: hosted 479 | version: "3.0.1" 480 | url_launcher_platform_interface: 481 | dependency: transitive 482 | description: 483 | name: url_launcher_platform_interface 484 | sha256: "4eae912628763eb48fc214522e58e942fd16ce195407dbf45638239523c759a6" 485 | url: "https://pub.dev" 486 | source: hosted 487 | version: "2.1.1" 488 | url_launcher_web: 489 | dependency: transitive 490 | description: 491 | name: url_launcher_web 492 | sha256: "5669882643b96bb6d5786637cac727c6e918a790053b09245fd4513b8a07df2a" 493 | url: "https://pub.dev" 494 | source: hosted 495 | version: "2.0.13" 496 | url_launcher_windows: 497 | dependency: transitive 498 | description: 499 | name: url_launcher_windows 500 | sha256: e3c3b16d3104260c10eea3b0e34272aaa57921f83148b0619f74c2eced9b7ef1 501 | url: "https://pub.dev" 502 | source: hosted 503 | version: "3.0.1" 504 | vector_math: 505 | dependency: transitive 506 | description: 507 | name: vector_math 508 | sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803" 509 | url: "https://pub.dev" 510 | source: hosted 511 | version: "2.1.4" 512 | win32: 513 | dependency: transitive 514 | description: 515 | name: win32 516 | sha256: ca121dbbadb3e43b449053feab0cdf3f2bff93b107cacf0290e3d29f717374b6 517 | url: "https://pub.dev" 518 | source: hosted 519 | version: "3.1.2" 520 | xdg_directories: 521 | dependency: transitive 522 | description: 523 | name: xdg_directories 524 | sha256: "11541eedefbcaec9de35aa82650b695297ce668662bbd6e3911a7fabdbde589f" 525 | url: "https://pub.dev" 526 | source: hosted 527 | version: "0.2.0+2" 528 | xml: 529 | dependency: transitive 530 | description: 531 | name: xml 532 | sha256: "979ee37d622dec6365e2efa4d906c37470995871fe9ae080d967e192d88286b5" 533 | url: "https://pub.dev" 534 | source: hosted 535 | version: "6.2.2" 536 | yaml: 537 | dependency: transitive 538 | description: 539 | name: yaml 540 | sha256: "23812a9b125b48d4007117254bca50abb6c712352927eece9e155207b1db2370" 541 | url: "https://pub.dev" 542 | source: hosted 543 | version: "3.1.1" 544 | sdks: 545 | dart: ">=3.0.0-19.0.dev <4.0.0" 546 | flutter: ">=3.0.0" 547 | -------------------------------------------------------------------------------- /pubspec.yaml: -------------------------------------------------------------------------------- 1 | name: finder 2 | description: A new Flutter project. 3 | # The following line prevents the package from being accidentally published to 4 | # pub.dev using `flutter pub publish`. This is preferred for private packages. 5 | publish_to: 'none' # Remove this line if you wish to publish to pub.dev 6 | 7 | # The following defines the version and build number for your application. 8 | # A version number is three numbers separated by dots, like 1.2.43 9 | # followed by an optional build number separated by a +. 10 | # Both the version and the builder number may be overridden in flutter 11 | # build by specifying --build-name and --build-number, respectively. 12 | # In Android, build-name is used as versionName while build-number used as versionCode. 13 | # Read more about Android versioning at https://developer.android.com/studio/publish/versioning 14 | # In iOS, build-name is used as CFBundleShortVersionString while build-number is used as CFBundleVersion. 15 | # Read more about iOS versioning at 16 | # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html 17 | # In Windows, build-name is used as the major, minor, and patch parts 18 | # of the product and file versions while build-number is used as the build suffix. 19 | version: 1.0.0+1 20 | 21 | environment: 22 | sdk: '>=3.0.0-19.0.dev <4.0.0' 23 | 24 | # Dependencies specify other packages that your package needs in order to work. 25 | # To automatically upgrade your package dependencies to the latest versions 26 | # consider running `flutter pub upgrade --major-versions`. Alternatively, 27 | # dependencies can be manually updated by changing the version numbers below to 28 | # the latest version available on pub.dev. To see which dependencies have newer 29 | # versions available, run `flutter pub outdated`. 30 | dependencies: 31 | flutter: 32 | sdk: flutter 33 | 34 | 35 | # The following adds the Cupertino Icons font to your application. 36 | # Use with the CupertinoIcons class for iOS style icons. 37 | cupertino_icons: ^1.0.2 38 | http: ^0.13.5 39 | http_status_code: ^0.0.2 40 | google_fonts: ^3.0.1 41 | font_awesome_flutter: ^10.3.0 42 | url_launcher: ^6.1.7 43 | flutter_lints: ^2.0.1 44 | internet_connection_checker: ^1.0.0+1 45 | provider: ^6.0.4 46 | 47 | dev_dependencies: 48 | flutter_test: 49 | sdk: flutter 50 | 51 | flutter_launcher_icons: ^0.11.0 52 | 53 | flutter_icons: 54 | android: true 55 | image_path: "assets/logo.png" 56 | 57 | # The "flutter_lints" package below contains a set of recommended lints to 58 | # encourage good coding practices. The lint set provided by the package is 59 | # activated in the `analysis_options.yaml` file located at the root of your 60 | # package. See that file for information about deactivating specific lint 61 | # rules and activating additional ones. 62 | flutter_lints: ^2.0.0 63 | 64 | # For information on the generic Dart part of this file, see the 65 | # following page: https://dart.dev/tools/pub/pubspec 66 | 67 | # The following section is specific to Flutter packages. 68 | flutter: 69 | 70 | # The following line ensures that the Material Icons font is 71 | # included with your application, so that you can use the icons in 72 | # the material Icons class. 73 | uses-material-design: true 74 | 75 | # To add assets to your application, add an assets section, like this: 76 | assets: 77 | - assets/ 78 | 79 | # An image asset can refer to one or more resolution-specific "variants", see 80 | # https://flutter.dev/assets-and-images/#resolution-aware 81 | 82 | # For details regarding adding assets from package dependencies, see 83 | # https://flutter.dev/assets-and-images/#from-packages 84 | 85 | # To add custom fonts to your application, add a fonts section here, 86 | # in this "flutter" section. Each entry in this list should have a 87 | # "family" key with the font family name, and a "fonts" key with a 88 | # list giving the asset and other descriptors for the font. For 89 | # example: 90 | # fonts: 91 | # - family: Schyler 92 | # fonts: 93 | # - asset: fonts/Schyler-Regular.ttf 94 | # - asset: fonts/Schyler-Italic.ttf 95 | # style: italic 96 | # - family: Trajan Pro 97 | # fonts: 98 | # - asset: fonts/TrajanPro.ttf 99 | # - asset: fonts/TrajanPro_Bold.ttf 100 | # weight: 700 101 | # 102 | # For details regarding fonts from package dependencies, 103 | # see https://flutter.dev/custom-fonts/#from-packages 104 | -------------------------------------------------------------------------------- /test/widget_test.dart: -------------------------------------------------------------------------------- 1 | // This is a basic Flutter widget test. 2 | // 3 | // To perform an interaction with a widget in your test, use the WidgetTester 4 | // utility in the flutter_test package. For example, you can send tap and scroll 5 | // gestures. You can also use WidgetTester to find child widgets in the widget 6 | // tree, read text, and verify that the values of widget properties are correct. 7 | 8 | import 'package:flutter/material.dart'; 9 | import 'package:flutter_test/flutter_test.dart'; 10 | 11 | import 'package:finder/main.dart'; 12 | 13 | void main() { 14 | testWidgets('Counter increments smoke test', (WidgetTester tester) async { 15 | // Build our app and trigger a frame. 16 | await tester.pumpWidget(const MyApp()); 17 | 18 | // Verify that our counter starts at 0. 19 | expect(find.text('0'), findsOneWidget); 20 | expect(find.text('1'), findsNothing); 21 | 22 | // Tap the '+' icon and trigger a frame. 23 | await tester.tap(find.byIcon(Icons.add)); 24 | await tester.pump(); 25 | 26 | // Verify that our counter has incremented. 27 | expect(find.text('0'), findsNothing); 28 | expect(find.text('1'), findsOneWidget); 29 | }); 30 | } 31 | --------------------------------------------------------------------------------