saminsohag

bug fixed

Showing 160 changed files with 5562 additions and 18 deletions
No preview for this file type
  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 +# Libraries should not include pubspec.lock, per https://dart.dev/guides/libraries/private-files#pubspeclock.
  26 +/pubspec.lock
  27 +**/doc/api/
  28 +.dart_tool/
  29 +.packages
  30 +build/
  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 and should not be manually edited.
  5 +
  6 +version:
  7 + revision: 2ad6cd72c040113b47ee9055e722606a490ef0da
  8 + channel: stable
  9 +
  10 +project_type: package
  1 +{
  2 + "cSpell.words": [
  3 + "Cupertino",
  4 + "pdfviewer",
  5 + "Schyler",
  6 + "syncfusion"
  7 + ]
  8 +}
  1 +## 0.0.1
  2 +
  3 +* TODO: Describe initial release.
  1 +TODO: Add your license here.
  1 +<!--
  2 +This README describes the package. If you publish this package to pub.dev,
  3 +this README's contents appear on the landing page for your package.
  4 +
  5 +For information about how to write a good package README, see the guide for
  6 +[writing package pages](https://dart.dev/guides/libraries/writing-package-pages).
  7 +
  8 +For general information about developing packages, see the Dart guide for
  9 +[creating packages](https://dart.dev/guides/libraries/create-library-packages)
  10 +and the Flutter guide for
  11 +[developing packages and plugins](https://flutter.dev/developing-packages).
  12 +-->
  13 +
  14 +TODO: Put a short description of the package here that helps potential users
  15 +know whether this package might be useful for them.
  16 +
  17 +## Features
  18 +
  19 +TODO: List what your package can do. Maybe include images, gifs, or videos.
  20 +
  21 +## Getting started
  22 +
  23 +TODO: List prerequisites and provide or point to information on how to
  24 +start using the package.
  25 +
  26 +## Usage
  27 +
  28 +TODO: Include short and useful examples for package users. Add longer examples
  29 +to `/example` folder.
  30 +
  31 +```dart
  32 +const like = 'sample';
  33 +```
  34 +
  35 +## Additional information
  36 +
  37 +TODO: Tell users more about the package: where to find more information, how to
  38 +contribute to the package, how to file issues, what response they can expect
  39 +from the package authors, and more.
  1 +include: package:flutter_lints/flutter.yaml
  2 +
  3 +# Additional information about this file can be found at
  4 +# https://dart.dev/guides/language/analysis-options
  1 +package io.flutter.plugins;
  2 +
  3 +import io.flutter.plugin.common.PluginRegistry;
  4 +
  5 +/**
  6 + * Generated file. Do not edit.
  7 + */
  8 +public final class GeneratedPluginRegistrant {
  9 + public static void registerWith(PluginRegistry registry) {
  10 + if (alreadyRegisteredWith(registry)) {
  11 + return;
  12 + }
  13 + }
  14 +
  15 + private static boolean alreadyRegisteredWith(PluginRegistry registry) {
  16 + final String key = GeneratedPluginRegistrant.class.getCanonicalName();
  17 + if (registry.hasPlugin(key)) {
  18 + return true;
  19 + }
  20 + registry.registrarFor(key);
  21 + return false;
  22 + }
  23 +}
  1 +sdk.dir=/Users/sohag/Library/Android/sdk
  2 +flutter.sdk=/Users/sohag/Developer/flutter
  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
  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: 2ad6cd72c040113b47ee9055e722606a490ef0da
  8 + channel: stable
  9 +
  10 +project_type: app
  11 +
  12 +# Tracks metadata for the flutter migrate command
  13 +migration:
  14 + platforms:
  15 + - platform: root
  16 + create_revision: 2ad6cd72c040113b47ee9055e722606a490ef0da
  17 + base_revision: 2ad6cd72c040113b47ee9055e722606a490ef0da
  18 + - platform: android
  19 + create_revision: 2ad6cd72c040113b47ee9055e722606a490ef0da
  20 + base_revision: 2ad6cd72c040113b47ee9055e722606a490ef0da
  21 + - platform: ios
  22 + create_revision: 2ad6cd72c040113b47ee9055e722606a490ef0da
  23 + base_revision: 2ad6cd72c040113b47ee9055e722606a490ef0da
  24 + - platform: linux
  25 + create_revision: 2ad6cd72c040113b47ee9055e722606a490ef0da
  26 + base_revision: 2ad6cd72c040113b47ee9055e722606a490ef0da
  27 + - platform: macos
  28 + create_revision: 2ad6cd72c040113b47ee9055e722606a490ef0da
  29 + base_revision: 2ad6cd72c040113b47ee9055e722606a490ef0da
  30 + - platform: web
  31 + create_revision: 2ad6cd72c040113b47ee9055e722606a490ef0da
  32 + base_revision: 2ad6cd72c040113b47ee9055e722606a490ef0da
  33 + - platform: windows
  34 + create_revision: 2ad6cd72c040113b47ee9055e722606a490ef0da
  35 + base_revision: 2ad6cd72c040113b47ee9055e722606a490ef0da
  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'
  1 +# example
  2 +
  3 +A new Flutter project.
  4 +
  5 +## Getting Started
  6 +
  7 +This project is a starting point for a Flutter application.
  8 +
  9 +A few resources to get you started if this is your first Flutter project:
  10 +
  11 +- [Lab: Write your first Flutter app](https://docs.flutter.dev/get-started/codelab)
  12 +- [Cookbook: Useful Flutter samples](https://docs.flutter.dev/cookbook)
  13 +
  14 +For help getting started with Flutter development, view the
  15 +[online documentation](https://docs.flutter.dev/), which offers tutorials,
  16 +samples, guidance on mobile development, and a full API reference.
  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
  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
  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.example"
  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 +}
  1 +<manifest xmlns:android="http://schemas.android.com/apk/res/android"
  2 + package="com.example.example">
  3 + <!-- The INTERNET permission is required for development. Specifically,
  4 + the Flutter tool needs it to communicate with the running application
  5 + to allow setting breakpoints, to provide hot reload, etc.
  6 + -->
  7 + <uses-permission android:name="android.permission.INTERNET"/>
  8 +</manifest>
  1 +<manifest xmlns:android="http://schemas.android.com/apk/res/android"
  2 + package="com.example.example">
  3 + <application
  4 + android:label="example"
  5 + android:name="${applicationName}"
  6 + android:icon="@mipmap/ic_launcher">
  7 + <activity
  8 + android:name=".MainActivity"
  9 + android:exported="true"
  10 + android:launchMode="singleTop"
  11 + android:theme="@style/LaunchTheme"
  12 + android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
  13 + android:hardwareAccelerated="true"
  14 + android:windowSoftInputMode="adjustResize">
  15 + <!-- Specifies an Android theme to apply to this Activity as soon as
  16 + the Android process has started. This theme is visible to the user
  17 + while the Flutter UI initializes. After that, this theme continues
  18 + to determine the Window background behind the Flutter UI. -->
  19 + <meta-data
  20 + android:name="io.flutter.embedding.android.NormalTheme"
  21 + android:resource="@style/NormalTheme"
  22 + />
  23 + <intent-filter>
  24 + <action android:name="android.intent.action.MAIN"/>
  25 + <category android:name="android.intent.category.LAUNCHER"/>
  26 + </intent-filter>
  27 + </activity>
  28 + <!-- Don't delete the meta-data below.
  29 + This is used by the Flutter tool to generate GeneratedPluginRegistrant.java -->
  30 + <meta-data
  31 + android:name="flutterEmbedding"
  32 + android:value="2" />
  33 + </application>
  34 +</manifest>
  1 +package com.example.example
  2 +
  3 +import io.flutter.embedding.android.FlutterActivity
  4 +
  5 +class MainActivity: FlutterActivity() {
  6 +}
  1 +<?xml version="1.0" encoding="utf-8"?>
  2 +<!-- Modify this file to customize your launch splash screen -->
  3 +<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
  4 + <item android:drawable="?android:colorBackground" />
  5 +
  6 + <!-- You can insert your own image assets here -->
  7 + <!-- <item>
  8 + <bitmap
  9 + android:gravity="center"
  10 + android:src="@mipmap/launch_image" />
  11 + </item> -->
  12 +</layer-list>
  1 +<?xml version="1.0" encoding="utf-8"?>
  2 +<!-- Modify this file to customize your launch splash screen -->
  3 +<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
  4 + <item android:drawable="@android:color/white" />
  5 +
  6 + <!-- You can insert your own image assets here -->
  7 + <!-- <item>
  8 + <bitmap
  9 + android:gravity="center"
  10 + android:src="@mipmap/launch_image" />
  11 + </item> -->
  12 +</layer-list>
  1 +<?xml version="1.0" encoding="utf-8"?>
  2 +<resources>
  3 + <!-- Theme applied to the Android Window while the process is starting when the OS's Dark Mode setting is on -->
  4 + <style name="LaunchTheme" parent="@android:style/Theme.Black.NoTitleBar">
  5 + <!-- Show a splash screen on the activity. Automatically removed when
  6 + the Flutter engine draws its first frame -->
  7 + <item name="android:windowBackground">@drawable/launch_background</item>
  8 + </style>
  9 + <!-- Theme applied to the Android Window as soon as the process has started.
  10 + This theme determines the color of the Android Window while your
  11 + Flutter UI initializes, as well as behind your Flutter UI while its
  12 + running.
  13 +
  14 + This Theme is only used starting with V2 of Flutter's Android embedding. -->
  15 + <style name="NormalTheme" parent="@android:style/Theme.Black.NoTitleBar">
  16 + <item name="android:windowBackground">?android:colorBackground</item>
  17 + </style>
  18 +</resources>
  1 +<?xml version="1.0" encoding="utf-8"?>
  2 +<resources>
  3 + <!-- Theme applied to the Android Window while the process is starting when the OS's Dark Mode setting is off -->
  4 + <style name="LaunchTheme" parent="@android:style/Theme.Light.NoTitleBar">
  5 + <!-- Show a splash screen on the activity. Automatically removed when
  6 + the Flutter engine draws its first frame -->
  7 + <item name="android:windowBackground">@drawable/launch_background</item>
  8 + </style>
  9 + <!-- Theme applied to the Android Window as soon as the process has started.
  10 + This theme determines the color of the Android Window while your
  11 + Flutter UI initializes, as well as behind your Flutter UI while its
  12 + running.
  13 +
  14 + This Theme is only used starting with V2 of Flutter's Android embedding. -->
  15 + <style name="NormalTheme" parent="@android:style/Theme.Light.NoTitleBar">
  16 + <item name="android:windowBackground">?android:colorBackground</item>
  17 + </style>
  18 +</resources>
  1 +<manifest xmlns:android="http://schemas.android.com/apk/res/android"
  2 + package="com.example.example">
  3 + <!-- The INTERNET permission is required for development. Specifically,
  4 + the Flutter tool needs it to communicate with the running application
  5 + to allow setting breakpoints, to provide hot reload, etc.
  6 + -->
  7 + <uses-permission android:name="android.permission.INTERNET"/>
  8 +</manifest>
  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 +}
  1 +org.gradle.jvmargs=-Xmx1536M
  2 +android.useAndroidX=true
  3 +android.enableJetifier=true
  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
  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"
  1 +**/dgph
  2 +*.mode1v3
  3 +*.mode2v3
  4 +*.moved-aside
  5 +*.pbxuser
  6 +*.perspectivev3
  7 +**/*sync/
  8 +.sconsign.dblite
  9 +.tags*
  10 +**/.vagrant/
  11 +**/DerivedData/
  12 +Icon?
  13 +**/Pods/
  14 +**/.symlinks/
  15 +profile
  16 +xcuserdata
  17 +**/.generated/
  18 +Flutter/App.framework
  19 +Flutter/Flutter.framework
  20 +Flutter/Flutter.podspec
  21 +Flutter/Generated.xcconfig
  22 +Flutter/ephemeral/
  23 +Flutter/app.flx
  24 +Flutter/app.zip
  25 +Flutter/flutter_assets/
  26 +Flutter/flutter_export_environment.sh
  27 +ServiceDefinitions.json
  28 +Runner/GeneratedPluginRegistrant.*
  29 +
  30 +# Exceptions to above rules.
  31 +!default.mode1v3
  32 +!default.mode2v3
  33 +!default.pbxuser
  34 +!default.perspectivev3
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
  3 +<plist version="1.0">
  4 +<dict>
  5 + <key>CFBundleDevelopmentRegion</key>
  6 + <string>en</string>
  7 + <key>CFBundleExecutable</key>
  8 + <string>App</string>
  9 + <key>CFBundleIdentifier</key>
  10 + <string>io.flutter.flutter.app</string>
  11 + <key>CFBundleInfoDictionaryVersion</key>
  12 + <string>6.0</string>
  13 + <key>CFBundleName</key>
  14 + <string>App</string>
  15 + <key>CFBundlePackageType</key>
  16 + <string>FMWK</string>
  17 + <key>CFBundleShortVersionString</key>
  18 + <string>1.0</string>
  19 + <key>CFBundleSignature</key>
  20 + <string>????</string>
  21 + <key>CFBundleVersion</key>
  22 + <string>1.0</string>
  23 + <key>MinimumOSVersion</key>
  24 + <string>11.0</string>
  25 +</dict>
  26 +</plist>
  1 +#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"
  2 +#include "Generated.xcconfig"
  1 +#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"
  2 +#include "Generated.xcconfig"
  1 +# Uncomment this line to define a global platform for your project
  2 +# platform :ios, '11.0'
  3 +
  4 +# CocoaPods analytics sends network stats synchronously affecting flutter build latency.
  5 +ENV['COCOAPODS_DISABLE_STATS'] = 'true'
  6 +
  7 +project 'Runner', {
  8 + 'Debug' => :debug,
  9 + 'Profile' => :release,
  10 + 'Release' => :release,
  11 +}
  12 +
  13 +def flutter_root
  14 + generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__)
  15 + unless File.exist?(generated_xcode_build_settings_path)
  16 + raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first"
  17 + end
  18 +
  19 + File.foreach(generated_xcode_build_settings_path) do |line|
  20 + matches = line.match(/FLUTTER_ROOT\=(.*)/)
  21 + return matches[1].strip if matches
  22 + end
  23 + raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get"
  24 +end
  25 +
  26 +require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root)
  27 +
  28 +flutter_ios_podfile_setup
  29 +
  30 +target 'Runner' do
  31 + use_frameworks!
  32 + use_modular_headers!
  33 +
  34 + flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__))
  35 +end
  36 +
  37 +post_install do |installer|
  38 + installer.pods_project.targets.each do |target|
  39 + flutter_additional_ios_build_settings(target)
  40 + end
  41 +end
  1 +// !$*UTF8*$!
  2 +{
  3 + archiveVersion = 1;
  4 + classes = {
  5 + };
  6 + objectVersion = 54;
  7 + objects = {
  8 +
  9 +/* Begin PBXBuildFile section */
  10 + 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; };
  11 + 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; };
  12 + 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; };
  13 + 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; };
  14 + 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; };
  15 + 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; };
  16 +/* End PBXBuildFile section */
  17 +
  18 +/* Begin PBXCopyFilesBuildPhase section */
  19 + 9705A1C41CF9048500538489 /* Embed Frameworks */ = {
  20 + isa = PBXCopyFilesBuildPhase;
  21 + buildActionMask = 2147483647;
  22 + dstPath = "";
  23 + dstSubfolderSpec = 10;
  24 + files = (
  25 + );
  26 + name = "Embed Frameworks";
  27 + runOnlyForDeploymentPostprocessing = 0;
  28 + };
  29 +/* End PBXCopyFilesBuildPhase section */
  30 +
  31 +/* Begin PBXFileReference section */
  32 + 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = "<group>"; };
  33 + 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = "<group>"; };
  34 + 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = "<group>"; };
  35 + 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = "<group>"; };
  36 + 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
  37 + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = "<group>"; };
  38 + 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = "<group>"; };
  39 + 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = "<group>"; };
  40 + 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; };
  41 + 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = "<group>"; };
  42 + 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
  43 + 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
  44 + 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
  45 +/* End PBXFileReference section */
  46 +
  47 +/* Begin PBXFrameworksBuildPhase section */
  48 + 97C146EB1CF9000F007C117D /* Frameworks */ = {
  49 + isa = PBXFrameworksBuildPhase;
  50 + buildActionMask = 2147483647;
  51 + files = (
  52 + );
  53 + runOnlyForDeploymentPostprocessing = 0;
  54 + };
  55 +/* End PBXFrameworksBuildPhase section */
  56 +
  57 +/* Begin PBXGroup section */
  58 + 9740EEB11CF90186004384FC /* Flutter */ = {
  59 + isa = PBXGroup;
  60 + children = (
  61 + 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */,
  62 + 9740EEB21CF90195004384FC /* Debug.xcconfig */,
  63 + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */,
  64 + 9740EEB31CF90195004384FC /* Generated.xcconfig */,
  65 + );
  66 + name = Flutter;
  67 + sourceTree = "<group>";
  68 + };
  69 + 97C146E51CF9000F007C117D = {
  70 + isa = PBXGroup;
  71 + children = (
  72 + 9740EEB11CF90186004384FC /* Flutter */,
  73 + 97C146F01CF9000F007C117D /* Runner */,
  74 + 97C146EF1CF9000F007C117D /* Products */,
  75 + );
  76 + sourceTree = "<group>";
  77 + };
  78 + 97C146EF1CF9000F007C117D /* Products */ = {
  79 + isa = PBXGroup;
  80 + children = (
  81 + 97C146EE1CF9000F007C117D /* Runner.app */,
  82 + );
  83 + name = Products;
  84 + sourceTree = "<group>";
  85 + };
  86 + 97C146F01CF9000F007C117D /* Runner */ = {
  87 + isa = PBXGroup;
  88 + children = (
  89 + 97C146FA1CF9000F007C117D /* Main.storyboard */,
  90 + 97C146FD1CF9000F007C117D /* Assets.xcassets */,
  91 + 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */,
  92 + 97C147021CF9000F007C117D /* Info.plist */,
  93 + 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */,
  94 + 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */,
  95 + 74858FAE1ED2DC5600515810 /* AppDelegate.swift */,
  96 + 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */,
  97 + );
  98 + path = Runner;
  99 + sourceTree = "<group>";
  100 + };
  101 +/* End PBXGroup section */
  102 +
  103 +/* Begin PBXNativeTarget section */
  104 + 97C146ED1CF9000F007C117D /* Runner */ = {
  105 + isa = PBXNativeTarget;
  106 + buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */;
  107 + buildPhases = (
  108 + 9740EEB61CF901F6004384FC /* Run Script */,
  109 + 97C146EA1CF9000F007C117D /* Sources */,
  110 + 97C146EB1CF9000F007C117D /* Frameworks */,
  111 + 97C146EC1CF9000F007C117D /* Resources */,
  112 + 9705A1C41CF9048500538489 /* Embed Frameworks */,
  113 + 3B06AD1E1E4923F5004D2608 /* Thin Binary */,
  114 + );
  115 + buildRules = (
  116 + );
  117 + dependencies = (
  118 + );
  119 + name = Runner;
  120 + productName = Runner;
  121 + productReference = 97C146EE1CF9000F007C117D /* Runner.app */;
  122 + productType = "com.apple.product-type.application";
  123 + };
  124 +/* End PBXNativeTarget section */
  125 +
  126 +/* Begin PBXProject section */
  127 + 97C146E61CF9000F007C117D /* Project object */ = {
  128 + isa = PBXProject;
  129 + attributes = {
  130 + LastUpgradeCheck = 1300;
  131 + ORGANIZATIONNAME = "";
  132 + TargetAttributes = {
  133 + 97C146ED1CF9000F007C117D = {
  134 + CreatedOnToolsVersion = 7.3.1;
  135 + LastSwiftMigration = 1100;
  136 + };
  137 + };
  138 + };
  139 + buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */;
  140 + compatibilityVersion = "Xcode 9.3";
  141 + developmentRegion = en;
  142 + hasScannedForEncodings = 0;
  143 + knownRegions = (
  144 + en,
  145 + Base,
  146 + );
  147 + mainGroup = 97C146E51CF9000F007C117D;
  148 + productRefGroup = 97C146EF1CF9000F007C117D /* Products */;
  149 + projectDirPath = "";
  150 + projectRoot = "";
  151 + targets = (
  152 + 97C146ED1CF9000F007C117D /* Runner */,
  153 + );
  154 + };
  155 +/* End PBXProject section */
  156 +
  157 +/* Begin PBXResourcesBuildPhase section */
  158 + 97C146EC1CF9000F007C117D /* Resources */ = {
  159 + isa = PBXResourcesBuildPhase;
  160 + buildActionMask = 2147483647;
  161 + files = (
  162 + 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */,
  163 + 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */,
  164 + 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */,
  165 + 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */,
  166 + );
  167 + runOnlyForDeploymentPostprocessing = 0;
  168 + };
  169 +/* End PBXResourcesBuildPhase section */
  170 +
  171 +/* Begin PBXShellScriptBuildPhase section */
  172 + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = {
  173 + isa = PBXShellScriptBuildPhase;
  174 + alwaysOutOfDate = 1;
  175 + buildActionMask = 2147483647;
  176 + files = (
  177 + );
  178 + inputPaths = (
  179 + );
  180 + name = "Thin Binary";
  181 + outputPaths = (
  182 + );
  183 + runOnlyForDeploymentPostprocessing = 0;
  184 + shellPath = /bin/sh;
  185 + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin";
  186 + };
  187 + 9740EEB61CF901F6004384FC /* Run Script */ = {
  188 + isa = PBXShellScriptBuildPhase;
  189 + alwaysOutOfDate = 1;
  190 + buildActionMask = 2147483647;
  191 + files = (
  192 + );
  193 + inputPaths = (
  194 + );
  195 + name = "Run Script";
  196 + outputPaths = (
  197 + );
  198 + runOnlyForDeploymentPostprocessing = 0;
  199 + shellPath = /bin/sh;
  200 + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build";
  201 + };
  202 +/* End PBXShellScriptBuildPhase section */
  203 +
  204 +/* Begin PBXSourcesBuildPhase section */
  205 + 97C146EA1CF9000F007C117D /* Sources */ = {
  206 + isa = PBXSourcesBuildPhase;
  207 + buildActionMask = 2147483647;
  208 + files = (
  209 + 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */,
  210 + 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */,
  211 + );
  212 + runOnlyForDeploymentPostprocessing = 0;
  213 + };
  214 +/* End PBXSourcesBuildPhase section */
  215 +
  216 +/* Begin PBXVariantGroup section */
  217 + 97C146FA1CF9000F007C117D /* Main.storyboard */ = {
  218 + isa = PBXVariantGroup;
  219 + children = (
  220 + 97C146FB1CF9000F007C117D /* Base */,
  221 + );
  222 + name = Main.storyboard;
  223 + sourceTree = "<group>";
  224 + };
  225 + 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = {
  226 + isa = PBXVariantGroup;
  227 + children = (
  228 + 97C147001CF9000F007C117D /* Base */,
  229 + );
  230 + name = LaunchScreen.storyboard;
  231 + sourceTree = "<group>";
  232 + };
  233 +/* End PBXVariantGroup section */
  234 +
  235 +/* Begin XCBuildConfiguration section */
  236 + 249021D3217E4FDB00AE95B9 /* Profile */ = {
  237 + isa = XCBuildConfiguration;
  238 + buildSettings = {
  239 + ALWAYS_SEARCH_USER_PATHS = NO;
  240 + CLANG_ANALYZER_NONNULL = YES;
  241 + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
  242 + CLANG_CXX_LIBRARY = "libc++";
  243 + CLANG_ENABLE_MODULES = YES;
  244 + CLANG_ENABLE_OBJC_ARC = YES;
  245 + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
  246 + CLANG_WARN_BOOL_CONVERSION = YES;
  247 + CLANG_WARN_COMMA = YES;
  248 + CLANG_WARN_CONSTANT_CONVERSION = YES;
  249 + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
  250 + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
  251 + CLANG_WARN_EMPTY_BODY = YES;
  252 + CLANG_WARN_ENUM_CONVERSION = YES;
  253 + CLANG_WARN_INFINITE_RECURSION = YES;
  254 + CLANG_WARN_INT_CONVERSION = YES;
  255 + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
  256 + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
  257 + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
  258 + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
  259 + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
  260 + CLANG_WARN_STRICT_PROTOTYPES = YES;
  261 + CLANG_WARN_SUSPICIOUS_MOVE = YES;
  262 + CLANG_WARN_UNREACHABLE_CODE = YES;
  263 + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
  264 + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
  265 + COPY_PHASE_STRIP = NO;
  266 + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
  267 + ENABLE_NS_ASSERTIONS = NO;
  268 + ENABLE_STRICT_OBJC_MSGSEND = YES;
  269 + GCC_C_LANGUAGE_STANDARD = gnu99;
  270 + GCC_NO_COMMON_BLOCKS = YES;
  271 + GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
  272 + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
  273 + GCC_WARN_UNDECLARED_SELECTOR = YES;
  274 + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
  275 + GCC_WARN_UNUSED_FUNCTION = YES;
  276 + GCC_WARN_UNUSED_VARIABLE = YES;
  277 + IPHONEOS_DEPLOYMENT_TARGET = 11.0;
  278 + MTL_ENABLE_DEBUG_INFO = NO;
  279 + SDKROOT = iphoneos;
  280 + SUPPORTED_PLATFORMS = iphoneos;
  281 + TARGETED_DEVICE_FAMILY = "1,2";
  282 + VALIDATE_PRODUCT = YES;
  283 + };
  284 + name = Profile;
  285 + };
  286 + 249021D4217E4FDB00AE95B9 /* Profile */ = {
  287 + isa = XCBuildConfiguration;
  288 + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
  289 + buildSettings = {
  290 + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
  291 + CLANG_ENABLE_MODULES = YES;
  292 + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
  293 + ENABLE_BITCODE = NO;
  294 + INFOPLIST_FILE = Runner/Info.plist;
  295 + LD_RUNPATH_SEARCH_PATHS = (
  296 + "$(inherited)",
  297 + "@executable_path/Frameworks",
  298 + );
  299 + PRODUCT_BUNDLE_IDENTIFIER = com.example.example;
  300 + PRODUCT_NAME = "$(TARGET_NAME)";
  301 + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
  302 + SWIFT_VERSION = 5.0;
  303 + VERSIONING_SYSTEM = "apple-generic";
  304 + };
  305 + name = Profile;
  306 + };
  307 + 97C147031CF9000F007C117D /* Debug */ = {
  308 + isa = XCBuildConfiguration;
  309 + buildSettings = {
  310 + ALWAYS_SEARCH_USER_PATHS = NO;
  311 + CLANG_ANALYZER_NONNULL = YES;
  312 + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
  313 + CLANG_CXX_LIBRARY = "libc++";
  314 + CLANG_ENABLE_MODULES = YES;
  315 + CLANG_ENABLE_OBJC_ARC = YES;
  316 + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
  317 + CLANG_WARN_BOOL_CONVERSION = YES;
  318 + CLANG_WARN_COMMA = YES;
  319 + CLANG_WARN_CONSTANT_CONVERSION = YES;
  320 + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
  321 + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
  322 + CLANG_WARN_EMPTY_BODY = YES;
  323 + CLANG_WARN_ENUM_CONVERSION = YES;
  324 + CLANG_WARN_INFINITE_RECURSION = YES;
  325 + CLANG_WARN_INT_CONVERSION = YES;
  326 + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
  327 + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
  328 + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
  329 + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
  330 + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
  331 + CLANG_WARN_STRICT_PROTOTYPES = YES;
  332 + CLANG_WARN_SUSPICIOUS_MOVE = YES;
  333 + CLANG_WARN_UNREACHABLE_CODE = YES;
  334 + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
  335 + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
  336 + COPY_PHASE_STRIP = NO;
  337 + DEBUG_INFORMATION_FORMAT = dwarf;
  338 + ENABLE_STRICT_OBJC_MSGSEND = YES;
  339 + ENABLE_TESTABILITY = YES;
  340 + GCC_C_LANGUAGE_STANDARD = gnu99;
  341 + GCC_DYNAMIC_NO_PIC = NO;
  342 + GCC_NO_COMMON_BLOCKS = YES;
  343 + GCC_OPTIMIZATION_LEVEL = 0;
  344 + GCC_PREPROCESSOR_DEFINITIONS = (
  345 + "DEBUG=1",
  346 + "$(inherited)",
  347 + );
  348 + GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
  349 + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
  350 + GCC_WARN_UNDECLARED_SELECTOR = YES;
  351 + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
  352 + GCC_WARN_UNUSED_FUNCTION = YES;
  353 + GCC_WARN_UNUSED_VARIABLE = YES;
  354 + IPHONEOS_DEPLOYMENT_TARGET = 11.0;
  355 + MTL_ENABLE_DEBUG_INFO = YES;
  356 + ONLY_ACTIVE_ARCH = YES;
  357 + SDKROOT = iphoneos;
  358 + TARGETED_DEVICE_FAMILY = "1,2";
  359 + };
  360 + name = Debug;
  361 + };
  362 + 97C147041CF9000F007C117D /* Release */ = {
  363 + isa = XCBuildConfiguration;
  364 + buildSettings = {
  365 + ALWAYS_SEARCH_USER_PATHS = NO;
  366 + CLANG_ANALYZER_NONNULL = YES;
  367 + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
  368 + CLANG_CXX_LIBRARY = "libc++";
  369 + CLANG_ENABLE_MODULES = YES;
  370 + CLANG_ENABLE_OBJC_ARC = YES;
  371 + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
  372 + CLANG_WARN_BOOL_CONVERSION = YES;
  373 + CLANG_WARN_COMMA = YES;
  374 + CLANG_WARN_CONSTANT_CONVERSION = YES;
  375 + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
  376 + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
  377 + CLANG_WARN_EMPTY_BODY = YES;
  378 + CLANG_WARN_ENUM_CONVERSION = YES;
  379 + CLANG_WARN_INFINITE_RECURSION = YES;
  380 + CLANG_WARN_INT_CONVERSION = YES;
  381 + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
  382 + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
  383 + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
  384 + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
  385 + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
  386 + CLANG_WARN_STRICT_PROTOTYPES = YES;
  387 + CLANG_WARN_SUSPICIOUS_MOVE = YES;
  388 + CLANG_WARN_UNREACHABLE_CODE = YES;
  389 + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
  390 + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
  391 + COPY_PHASE_STRIP = NO;
  392 + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
  393 + ENABLE_NS_ASSERTIONS = NO;
  394 + ENABLE_STRICT_OBJC_MSGSEND = YES;
  395 + GCC_C_LANGUAGE_STANDARD = gnu99;
  396 + GCC_NO_COMMON_BLOCKS = YES;
  397 + GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
  398 + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
  399 + GCC_WARN_UNDECLARED_SELECTOR = YES;
  400 + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
  401 + GCC_WARN_UNUSED_FUNCTION = YES;
  402 + GCC_WARN_UNUSED_VARIABLE = YES;
  403 + IPHONEOS_DEPLOYMENT_TARGET = 11.0;
  404 + MTL_ENABLE_DEBUG_INFO = NO;
  405 + SDKROOT = iphoneos;
  406 + SUPPORTED_PLATFORMS = iphoneos;
  407 + SWIFT_COMPILATION_MODE = wholemodule;
  408 + SWIFT_OPTIMIZATION_LEVEL = "-O";
  409 + TARGETED_DEVICE_FAMILY = "1,2";
  410 + VALIDATE_PRODUCT = YES;
  411 + };
  412 + name = Release;
  413 + };
  414 + 97C147061CF9000F007C117D /* Debug */ = {
  415 + isa = XCBuildConfiguration;
  416 + baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */;
  417 + buildSettings = {
  418 + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
  419 + CLANG_ENABLE_MODULES = YES;
  420 + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
  421 + ENABLE_BITCODE = NO;
  422 + INFOPLIST_FILE = Runner/Info.plist;
  423 + LD_RUNPATH_SEARCH_PATHS = (
  424 + "$(inherited)",
  425 + "@executable_path/Frameworks",
  426 + );
  427 + PRODUCT_BUNDLE_IDENTIFIER = com.example.example;
  428 + PRODUCT_NAME = "$(TARGET_NAME)";
  429 + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
  430 + SWIFT_OPTIMIZATION_LEVEL = "-Onone";
  431 + SWIFT_VERSION = 5.0;
  432 + VERSIONING_SYSTEM = "apple-generic";
  433 + };
  434 + name = Debug;
  435 + };
  436 + 97C147071CF9000F007C117D /* Release */ = {
  437 + isa = XCBuildConfiguration;
  438 + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
  439 + buildSettings = {
  440 + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
  441 + CLANG_ENABLE_MODULES = YES;
  442 + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
  443 + ENABLE_BITCODE = NO;
  444 + INFOPLIST_FILE = Runner/Info.plist;
  445 + LD_RUNPATH_SEARCH_PATHS = (
  446 + "$(inherited)",
  447 + "@executable_path/Frameworks",
  448 + );
  449 + PRODUCT_BUNDLE_IDENTIFIER = com.example.example;
  450 + PRODUCT_NAME = "$(TARGET_NAME)";
  451 + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
  452 + SWIFT_VERSION = 5.0;
  453 + VERSIONING_SYSTEM = "apple-generic";
  454 + };
  455 + name = Release;
  456 + };
  457 +/* End XCBuildConfiguration section */
  458 +
  459 +/* Begin XCConfigurationList section */
  460 + 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = {
  461 + isa = XCConfigurationList;
  462 + buildConfigurations = (
  463 + 97C147031CF9000F007C117D /* Debug */,
  464 + 97C147041CF9000F007C117D /* Release */,
  465 + 249021D3217E4FDB00AE95B9 /* Profile */,
  466 + );
  467 + defaultConfigurationIsVisible = 0;
  468 + defaultConfigurationName = Release;
  469 + };
  470 + 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */ = {
  471 + isa = XCConfigurationList;
  472 + buildConfigurations = (
  473 + 97C147061CF9000F007C117D /* Debug */,
  474 + 97C147071CF9000F007C117D /* Release */,
  475 + 249021D4217E4FDB00AE95B9 /* Profile */,
  476 + );
  477 + defaultConfigurationIsVisible = 0;
  478 + defaultConfigurationName = Release;
  479 + };
  480 +/* End XCConfigurationList section */
  481 + };
  482 + rootObject = 97C146E61CF9000F007C117D /* Project object */;
  483 +}
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<Workspace
  3 + version = "1.0">
  4 + <FileRef
  5 + location = "self:">
  6 + </FileRef>
  7 +</Workspace>
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
  3 +<plist version="1.0">
  4 +<dict>
  5 + <key>IDEDidComputeMac32BitWarning</key>
  6 + <true/>
  7 +</dict>
  8 +</plist>
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
  3 +<plist version="1.0">
  4 +<dict>
  5 + <key>PreviewsEnabled</key>
  6 + <false/>
  7 +</dict>
  8 +</plist>
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<Scheme
  3 + LastUpgradeVersion = "1300"
  4 + version = "1.3">
  5 + <BuildAction
  6 + parallelizeBuildables = "YES"
  7 + buildImplicitDependencies = "YES">
  8 + <BuildActionEntries>
  9 + <BuildActionEntry
  10 + buildForTesting = "YES"
  11 + buildForRunning = "YES"
  12 + buildForProfiling = "YES"
  13 + buildForArchiving = "YES"
  14 + buildForAnalyzing = "YES">
  15 + <BuildableReference
  16 + BuildableIdentifier = "primary"
  17 + BlueprintIdentifier = "97C146ED1CF9000F007C117D"
  18 + BuildableName = "Runner.app"
  19 + BlueprintName = "Runner"
  20 + ReferencedContainer = "container:Runner.xcodeproj">
  21 + </BuildableReference>
  22 + </BuildActionEntry>
  23 + </BuildActionEntries>
  24 + </BuildAction>
  25 + <TestAction
  26 + buildConfiguration = "Debug"
  27 + selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
  28 + selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
  29 + shouldUseLaunchSchemeArgsEnv = "YES">
  30 + <MacroExpansion>
  31 + <BuildableReference
  32 + BuildableIdentifier = "primary"
  33 + BlueprintIdentifier = "97C146ED1CF9000F007C117D"
  34 + BuildableName = "Runner.app"
  35 + BlueprintName = "Runner"
  36 + ReferencedContainer = "container:Runner.xcodeproj">
  37 + </BuildableReference>
  38 + </MacroExpansion>
  39 + <Testables>
  40 + </Testables>
  41 + </TestAction>
  42 + <LaunchAction
  43 + buildConfiguration = "Debug"
  44 + selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
  45 + selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
  46 + launchStyle = "0"
  47 + useCustomWorkingDirectory = "NO"
  48 + ignoresPersistentStateOnLaunch = "NO"
  49 + debugDocumentVersioning = "YES"
  50 + debugServiceExtension = "internal"
  51 + allowLocationSimulation = "YES">
  52 + <BuildableProductRunnable
  53 + runnableDebuggingMode = "0">
  54 + <BuildableReference
  55 + BuildableIdentifier = "primary"
  56 + BlueprintIdentifier = "97C146ED1CF9000F007C117D"
  57 + BuildableName = "Runner.app"
  58 + BlueprintName = "Runner"
  59 + ReferencedContainer = "container:Runner.xcodeproj">
  60 + </BuildableReference>
  61 + </BuildableProductRunnable>
  62 + </LaunchAction>
  63 + <ProfileAction
  64 + buildConfiguration = "Profile"
  65 + shouldUseLaunchSchemeArgsEnv = "YES"
  66 + savedToolIdentifier = ""
  67 + useCustomWorkingDirectory = "NO"
  68 + debugDocumentVersioning = "YES">
  69 + <BuildableProductRunnable
  70 + runnableDebuggingMode = "0">
  71 + <BuildableReference
  72 + BuildableIdentifier = "primary"
  73 + BlueprintIdentifier = "97C146ED1CF9000F007C117D"
  74 + BuildableName = "Runner.app"
  75 + BlueprintName = "Runner"
  76 + ReferencedContainer = "container:Runner.xcodeproj">
  77 + </BuildableReference>
  78 + </BuildableProductRunnable>
  79 + </ProfileAction>
  80 + <AnalyzeAction
  81 + buildConfiguration = "Debug">
  82 + </AnalyzeAction>
  83 + <ArchiveAction
  84 + buildConfiguration = "Release"
  85 + revealArchiveInOrganizer = "YES">
  86 + </ArchiveAction>
  87 +</Scheme>
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<Workspace
  3 + version = "1.0">
  4 + <FileRef
  5 + location = "group:Runner.xcodeproj">
  6 + </FileRef>
  7 +</Workspace>
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
  3 +<plist version="1.0">
  4 +<dict>
  5 + <key>IDEDidComputeMac32BitWarning</key>
  6 + <true/>
  7 +</dict>
  8 +</plist>
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
  3 +<plist version="1.0">
  4 +<dict>
  5 + <key>PreviewsEnabled</key>
  6 + <false/>
  7 +</dict>
  8 +</plist>
  1 +import UIKit
  2 +import Flutter
  3 +
  4 +@UIApplicationMain
  5 +@objc class AppDelegate: FlutterAppDelegate {
  6 + override func application(
  7 + _ application: UIApplication,
  8 + didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
  9 + ) -> Bool {
  10 + GeneratedPluginRegistrant.register(with: self)
  11 + return super.application(application, didFinishLaunchingWithOptions: launchOptions)
  12 + }
  13 +}
  1 +{
  2 + "images" : [
  3 + {
  4 + "size" : "20x20",
  5 + "idiom" : "iphone",
  6 + "filename" : "Icon-App-20x20@2x.png",
  7 + "scale" : "2x"
  8 + },
  9 + {
  10 + "size" : "20x20",
  11 + "idiom" : "iphone",
  12 + "filename" : "Icon-App-20x20@3x.png",
  13 + "scale" : "3x"
  14 + },
  15 + {
  16 + "size" : "29x29",
  17 + "idiom" : "iphone",
  18 + "filename" : "Icon-App-29x29@1x.png",
  19 + "scale" : "1x"
  20 + },
  21 + {
  22 + "size" : "29x29",
  23 + "idiom" : "iphone",
  24 + "filename" : "Icon-App-29x29@2x.png",
  25 + "scale" : "2x"
  26 + },
  27 + {
  28 + "size" : "29x29",
  29 + "idiom" : "iphone",
  30 + "filename" : "Icon-App-29x29@3x.png",
  31 + "scale" : "3x"
  32 + },
  33 + {
  34 + "size" : "40x40",
  35 + "idiom" : "iphone",
  36 + "filename" : "Icon-App-40x40@2x.png",
  37 + "scale" : "2x"
  38 + },
  39 + {
  40 + "size" : "40x40",
  41 + "idiom" : "iphone",
  42 + "filename" : "Icon-App-40x40@3x.png",
  43 + "scale" : "3x"
  44 + },
  45 + {
  46 + "size" : "60x60",
  47 + "idiom" : "iphone",
  48 + "filename" : "Icon-App-60x60@2x.png",
  49 + "scale" : "2x"
  50 + },
  51 + {
  52 + "size" : "60x60",
  53 + "idiom" : "iphone",
  54 + "filename" : "Icon-App-60x60@3x.png",
  55 + "scale" : "3x"
  56 + },
  57 + {
  58 + "size" : "20x20",
  59 + "idiom" : "ipad",
  60 + "filename" : "Icon-App-20x20@1x.png",
  61 + "scale" : "1x"
  62 + },
  63 + {
  64 + "size" : "20x20",
  65 + "idiom" : "ipad",
  66 + "filename" : "Icon-App-20x20@2x.png",
  67 + "scale" : "2x"
  68 + },
  69 + {
  70 + "size" : "29x29",
  71 + "idiom" : "ipad",
  72 + "filename" : "Icon-App-29x29@1x.png",
  73 + "scale" : "1x"
  74 + },
  75 + {
  76 + "size" : "29x29",
  77 + "idiom" : "ipad",
  78 + "filename" : "Icon-App-29x29@2x.png",
  79 + "scale" : "2x"
  80 + },
  81 + {
  82 + "size" : "40x40",
  83 + "idiom" : "ipad",
  84 + "filename" : "Icon-App-40x40@1x.png",
  85 + "scale" : "1x"
  86 + },
  87 + {
  88 + "size" : "40x40",
  89 + "idiom" : "ipad",
  90 + "filename" : "Icon-App-40x40@2x.png",
  91 + "scale" : "2x"
  92 + },
  93 + {
  94 + "size" : "76x76",
  95 + "idiom" : "ipad",
  96 + "filename" : "Icon-App-76x76@1x.png",
  97 + "scale" : "1x"
  98 + },
  99 + {
  100 + "size" : "76x76",
  101 + "idiom" : "ipad",
  102 + "filename" : "Icon-App-76x76@2x.png",
  103 + "scale" : "2x"
  104 + },
  105 + {
  106 + "size" : "83.5x83.5",
  107 + "idiom" : "ipad",
  108 + "filename" : "Icon-App-83.5x83.5@2x.png",
  109 + "scale" : "2x"
  110 + },
  111 + {
  112 + "size" : "1024x1024",
  113 + "idiom" : "ios-marketing",
  114 + "filename" : "Icon-App-1024x1024@1x.png",
  115 + "scale" : "1x"
  116 + }
  117 + ],
  118 + "info" : {
  119 + "version" : 1,
  120 + "author" : "xcode"
  121 + }
  122 +}
  1 +{
  2 + "images" : [
  3 + {
  4 + "idiom" : "universal",
  5 + "filename" : "LaunchImage.png",
  6 + "scale" : "1x"
  7 + },
  8 + {
  9 + "idiom" : "universal",
  10 + "filename" : "LaunchImage@2x.png",
  11 + "scale" : "2x"
  12 + },
  13 + {
  14 + "idiom" : "universal",
  15 + "filename" : "LaunchImage@3x.png",
  16 + "scale" : "3x"
  17 + }
  18 + ],
  19 + "info" : {
  20 + "version" : 1,
  21 + "author" : "xcode"
  22 + }
  23 +}
  1 +# Launch Screen Assets
  2 +
  3 +You can customize the launch screen with your own desired assets by replacing the image files in this directory.
  4 +
  5 +You can also do it by opening your Flutter project's Xcode project with `open ios/Runner.xcworkspace`, selecting `Runner/Assets.xcassets` in the Project Navigator and dropping in the desired images.
  1 +<?xml version="1.0" encoding="UTF-8" standalone="no"?>
  2 +<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="12121" systemVersion="16G29" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" launchScreen="YES" colorMatched="YES" initialViewController="01J-lp-oVM">
  3 + <dependencies>
  4 + <deployment identifier="iOS"/>
  5 + <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="12089"/>
  6 + </dependencies>
  7 + <scenes>
  8 + <!--View Controller-->
  9 + <scene sceneID="EHf-IW-A2E">
  10 + <objects>
  11 + <viewController id="01J-lp-oVM" sceneMemberID="viewController">
  12 + <layoutGuides>
  13 + <viewControllerLayoutGuide type="top" id="Ydg-fD-yQy"/>
  14 + <viewControllerLayoutGuide type="bottom" id="xbc-2k-c8Z"/>
  15 + </layoutGuides>
  16 + <view key="view" contentMode="scaleToFill" id="Ze5-6b-2t3">
  17 + <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
  18 + <subviews>
  19 + <imageView opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" image="LaunchImage" translatesAutoresizingMaskIntoConstraints="NO" id="YRO-k0-Ey4">
  20 + </imageView>
  21 + </subviews>
  22 + <color key="backgroundColor" red="1" green="1" blue="1" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
  23 + <constraints>
  24 + <constraint firstItem="YRO-k0-Ey4" firstAttribute="centerX" secondItem="Ze5-6b-2t3" secondAttribute="centerX" id="1a2-6s-vTC"/>
  25 + <constraint firstItem="YRO-k0-Ey4" firstAttribute="centerY" secondItem="Ze5-6b-2t3" secondAttribute="centerY" id="4X2-HB-R7a"/>
  26 + </constraints>
  27 + </view>
  28 + </viewController>
  29 + <placeholder placeholderIdentifier="IBFirstResponder" id="iYj-Kq-Ea1" userLabel="First Responder" sceneMemberID="firstResponder"/>
  30 + </objects>
  31 + <point key="canvasLocation" x="53" y="375"/>
  32 + </scene>
  33 + </scenes>
  34 + <resources>
  35 + <image name="LaunchImage" width="168" height="185"/>
  36 + </resources>
  37 +</document>
  1 +<?xml version="1.0" encoding="UTF-8" standalone="no"?>
  2 +<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="10117" systemVersion="15F34" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" initialViewController="BYZ-38-t0r">
  3 + <dependencies>
  4 + <deployment identifier="iOS"/>
  5 + <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="10085"/>
  6 + </dependencies>
  7 + <scenes>
  8 + <!--Flutter View Controller-->
  9 + <scene sceneID="tne-QT-ifu">
  10 + <objects>
  11 + <viewController id="BYZ-38-t0r" customClass="FlutterViewController" sceneMemberID="viewController">
  12 + <layoutGuides>
  13 + <viewControllerLayoutGuide type="top" id="y3c-jy-aDJ"/>
  14 + <viewControllerLayoutGuide type="bottom" id="wfy-db-euE"/>
  15 + </layoutGuides>
  16 + <view key="view" contentMode="scaleToFill" id="8bC-Xf-vdC">
  17 + <rect key="frame" x="0.0" y="0.0" width="600" height="600"/>
  18 + <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
  19 + <color key="backgroundColor" white="1" alpha="1" colorSpace="custom" customColorSpace="calibratedWhite"/>
  20 + </view>
  21 + </viewController>
  22 + <placeholder placeholderIdentifier="IBFirstResponder" id="dkx-z0-nzr" sceneMemberID="firstResponder"/>
  23 + </objects>
  24 + </scene>
  25 + </scenes>
  26 +</document>
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
  3 +<plist version="1.0">
  4 +<dict>
  5 + <key>CFBundleDevelopmentRegion</key>
  6 + <string>$(DEVELOPMENT_LANGUAGE)</string>
  7 + <key>CFBundleDisplayName</key>
  8 + <string>Example</string>
  9 + <key>CFBundleExecutable</key>
  10 + <string>$(EXECUTABLE_NAME)</string>
  11 + <key>CFBundleIdentifier</key>
  12 + <string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
  13 + <key>CFBundleInfoDictionaryVersion</key>
  14 + <string>6.0</string>
  15 + <key>CFBundleName</key>
  16 + <string>example</string>
  17 + <key>CFBundlePackageType</key>
  18 + <string>APPL</string>
  19 + <key>CFBundleShortVersionString</key>
  20 + <string>$(FLUTTER_BUILD_NAME)</string>
  21 + <key>CFBundleSignature</key>
  22 + <string>????</string>
  23 + <key>CFBundleVersion</key>
  24 + <string>$(FLUTTER_BUILD_NUMBER)</string>
  25 + <key>LSRequiresIPhoneOS</key>
  26 + <true/>
  27 + <key>UILaunchStoryboardName</key>
  28 + <string>LaunchScreen</string>
  29 + <key>UIMainStoryboardFile</key>
  30 + <string>Main</string>
  31 + <key>UISupportedInterfaceOrientations</key>
  32 + <array>
  33 + <string>UIInterfaceOrientationPortrait</string>
  34 + <string>UIInterfaceOrientationLandscapeLeft</string>
  35 + <string>UIInterfaceOrientationLandscapeRight</string>
  36 + </array>
  37 + <key>UISupportedInterfaceOrientations~ipad</key>
  38 + <array>
  39 + <string>UIInterfaceOrientationPortrait</string>
  40 + <string>UIInterfaceOrientationPortraitUpsideDown</string>
  41 + <string>UIInterfaceOrientationLandscapeLeft</string>
  42 + <string>UIInterfaceOrientationLandscapeRight</string>
  43 + </array>
  44 + <key>UIViewControllerBasedStatusBarAppearance</key>
  45 + <false/>
  46 + <key>CADisableMinimumFrameDurationOnPhone</key>
  47 + <true/>
  48 + <key>UIApplicationSupportsIndirectInputEvents</key>
  49 + <true/>
  50 +</dict>
  51 +</plist>
  1 +#import "GeneratedPluginRegistrant.h"
  1 +import 'package:flutter/material.dart';
  2 +import 'package:markdown_to_pdf/markdown_to_pdf.dart';
  3 +import 'package:syncfusion_flutter_pdfviewer/pdfviewer.dart';
  4 +import 'package:tex_markdown/tex_markdown.dart';
  5 +
  6 +void main() {
  7 + runApp(const MyApp());
  8 +}
  9 +
  10 +class MyApp extends StatefulWidget {
  11 + const MyApp({super.key});
  12 +
  13 + @override
  14 + State<MyApp> createState() => _MyAppState();
  15 +}
  16 +
  17 +class _MyAppState extends State<MyApp> {
  18 + ThemeMode _themeMode = ThemeMode.light;
  19 + @override
  20 + Widget build(BuildContext context) {
  21 + return MaterialApp(
  22 + debugShowCheckedModeBanner: false,
  23 + title: 'Flutter Demo',
  24 + themeMode: _themeMode,
  25 + theme: ThemeData(
  26 + useMaterial3: true,
  27 + brightness: Brightness.light,
  28 + colorSchemeSeed: Colors.blue,
  29 + ),
  30 + darkTheme: ThemeData(
  31 + useMaterial3: true,
  32 + brightness: Brightness.dark,
  33 + colorSchemeSeed: Colors.blue,
  34 + ),
  35 + home: MyHomePage(
  36 + title: 'Flutter Demo Home Page',
  37 + onPressed: () {
  38 + setState(() {
  39 + _themeMode = ThemeMode.values[(_themeMode.index + 1) % 2];
  40 + });
  41 + },
  42 + ),
  43 + );
  44 + }
  45 +}
  46 +
  47 +class MyHomePage extends StatefulWidget {
  48 + const MyHomePage({super.key, required this.title, required this.onPressed});
  49 + final VoidCallback? onPressed;
  50 +
  51 + final String title;
  52 +
  53 + @override
  54 + State<MyHomePage> createState() => _MyHomePageState();
  55 +}
  56 +
  57 +class _MyHomePageState extends State<MyHomePage> {
  58 + final TextEditingController _controller = TextEditingController(text: r'''
  59 +![100x100](https://image.jpg)
  60 +---
  61 +- unordered list
  62 +(x) Radio checked
  63 +() Radio unchecked
  64 +[x] checkbox checked
  65 +[] Checkbox unchecked
  66 +
  67 +| Name | Country |
  68 +| Name | Bangladesh |
  69 +
  70 +$x^w$
  71 +''');
  72 +
  73 + GlobalKey globalKey = GlobalKey();
  74 + @override
  75 + Widget build(BuildContext context) {
  76 + return Scaffold(
  77 + appBar: AppBar(
  78 + title: Text(widget.title),
  79 + actions: [
  80 + IconButton(
  81 + onPressed: widget.onPressed,
  82 + icon: const Icon(Icons.sunny),
  83 + ),
  84 + IconButton(
  85 + onPressed: () async {
  86 + var pdf = await MarkdownToPdf(
  87 + globalKey.currentContext!,
  88 + ).toPdf();
  89 + // ignore: use_build_context_synchronously
  90 + showDialog(
  91 + context: context,
  92 + builder: (context) {
  93 + return Dialog(
  94 + child: ListView(
  95 + children: [
  96 + AspectRatio(
  97 + aspectRatio: 210 / 229,
  98 + child: SfPdfViewer.memory(
  99 + pdf,
  100 + ),
  101 + )
  102 + ],
  103 + ),
  104 + );
  105 + },
  106 + );
  107 + },
  108 + icon: const Icon(Icons.toc),
  109 + ),
  110 + ],
  111 + ),
  112 + body: Column(
  113 + children: [
  114 + Expanded(
  115 + child: RepaintBoundary(
  116 + key: globalKey,
  117 + child: AnimatedBuilder(
  118 + animation: _controller,
  119 + builder: (context, _) {
  120 + return TexMarkdown(_controller.text);
  121 + },
  122 + ),
  123 + ),
  124 + ),
  125 + ConstrainedBox(
  126 + constraints: const BoxConstraints(maxHeight: 200),
  127 + child: Padding(
  128 + padding: const EdgeInsets.all(8.0),
  129 + child: TextField(
  130 + decoration: const InputDecoration(
  131 + border: OutlineInputBorder(), label: Text("Type here:")),
  132 + maxLines: null,
  133 + controller: _controller,
  134 + ),
  135 + ),
  136 + ),
  137 + ],
  138 + ),
  139 + );
  140 + }
  141 +}
  1 +# Project-level configuration.
  2 +cmake_minimum_required(VERSION 3.10)
  3 +project(runner LANGUAGES CXX)
  4 +
  5 +# The name of the executable created for the application. Change this to change
  6 +# the on-disk name of your application.
  7 +set(BINARY_NAME "example")
  8 +# The unique GTK application identifier for this application. See:
  9 +# https://wiki.gnome.org/HowDoI/ChooseApplicationID
  10 +set(APPLICATION_ID "com.example.example")
  11 +
  12 +# Explicitly opt in to modern CMake behaviors to avoid warnings with recent
  13 +# versions of CMake.
  14 +cmake_policy(SET CMP0063 NEW)
  15 +
  16 +# Load bundled libraries from the lib/ directory relative to the binary.
  17 +set(CMAKE_INSTALL_RPATH "$ORIGIN/lib")
  18 +
  19 +# Root filesystem for cross-building.
  20 +if(FLUTTER_TARGET_PLATFORM_SYSROOT)
  21 + set(CMAKE_SYSROOT ${FLUTTER_TARGET_PLATFORM_SYSROOT})
  22 + set(CMAKE_FIND_ROOT_PATH ${CMAKE_SYSROOT})
  23 + set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
  24 + set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
  25 + set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
  26 + set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
  27 +endif()
  28 +
  29 +# Define build configuration options.
  30 +if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
  31 + set(CMAKE_BUILD_TYPE "Debug" CACHE
  32 + STRING "Flutter build mode" FORCE)
  33 + set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS
  34 + "Debug" "Profile" "Release")
  35 +endif()
  36 +
  37 +# Compilation settings that should be applied to most targets.
  38 +#
  39 +# Be cautious about adding new options here, as plugins use this function by
  40 +# default. In most cases, you should add new options to specific targets instead
  41 +# of modifying this function.
  42 +function(APPLY_STANDARD_SETTINGS TARGET)
  43 + target_compile_features(${TARGET} PUBLIC cxx_std_14)
  44 + target_compile_options(${TARGET} PRIVATE -Wall -Werror)
  45 + target_compile_options(${TARGET} PRIVATE "$<$<NOT:$<CONFIG:Debug>>:-O3>")
  46 + target_compile_definitions(${TARGET} PRIVATE "$<$<NOT:$<CONFIG:Debug>>:NDEBUG>")
  47 +endfunction()
  48 +
  49 +# Flutter library and tool build rules.
  50 +set(FLUTTER_MANAGED_DIR "${CMAKE_CURRENT_SOURCE_DIR}/flutter")
  51 +add_subdirectory(${FLUTTER_MANAGED_DIR})
  52 +
  53 +# System-level dependencies.
  54 +find_package(PkgConfig REQUIRED)
  55 +pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0)
  56 +
  57 +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}")
  58 +
  59 +# Define the application target. To change its name, change BINARY_NAME above,
  60 +# not the value here, or `flutter run` will no longer work.
  61 +#
  62 +# Any new source files that you add to the application should be added here.
  63 +add_executable(${BINARY_NAME}
  64 + "main.cc"
  65 + "my_application.cc"
  66 + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc"
  67 +)
  68 +
  69 +# Apply the standard set of build settings. This can be removed for applications
  70 +# that need different build settings.
  71 +apply_standard_settings(${BINARY_NAME})
  72 +
  73 +# Add dependency libraries. Add any application-specific dependencies here.
  74 +target_link_libraries(${BINARY_NAME} PRIVATE flutter)
  75 +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK)
  76 +
  77 +# Run the Flutter tool portions of the build. This must not be removed.
  78 +add_dependencies(${BINARY_NAME} flutter_assemble)
  79 +
  80 +# Only the install-generated bundle's copy of the executable will launch
  81 +# correctly, since the resources must in the right relative locations. To avoid
  82 +# people trying to run the unbundled copy, put it in a subdirectory instead of
  83 +# the default top-level location.
  84 +set_target_properties(${BINARY_NAME}
  85 + PROPERTIES
  86 + RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/intermediates_do_not_run"
  87 +)
  88 +
  89 +# Generated plugin build rules, which manage building the plugins and adding
  90 +# them to the application.
  91 +include(flutter/generated_plugins.cmake)
  92 +
  93 +
  94 +# === Installation ===
  95 +# By default, "installing" just makes a relocatable bundle in the build
  96 +# directory.
  97 +set(BUILD_BUNDLE_DIR "${PROJECT_BINARY_DIR}/bundle")
  98 +if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
  99 + set(CMAKE_INSTALL_PREFIX "${BUILD_BUNDLE_DIR}" CACHE PATH "..." FORCE)
  100 +endif()
  101 +
  102 +# Start with a clean build bundle directory every time.
  103 +install(CODE "
  104 + file(REMOVE_RECURSE \"${BUILD_BUNDLE_DIR}/\")
  105 + " COMPONENT Runtime)
  106 +
  107 +set(INSTALL_BUNDLE_DATA_DIR "${CMAKE_INSTALL_PREFIX}/data")
  108 +set(INSTALL_BUNDLE_LIB_DIR "${CMAKE_INSTALL_PREFIX}/lib")
  109 +
  110 +install(TARGETS ${BINARY_NAME} RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX}"
  111 + COMPONENT Runtime)
  112 +
  113 +install(FILES "${FLUTTER_ICU_DATA_FILE}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}"
  114 + COMPONENT Runtime)
  115 +
  116 +install(FILES "${FLUTTER_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}"
  117 + COMPONENT Runtime)
  118 +
  119 +foreach(bundled_library ${PLUGIN_BUNDLED_LIBRARIES})
  120 + install(FILES "${bundled_library}"
  121 + DESTINATION "${INSTALL_BUNDLE_LIB_DIR}"
  122 + COMPONENT Runtime)
  123 +endforeach(bundled_library)
  124 +
  125 +# Fully re-copy the assets directory on each build to avoid having stale files
  126 +# from a previous install.
  127 +set(FLUTTER_ASSET_DIR_NAME "flutter_assets")
  128 +install(CODE "
  129 + file(REMOVE_RECURSE \"${INSTALL_BUNDLE_DATA_DIR}/${FLUTTER_ASSET_DIR_NAME}\")
  130 + " COMPONENT Runtime)
  131 +install(DIRECTORY "${PROJECT_BUILD_DIR}/${FLUTTER_ASSET_DIR_NAME}"
  132 + DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" COMPONENT Runtime)
  133 +
  134 +# Install the AOT library on non-Debug builds only.
  135 +if(NOT CMAKE_BUILD_TYPE MATCHES "Debug")
  136 + install(FILES "${AOT_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}"
  137 + COMPONENT Runtime)
  138 +endif()
  1 +# This file controls Flutter-level build steps. It should not be edited.
  2 +cmake_minimum_required(VERSION 3.10)
  3 +
  4 +set(EPHEMERAL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/ephemeral")
  5 +
  6 +# Configuration provided via flutter tool.
  7 +include(${EPHEMERAL_DIR}/generated_config.cmake)
  8 +
  9 +# TODO: Move the rest of this into files in ephemeral. See
  10 +# https://github.com/flutter/flutter/issues/57146.
  11 +
  12 +# Serves the same purpose as list(TRANSFORM ... PREPEND ...),
  13 +# which isn't available in 3.10.
  14 +function(list_prepend LIST_NAME PREFIX)
  15 + set(NEW_LIST "")
  16 + foreach(element ${${LIST_NAME}})
  17 + list(APPEND NEW_LIST "${PREFIX}${element}")
  18 + endforeach(element)
  19 + set(${LIST_NAME} "${NEW_LIST}" PARENT_SCOPE)
  20 +endfunction()
  21 +
  22 +# === Flutter Library ===
  23 +# System-level dependencies.
  24 +find_package(PkgConfig REQUIRED)
  25 +pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0)
  26 +pkg_check_modules(GLIB REQUIRED IMPORTED_TARGET glib-2.0)
  27 +pkg_check_modules(GIO REQUIRED IMPORTED_TARGET gio-2.0)
  28 +
  29 +set(FLUTTER_LIBRARY "${EPHEMERAL_DIR}/libflutter_linux_gtk.so")
  30 +
  31 +# Published to parent scope for install step.
  32 +set(FLUTTER_LIBRARY ${FLUTTER_LIBRARY} PARENT_SCOPE)
  33 +set(FLUTTER_ICU_DATA_FILE "${EPHEMERAL_DIR}/icudtl.dat" PARENT_SCOPE)
  34 +set(PROJECT_BUILD_DIR "${PROJECT_DIR}/build/" PARENT_SCOPE)
  35 +set(AOT_LIBRARY "${PROJECT_DIR}/build/lib/libapp.so" PARENT_SCOPE)
  36 +
  37 +list(APPEND FLUTTER_LIBRARY_HEADERS
  38 + "fl_basic_message_channel.h"
  39 + "fl_binary_codec.h"
  40 + "fl_binary_messenger.h"
  41 + "fl_dart_project.h"
  42 + "fl_engine.h"
  43 + "fl_json_message_codec.h"
  44 + "fl_json_method_codec.h"
  45 + "fl_message_codec.h"
  46 + "fl_method_call.h"
  47 + "fl_method_channel.h"
  48 + "fl_method_codec.h"
  49 + "fl_method_response.h"
  50 + "fl_plugin_registrar.h"
  51 + "fl_plugin_registry.h"
  52 + "fl_standard_message_codec.h"
  53 + "fl_standard_method_codec.h"
  54 + "fl_string_codec.h"
  55 + "fl_value.h"
  56 + "fl_view.h"
  57 + "flutter_linux.h"
  58 +)
  59 +list_prepend(FLUTTER_LIBRARY_HEADERS "${EPHEMERAL_DIR}/flutter_linux/")
  60 +add_library(flutter INTERFACE)
  61 +target_include_directories(flutter INTERFACE
  62 + "${EPHEMERAL_DIR}"
  63 +)
  64 +target_link_libraries(flutter INTERFACE "${FLUTTER_LIBRARY}")
  65 +target_link_libraries(flutter INTERFACE
  66 + PkgConfig::GTK
  67 + PkgConfig::GLIB
  68 + PkgConfig::GIO
  69 +)
  70 +add_dependencies(flutter flutter_assemble)
  71 +
  72 +# === Flutter tool backend ===
  73 +# _phony_ is a non-existent file to force this command to run every time,
  74 +# since currently there's no way to get a full input/output list from the
  75 +# flutter tool.
  76 +add_custom_command(
  77 + OUTPUT ${FLUTTER_LIBRARY} ${FLUTTER_LIBRARY_HEADERS}
  78 + ${CMAKE_CURRENT_BINARY_DIR}/_phony_
  79 + COMMAND ${CMAKE_COMMAND} -E env
  80 + ${FLUTTER_TOOL_ENVIRONMENT}
  81 + "${FLUTTER_ROOT}/packages/flutter_tools/bin/tool_backend.sh"
  82 + ${FLUTTER_TARGET_PLATFORM} ${CMAKE_BUILD_TYPE}
  83 + VERBATIM
  84 +)
  85 +add_custom_target(flutter_assemble DEPENDS
  86 + "${FLUTTER_LIBRARY}"
  87 + ${FLUTTER_LIBRARY_HEADERS}
  88 +)
  1 +//
  2 +// Generated file. Do not edit.
  3 +//
  4 +
  5 +// clang-format off
  6 +
  7 +#include "generated_plugin_registrant.h"
  8 +
  9 +#include <url_launcher_linux/url_launcher_plugin.h>
  10 +
  11 +void fl_register_plugins(FlPluginRegistry* registry) {
  12 + g_autoptr(FlPluginRegistrar) url_launcher_linux_registrar =
  13 + fl_plugin_registry_get_registrar_for_plugin(registry, "UrlLauncherPlugin");
  14 + url_launcher_plugin_register_with_registrar(url_launcher_linux_registrar);
  15 +}
  1 +//
  2 +// Generated file. Do not edit.
  3 +//
  4 +
  5 +// clang-format off
  6 +
  7 +#ifndef GENERATED_PLUGIN_REGISTRANT_
  8 +#define GENERATED_PLUGIN_REGISTRANT_
  9 +
  10 +#include <flutter_linux/flutter_linux.h>
  11 +
  12 +// Registers Flutter plugins.
  13 +void fl_register_plugins(FlPluginRegistry* registry);
  14 +
  15 +#endif // GENERATED_PLUGIN_REGISTRANT_
  1 +#
  2 +# Generated file, do not edit.
  3 +#
  4 +
  5 +list(APPEND FLUTTER_PLUGIN_LIST
  6 + url_launcher_linux
  7 +)
  8 +
  9 +list(APPEND FLUTTER_FFI_PLUGIN_LIST
  10 +)
  11 +
  12 +set(PLUGIN_BUNDLED_LIBRARIES)
  13 +
  14 +foreach(plugin ${FLUTTER_PLUGIN_LIST})
  15 + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${plugin}/linux plugins/${plugin})
  16 + target_link_libraries(${BINARY_NAME} PRIVATE ${plugin}_plugin)
  17 + list(APPEND PLUGIN_BUNDLED_LIBRARIES $<TARGET_FILE:${plugin}_plugin>)
  18 + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${plugin}_bundled_libraries})
  19 +endforeach(plugin)
  20 +
  21 +foreach(ffi_plugin ${FLUTTER_FFI_PLUGIN_LIST})
  22 + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${ffi_plugin}/linux plugins/${ffi_plugin})
  23 + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${ffi_plugin}_bundled_libraries})
  24 +endforeach(ffi_plugin)
  1 +#include "my_application.h"
  2 +
  3 +int main(int argc, char** argv) {
  4 + g_autoptr(MyApplication) app = my_application_new();
  5 + return g_application_run(G_APPLICATION(app), argc, argv);
  6 +}
  1 +#include "my_application.h"
  2 +
  3 +#include <flutter_linux/flutter_linux.h>
  4 +#ifdef GDK_WINDOWING_X11
  5 +#include <gdk/gdkx.h>
  6 +#endif
  7 +
  8 +#include "flutter/generated_plugin_registrant.h"
  9 +
  10 +struct _MyApplication {
  11 + GtkApplication parent_instance;
  12 + char** dart_entrypoint_arguments;
  13 +};
  14 +
  15 +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION)
  16 +
  17 +// Implements GApplication::activate.
  18 +static void my_application_activate(GApplication* application) {
  19 + MyApplication* self = MY_APPLICATION(application);
  20 + GtkWindow* window =
  21 + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application)));
  22 +
  23 + // Use a header bar when running in GNOME as this is the common style used
  24 + // by applications and is the setup most users will be using (e.g. Ubuntu
  25 + // desktop).
  26 + // If running on X and not using GNOME then just use a traditional title bar
  27 + // in case the window manager does more exotic layout, e.g. tiling.
  28 + // If running on Wayland assume the header bar will work (may need changing
  29 + // if future cases occur).
  30 + gboolean use_header_bar = TRUE;
  31 +#ifdef GDK_WINDOWING_X11
  32 + GdkScreen* screen = gtk_window_get_screen(window);
  33 + if (GDK_IS_X11_SCREEN(screen)) {
  34 + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen);
  35 + if (g_strcmp0(wm_name, "GNOME Shell") != 0) {
  36 + use_header_bar = FALSE;
  37 + }
  38 + }
  39 +#endif
  40 + if (use_header_bar) {
  41 + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new());
  42 + gtk_widget_show(GTK_WIDGET(header_bar));
  43 + gtk_header_bar_set_title(header_bar, "example");
  44 + gtk_header_bar_set_show_close_button(header_bar, TRUE);
  45 + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar));
  46 + } else {
  47 + gtk_window_set_title(window, "example");
  48 + }
  49 +
  50 + gtk_window_set_default_size(window, 1280, 720);
  51 + gtk_widget_show(GTK_WIDGET(window));
  52 +
  53 + g_autoptr(FlDartProject) project = fl_dart_project_new();
  54 + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments);
  55 +
  56 + FlView* view = fl_view_new(project);
  57 + gtk_widget_show(GTK_WIDGET(view));
  58 + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view));
  59 +
  60 + fl_register_plugins(FL_PLUGIN_REGISTRY(view));
  61 +
  62 + gtk_widget_grab_focus(GTK_WIDGET(view));
  63 +}
  64 +
  65 +// Implements GApplication::local_command_line.
  66 +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) {
  67 + MyApplication* self = MY_APPLICATION(application);
  68 + // Strip out the first argument as it is the binary name.
  69 + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1);
  70 +
  71 + g_autoptr(GError) error = nullptr;
  72 + if (!g_application_register(application, nullptr, &error)) {
  73 + g_warning("Failed to register: %s", error->message);
  74 + *exit_status = 1;
  75 + return TRUE;
  76 + }
  77 +
  78 + g_application_activate(application);
  79 + *exit_status = 0;
  80 +
  81 + return TRUE;
  82 +}
  83 +
  84 +// Implements GObject::dispose.
  85 +static void my_application_dispose(GObject* object) {
  86 + MyApplication* self = MY_APPLICATION(object);
  87 + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev);
  88 + G_OBJECT_CLASS(my_application_parent_class)->dispose(object);
  89 +}
  90 +
  91 +static void my_application_class_init(MyApplicationClass* klass) {
  92 + G_APPLICATION_CLASS(klass)->activate = my_application_activate;
  93 + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line;
  94 + G_OBJECT_CLASS(klass)->dispose = my_application_dispose;
  95 +}
  96 +
  97 +static void my_application_init(MyApplication* self) {}
  98 +
  99 +MyApplication* my_application_new() {
  100 + return MY_APPLICATION(g_object_new(my_application_get_type(),
  101 + "application-id", APPLICATION_ID,
  102 + "flags", G_APPLICATION_NON_UNIQUE,
  103 + nullptr));
  104 +}
  1 +#ifndef FLUTTER_MY_APPLICATION_H_
  2 +#define FLUTTER_MY_APPLICATION_H_
  3 +
  4 +#include <gtk/gtk.h>
  5 +
  6 +G_DECLARE_FINAL_TYPE(MyApplication, my_application, MY, APPLICATION,
  7 + GtkApplication)
  8 +
  9 +/**
  10 + * my_application_new:
  11 + *
  12 + * Creates a new Flutter-based application.
  13 + *
  14 + * Returns: a new #MyApplication.
  15 + */
  16 +MyApplication* my_application_new();
  17 +
  18 +#endif // FLUTTER_MY_APPLICATION_H_
  1 +# Flutter-related
  2 +**/Flutter/ephemeral/
  3 +**/Pods/
  4 +
  5 +# Xcode-related
  6 +**/dgph
  7 +**/xcuserdata/
  1 +#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"
  2 +#include "ephemeral/Flutter-Generated.xcconfig"
  1 +#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"
  2 +#include "ephemeral/Flutter-Generated.xcconfig"
  1 +//
  2 +// Generated file. Do not edit.
  3 +//
  4 +
  5 +import FlutterMacOS
  6 +import Foundation
  7 +
  8 +import syncfusion_pdfviewer_macos
  9 +import url_launcher_macos
  10 +
  11 +func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) {
  12 + SyncfusionFlutterPdfViewerPlugin.register(with: registry.registrar(forPlugin: "SyncfusionFlutterPdfViewerPlugin"))
  13 + UrlLauncherPlugin.register(with: registry.registrar(forPlugin: "UrlLauncherPlugin"))
  14 +}
  1 +platform :osx, '10.14'
  2 +
  3 +# CocoaPods analytics sends network stats synchronously affecting flutter build latency.
  4 +ENV['COCOAPODS_DISABLE_STATS'] = 'true'
  5 +
  6 +project 'Runner', {
  7 + 'Debug' => :debug,
  8 + 'Profile' => :release,
  9 + 'Release' => :release,
  10 +}
  11 +
  12 +def flutter_root
  13 + generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'ephemeral', 'Flutter-Generated.xcconfig'), __FILE__)
  14 + unless File.exist?(generated_xcode_build_settings_path)
  15 + raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure \"flutter pub get\" is executed first"
  16 + end
  17 +
  18 + File.foreach(generated_xcode_build_settings_path) do |line|
  19 + matches = line.match(/FLUTTER_ROOT\=(.*)/)
  20 + return matches[1].strip if matches
  21 + end
  22 + raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Flutter-Generated.xcconfig, then run \"flutter pub get\""
  23 +end
  24 +
  25 +require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root)
  26 +
  27 +flutter_macos_podfile_setup
  28 +
  29 +target 'Runner' do
  30 + use_frameworks!
  31 + use_modular_headers!
  32 +
  33 + flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__))
  34 +end
  35 +
  36 +post_install do |installer|
  37 + installer.pods_project.targets.each do |target|
  38 + flutter_additional_macos_build_settings(target)
  39 + end
  40 +end
  1 +PODS:
  2 + - FlutterMacOS (1.0.0)
  3 + - syncfusion_pdfviewer_macos (0.0.1):
  4 + - FlutterMacOS
  5 + - url_launcher_macos (0.0.1):
  6 + - FlutterMacOS
  7 +
  8 +DEPENDENCIES:
  9 + - FlutterMacOS (from `Flutter/ephemeral`)
  10 + - syncfusion_pdfviewer_macos (from `Flutter/ephemeral/.symlinks/plugins/syncfusion_pdfviewer_macos/macos`)
  11 + - url_launcher_macos (from `Flutter/ephemeral/.symlinks/plugins/url_launcher_macos/macos`)
  12 +
  13 +EXTERNAL SOURCES:
  14 + FlutterMacOS:
  15 + :path: Flutter/ephemeral
  16 + syncfusion_pdfviewer_macos:
  17 + :path: Flutter/ephemeral/.symlinks/plugins/syncfusion_pdfviewer_macos/macos
  18 + url_launcher_macos:
  19 + :path: Flutter/ephemeral/.symlinks/plugins/url_launcher_macos/macos
  20 +
  21 +SPEC CHECKSUMS:
  22 + FlutterMacOS: 8f6f14fa908a6fb3fba0cd85dbd81ec4b251fb24
  23 + syncfusion_pdfviewer_macos: e9194851581cad04b28b53913d0636d39a4ed4b2
  24 + url_launcher_macos: 5335912b679c073563f29d89d33d10d459f95451
  25 +
  26 +PODFILE CHECKSUM: 353c8bcc5d5b0994e508d035b5431cfe18c1dea7
  27 +
  28 +COCOAPODS: 1.11.3
  1 +// !$*UTF8*$!
  2 +{
  3 + archiveVersion = 1;
  4 + classes = {
  5 + };
  6 + objectVersion = 54;
  7 + objects = {
  8 +
  9 +/* Begin PBXAggregateTarget section */
  10 + 33CC111A2044C6BA0003C045 /* Flutter Assemble */ = {
  11 + isa = PBXAggregateTarget;
  12 + buildConfigurationList = 33CC111B2044C6BA0003C045 /* Build configuration list for PBXAggregateTarget "Flutter Assemble" */;
  13 + buildPhases = (
  14 + 33CC111E2044C6BF0003C045 /* ShellScript */,
  15 + );
  16 + dependencies = (
  17 + );
  18 + name = "Flutter Assemble";
  19 + productName = FLX;
  20 + };
  21 +/* End PBXAggregateTarget section */
  22 +
  23 +/* Begin PBXBuildFile section */
  24 + 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; };
  25 + 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; };
  26 + 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; };
  27 + 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; };
  28 + 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; };
  29 + 96483AC961C8CEB2D031EF2E /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AB13C8D79D14DE03551CD1AC /* Pods_Runner.framework */; };
  30 +/* End PBXBuildFile section */
  31 +
  32 +/* Begin PBXContainerItemProxy section */
  33 + 33CC111F2044C79F0003C045 /* PBXContainerItemProxy */ = {
  34 + isa = PBXContainerItemProxy;
  35 + containerPortal = 33CC10E52044A3C60003C045 /* Project object */;
  36 + proxyType = 1;
  37 + remoteGlobalIDString = 33CC111A2044C6BA0003C045;
  38 + remoteInfo = FLX;
  39 + };
  40 +/* End PBXContainerItemProxy section */
  41 +
  42 +/* Begin PBXCopyFilesBuildPhase section */
  43 + 33CC110E2044A8840003C045 /* Bundle Framework */ = {
  44 + isa = PBXCopyFilesBuildPhase;
  45 + buildActionMask = 2147483647;
  46 + dstPath = "";
  47 + dstSubfolderSpec = 10;
  48 + files = (
  49 + );
  50 + name = "Bundle Framework";
  51 + runOnlyForDeploymentPostprocessing = 0;
  52 + };
  53 +/* End PBXCopyFilesBuildPhase section */
  54 +
  55 +/* Begin PBXFileReference section */
  56 + 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = "<group>"; };
  57 + 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = "<group>"; };
  58 + 33CC10ED2044A3C60003C045 /* example.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = example.app; sourceTree = BUILT_PRODUCTS_DIR; };
  59 + 33CC10F02044A3C60003C045 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
  60 + 33CC10F22044A3C60003C045 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = Runner/Assets.xcassets; sourceTree = "<group>"; };
  61 + 33CC10F52044A3C60003C045 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = "<group>"; };
  62 + 33CC10F72044A3C60003C045 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = Info.plist; path = Runner/Info.plist; sourceTree = "<group>"; };
  63 + 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainFlutterWindow.swift; sourceTree = "<group>"; };
  64 + 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Debug.xcconfig"; sourceTree = "<group>"; };
  65 + 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Release.xcconfig"; sourceTree = "<group>"; };
  66 + 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = "Flutter-Generated.xcconfig"; path = "ephemeral/Flutter-Generated.xcconfig"; sourceTree = "<group>"; };
  67 + 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = "<group>"; };
  68 + 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = "<group>"; };
  69 + 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = "<group>"; };
  70 + 6325390D56933CDE4DCDB206 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = "<group>"; };
  71 + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = "<group>"; };
  72 + 916D474A1F25051B3CA702AA /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = "<group>"; };
  73 + 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = "<group>"; };
  74 + AB13C8D79D14DE03551CD1AC /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; };
  75 + B9DF4D0F03039DBDFB2EA2FA /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = "<group>"; };
  76 +/* End PBXFileReference section */
  77 +
  78 +/* Begin PBXFrameworksBuildPhase section */
  79 + 33CC10EA2044A3C60003C045 /* Frameworks */ = {
  80 + isa = PBXFrameworksBuildPhase;
  81 + buildActionMask = 2147483647;
  82 + files = (
  83 + 96483AC961C8CEB2D031EF2E /* Pods_Runner.framework in Frameworks */,
  84 + );
  85 + runOnlyForDeploymentPostprocessing = 0;
  86 + };
  87 +/* End PBXFrameworksBuildPhase section */
  88 +
  89 +/* Begin PBXGroup section */
  90 + 33BA886A226E78AF003329D5 /* Configs */ = {
  91 + isa = PBXGroup;
  92 + children = (
  93 + 33E5194F232828860026EE4D /* AppInfo.xcconfig */,
  94 + 9740EEB21CF90195004384FC /* Debug.xcconfig */,
  95 + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */,
  96 + 333000ED22D3DE5D00554162 /* Warnings.xcconfig */,
  97 + );
  98 + path = Configs;
  99 + sourceTree = "<group>";
  100 + };
  101 + 33CC10E42044A3C60003C045 = {
  102 + isa = PBXGroup;
  103 + children = (
  104 + 33FAB671232836740065AC1E /* Runner */,
  105 + 33CEB47122A05771004F2AC0 /* Flutter */,
  106 + 33CC10EE2044A3C60003C045 /* Products */,
  107 + D73912EC22F37F3D000D13A0 /* Frameworks */,
  108 + E13714E6ADE42DE5503C1CD9 /* Pods */,
  109 + );
  110 + sourceTree = "<group>";
  111 + };
  112 + 33CC10EE2044A3C60003C045 /* Products */ = {
  113 + isa = PBXGroup;
  114 + children = (
  115 + 33CC10ED2044A3C60003C045 /* example.app */,
  116 + );
  117 + name = Products;
  118 + sourceTree = "<group>";
  119 + };
  120 + 33CC11242044D66E0003C045 /* Resources */ = {
  121 + isa = PBXGroup;
  122 + children = (
  123 + 33CC10F22044A3C60003C045 /* Assets.xcassets */,
  124 + 33CC10F42044A3C60003C045 /* MainMenu.xib */,
  125 + 33CC10F72044A3C60003C045 /* Info.plist */,
  126 + );
  127 + name = Resources;
  128 + path = ..;
  129 + sourceTree = "<group>";
  130 + };
  131 + 33CEB47122A05771004F2AC0 /* Flutter */ = {
  132 + isa = PBXGroup;
  133 + children = (
  134 + 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */,
  135 + 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */,
  136 + 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */,
  137 + 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */,
  138 + );
  139 + path = Flutter;
  140 + sourceTree = "<group>";
  141 + };
  142 + 33FAB671232836740065AC1E /* Runner */ = {
  143 + isa = PBXGroup;
  144 + children = (
  145 + 33CC10F02044A3C60003C045 /* AppDelegate.swift */,
  146 + 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */,
  147 + 33E51913231747F40026EE4D /* DebugProfile.entitlements */,
  148 + 33E51914231749380026EE4D /* Release.entitlements */,
  149 + 33CC11242044D66E0003C045 /* Resources */,
  150 + 33BA886A226E78AF003329D5 /* Configs */,
  151 + );
  152 + path = Runner;
  153 + sourceTree = "<group>";
  154 + };
  155 + D73912EC22F37F3D000D13A0 /* Frameworks */ = {
  156 + isa = PBXGroup;
  157 + children = (
  158 + AB13C8D79D14DE03551CD1AC /* Pods_Runner.framework */,
  159 + );
  160 + name = Frameworks;
  161 + sourceTree = "<group>";
  162 + };
  163 + E13714E6ADE42DE5503C1CD9 /* Pods */ = {
  164 + isa = PBXGroup;
  165 + children = (
  166 + 916D474A1F25051B3CA702AA /* Pods-Runner.debug.xcconfig */,
  167 + 6325390D56933CDE4DCDB206 /* Pods-Runner.release.xcconfig */,
  168 + B9DF4D0F03039DBDFB2EA2FA /* Pods-Runner.profile.xcconfig */,
  169 + );
  170 + name = Pods;
  171 + path = Pods;
  172 + sourceTree = "<group>";
  173 + };
  174 +/* End PBXGroup section */
  175 +
  176 +/* Begin PBXNativeTarget section */
  177 + 33CC10EC2044A3C60003C045 /* Runner */ = {
  178 + isa = PBXNativeTarget;
  179 + buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */;
  180 + buildPhases = (
  181 + B1D7D31052DF0F2769D415FB /* [CP] Check Pods Manifest.lock */,
  182 + 33CC10E92044A3C60003C045 /* Sources */,
  183 + 33CC10EA2044A3C60003C045 /* Frameworks */,
  184 + 33CC10EB2044A3C60003C045 /* Resources */,
  185 + 33CC110E2044A8840003C045 /* Bundle Framework */,
  186 + 3399D490228B24CF009A79C7 /* ShellScript */,
  187 + 4B09BA673B618510AAAF08F5 /* [CP] Embed Pods Frameworks */,
  188 + );
  189 + buildRules = (
  190 + );
  191 + dependencies = (
  192 + 33CC11202044C79F0003C045 /* PBXTargetDependency */,
  193 + );
  194 + name = Runner;
  195 + productName = Runner;
  196 + productReference = 33CC10ED2044A3C60003C045 /* example.app */;
  197 + productType = "com.apple.product-type.application";
  198 + };
  199 +/* End PBXNativeTarget section */
  200 +
  201 +/* Begin PBXProject section */
  202 + 33CC10E52044A3C60003C045 /* Project object */ = {
  203 + isa = PBXProject;
  204 + attributes = {
  205 + LastSwiftUpdateCheck = 0920;
  206 + LastUpgradeCheck = 1300;
  207 + ORGANIZATIONNAME = "";
  208 + TargetAttributes = {
  209 + 33CC10EC2044A3C60003C045 = {
  210 + CreatedOnToolsVersion = 9.2;
  211 + LastSwiftMigration = 1100;
  212 + ProvisioningStyle = Automatic;
  213 + SystemCapabilities = {
  214 + com.apple.Sandbox = {
  215 + enabled = 1;
  216 + };
  217 + };
  218 + };
  219 + 33CC111A2044C6BA0003C045 = {
  220 + CreatedOnToolsVersion = 9.2;
  221 + ProvisioningStyle = Manual;
  222 + };
  223 + };
  224 + };
  225 + buildConfigurationList = 33CC10E82044A3C60003C045 /* Build configuration list for PBXProject "Runner" */;
  226 + compatibilityVersion = "Xcode 9.3";
  227 + developmentRegion = en;
  228 + hasScannedForEncodings = 0;
  229 + knownRegions = (
  230 + en,
  231 + Base,
  232 + );
  233 + mainGroup = 33CC10E42044A3C60003C045;
  234 + productRefGroup = 33CC10EE2044A3C60003C045 /* Products */;
  235 + projectDirPath = "";
  236 + projectRoot = "";
  237 + targets = (
  238 + 33CC10EC2044A3C60003C045 /* Runner */,
  239 + 33CC111A2044C6BA0003C045 /* Flutter Assemble */,
  240 + );
  241 + };
  242 +/* End PBXProject section */
  243 +
  244 +/* Begin PBXResourcesBuildPhase section */
  245 + 33CC10EB2044A3C60003C045 /* Resources */ = {
  246 + isa = PBXResourcesBuildPhase;
  247 + buildActionMask = 2147483647;
  248 + files = (
  249 + 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */,
  250 + 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */,
  251 + );
  252 + runOnlyForDeploymentPostprocessing = 0;
  253 + };
  254 +/* End PBXResourcesBuildPhase section */
  255 +
  256 +/* Begin PBXShellScriptBuildPhase section */
  257 + 3399D490228B24CF009A79C7 /* ShellScript */ = {
  258 + isa = PBXShellScriptBuildPhase;
  259 + alwaysOutOfDate = 1;
  260 + buildActionMask = 2147483647;
  261 + files = (
  262 + );
  263 + inputFileListPaths = (
  264 + );
  265 + inputPaths = (
  266 + );
  267 + outputFileListPaths = (
  268 + );
  269 + outputPaths = (
  270 + );
  271 + runOnlyForDeploymentPostprocessing = 0;
  272 + shellPath = /bin/sh;
  273 + shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n";
  274 + };
  275 + 33CC111E2044C6BF0003C045 /* ShellScript */ = {
  276 + isa = PBXShellScriptBuildPhase;
  277 + buildActionMask = 2147483647;
  278 + files = (
  279 + );
  280 + inputFileListPaths = (
  281 + Flutter/ephemeral/FlutterInputs.xcfilelist,
  282 + );
  283 + inputPaths = (
  284 + Flutter/ephemeral/tripwire,
  285 + );
  286 + outputFileListPaths = (
  287 + Flutter/ephemeral/FlutterOutputs.xcfilelist,
  288 + );
  289 + outputPaths = (
  290 + );
  291 + runOnlyForDeploymentPostprocessing = 0;
  292 + shellPath = /bin/sh;
  293 + shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire";
  294 + };
  295 + 4B09BA673B618510AAAF08F5 /* [CP] Embed Pods Frameworks */ = {
  296 + isa = PBXShellScriptBuildPhase;
  297 + buildActionMask = 2147483647;
  298 + files = (
  299 + );
  300 + inputFileListPaths = (
  301 + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist",
  302 + );
  303 + name = "[CP] Embed Pods Frameworks";
  304 + outputFileListPaths = (
  305 + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist",
  306 + );
  307 + runOnlyForDeploymentPostprocessing = 0;
  308 + shellPath = /bin/sh;
  309 + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n";
  310 + showEnvVarsInLog = 0;
  311 + };
  312 + B1D7D31052DF0F2769D415FB /* [CP] Check Pods Manifest.lock */ = {
  313 + isa = PBXShellScriptBuildPhase;
  314 + buildActionMask = 2147483647;
  315 + files = (
  316 + );
  317 + inputFileListPaths = (
  318 + );
  319 + inputPaths = (
  320 + "${PODS_PODFILE_DIR_PATH}/Podfile.lock",
  321 + "${PODS_ROOT}/Manifest.lock",
  322 + );
  323 + name = "[CP] Check Pods Manifest.lock";
  324 + outputFileListPaths = (
  325 + );
  326 + outputPaths = (
  327 + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt",
  328 + );
  329 + runOnlyForDeploymentPostprocessing = 0;
  330 + shellPath = /bin/sh;
  331 + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
  332 + showEnvVarsInLog = 0;
  333 + };
  334 +/* End PBXShellScriptBuildPhase section */
  335 +
  336 +/* Begin PBXSourcesBuildPhase section */
  337 + 33CC10E92044A3C60003C045 /* Sources */ = {
  338 + isa = PBXSourcesBuildPhase;
  339 + buildActionMask = 2147483647;
  340 + files = (
  341 + 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */,
  342 + 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */,
  343 + 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */,
  344 + );
  345 + runOnlyForDeploymentPostprocessing = 0;
  346 + };
  347 +/* End PBXSourcesBuildPhase section */
  348 +
  349 +/* Begin PBXTargetDependency section */
  350 + 33CC11202044C79F0003C045 /* PBXTargetDependency */ = {
  351 + isa = PBXTargetDependency;
  352 + target = 33CC111A2044C6BA0003C045 /* Flutter Assemble */;
  353 + targetProxy = 33CC111F2044C79F0003C045 /* PBXContainerItemProxy */;
  354 + };
  355 +/* End PBXTargetDependency section */
  356 +
  357 +/* Begin PBXVariantGroup section */
  358 + 33CC10F42044A3C60003C045 /* MainMenu.xib */ = {
  359 + isa = PBXVariantGroup;
  360 + children = (
  361 + 33CC10F52044A3C60003C045 /* Base */,
  362 + );
  363 + name = MainMenu.xib;
  364 + path = Runner;
  365 + sourceTree = "<group>";
  366 + };
  367 +/* End PBXVariantGroup section */
  368 +
  369 +/* Begin XCBuildConfiguration section */
  370 + 338D0CE9231458BD00FA5F75 /* Profile */ = {
  371 + isa = XCBuildConfiguration;
  372 + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
  373 + buildSettings = {
  374 + ALWAYS_SEARCH_USER_PATHS = NO;
  375 + CLANG_ANALYZER_NONNULL = YES;
  376 + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
  377 + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
  378 + CLANG_CXX_LIBRARY = "libc++";
  379 + CLANG_ENABLE_MODULES = YES;
  380 + CLANG_ENABLE_OBJC_ARC = YES;
  381 + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
  382 + CLANG_WARN_BOOL_CONVERSION = YES;
  383 + CLANG_WARN_CONSTANT_CONVERSION = YES;
  384 + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
  385 + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
  386 + CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
  387 + CLANG_WARN_EMPTY_BODY = YES;
  388 + CLANG_WARN_ENUM_CONVERSION = YES;
  389 + CLANG_WARN_INFINITE_RECURSION = YES;
  390 + CLANG_WARN_INT_CONVERSION = YES;
  391 + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
  392 + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
  393 + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
  394 + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
  395 + CLANG_WARN_SUSPICIOUS_MOVE = YES;
  396 + CODE_SIGN_IDENTITY = "-";
  397 + COPY_PHASE_STRIP = NO;
  398 + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
  399 + ENABLE_NS_ASSERTIONS = NO;
  400 + ENABLE_STRICT_OBJC_MSGSEND = YES;
  401 + GCC_C_LANGUAGE_STANDARD = gnu11;
  402 + GCC_NO_COMMON_BLOCKS = YES;
  403 + GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
  404 + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
  405 + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
  406 + GCC_WARN_UNUSED_FUNCTION = YES;
  407 + GCC_WARN_UNUSED_VARIABLE = YES;
  408 + MACOSX_DEPLOYMENT_TARGET = 10.14;
  409 + MTL_ENABLE_DEBUG_INFO = NO;
  410 + SDKROOT = macosx;
  411 + SWIFT_COMPILATION_MODE = wholemodule;
  412 + SWIFT_OPTIMIZATION_LEVEL = "-O";
  413 + };
  414 + name = Profile;
  415 + };
  416 + 338D0CEA231458BD00FA5F75 /* Profile */ = {
  417 + isa = XCBuildConfiguration;
  418 + baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */;
  419 + buildSettings = {
  420 + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
  421 + CLANG_ENABLE_MODULES = YES;
  422 + CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements;
  423 + CODE_SIGN_STYLE = Automatic;
  424 + COMBINE_HIDPI_IMAGES = YES;
  425 + INFOPLIST_FILE = Runner/Info.plist;
  426 + LD_RUNPATH_SEARCH_PATHS = (
  427 + "$(inherited)",
  428 + "@executable_path/../Frameworks",
  429 + );
  430 + PROVISIONING_PROFILE_SPECIFIER = "";
  431 + SWIFT_VERSION = 5.0;
  432 + };
  433 + name = Profile;
  434 + };
  435 + 338D0CEB231458BD00FA5F75 /* Profile */ = {
  436 + isa = XCBuildConfiguration;
  437 + buildSettings = {
  438 + CODE_SIGN_STYLE = Manual;
  439 + PRODUCT_NAME = "$(TARGET_NAME)";
  440 + };
  441 + name = Profile;
  442 + };
  443 + 33CC10F92044A3C60003C045 /* Debug */ = {
  444 + isa = XCBuildConfiguration;
  445 + baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */;
  446 + buildSettings = {
  447 + ALWAYS_SEARCH_USER_PATHS = NO;
  448 + CLANG_ANALYZER_NONNULL = YES;
  449 + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
  450 + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
  451 + CLANG_CXX_LIBRARY = "libc++";
  452 + CLANG_ENABLE_MODULES = YES;
  453 + CLANG_ENABLE_OBJC_ARC = YES;
  454 + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
  455 + CLANG_WARN_BOOL_CONVERSION = YES;
  456 + CLANG_WARN_CONSTANT_CONVERSION = YES;
  457 + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
  458 + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
  459 + CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
  460 + CLANG_WARN_EMPTY_BODY = YES;
  461 + CLANG_WARN_ENUM_CONVERSION = YES;
  462 + CLANG_WARN_INFINITE_RECURSION = YES;
  463 + CLANG_WARN_INT_CONVERSION = YES;
  464 + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
  465 + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
  466 + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
  467 + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
  468 + CLANG_WARN_SUSPICIOUS_MOVE = YES;
  469 + CODE_SIGN_IDENTITY = "-";
  470 + COPY_PHASE_STRIP = NO;
  471 + DEBUG_INFORMATION_FORMAT = dwarf;
  472 + ENABLE_STRICT_OBJC_MSGSEND = YES;
  473 + ENABLE_TESTABILITY = YES;
  474 + GCC_C_LANGUAGE_STANDARD = gnu11;
  475 + GCC_DYNAMIC_NO_PIC = NO;
  476 + GCC_NO_COMMON_BLOCKS = YES;
  477 + GCC_OPTIMIZATION_LEVEL = 0;
  478 + GCC_PREPROCESSOR_DEFINITIONS = (
  479 + "DEBUG=1",
  480 + "$(inherited)",
  481 + );
  482 + GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
  483 + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
  484 + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
  485 + GCC_WARN_UNUSED_FUNCTION = YES;
  486 + GCC_WARN_UNUSED_VARIABLE = YES;
  487 + MACOSX_DEPLOYMENT_TARGET = 10.14;
  488 + MTL_ENABLE_DEBUG_INFO = YES;
  489 + ONLY_ACTIVE_ARCH = YES;
  490 + SDKROOT = macosx;
  491 + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
  492 + SWIFT_OPTIMIZATION_LEVEL = "-Onone";
  493 + };
  494 + name = Debug;
  495 + };
  496 + 33CC10FA2044A3C60003C045 /* Release */ = {
  497 + isa = XCBuildConfiguration;
  498 + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
  499 + buildSettings = {
  500 + ALWAYS_SEARCH_USER_PATHS = NO;
  501 + CLANG_ANALYZER_NONNULL = YES;
  502 + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
  503 + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
  504 + CLANG_CXX_LIBRARY = "libc++";
  505 + CLANG_ENABLE_MODULES = YES;
  506 + CLANG_ENABLE_OBJC_ARC = YES;
  507 + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
  508 + CLANG_WARN_BOOL_CONVERSION = YES;
  509 + CLANG_WARN_CONSTANT_CONVERSION = YES;
  510 + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
  511 + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
  512 + CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
  513 + CLANG_WARN_EMPTY_BODY = YES;
  514 + CLANG_WARN_ENUM_CONVERSION = YES;
  515 + CLANG_WARN_INFINITE_RECURSION = YES;
  516 + CLANG_WARN_INT_CONVERSION = YES;
  517 + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
  518 + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
  519 + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
  520 + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
  521 + CLANG_WARN_SUSPICIOUS_MOVE = YES;
  522 + CODE_SIGN_IDENTITY = "-";
  523 + COPY_PHASE_STRIP = NO;
  524 + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
  525 + ENABLE_NS_ASSERTIONS = NO;
  526 + ENABLE_STRICT_OBJC_MSGSEND = YES;
  527 + GCC_C_LANGUAGE_STANDARD = gnu11;
  528 + GCC_NO_COMMON_BLOCKS = YES;
  529 + GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
  530 + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
  531 + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
  532 + GCC_WARN_UNUSED_FUNCTION = YES;
  533 + GCC_WARN_UNUSED_VARIABLE = YES;
  534 + MACOSX_DEPLOYMENT_TARGET = 10.14;
  535 + MTL_ENABLE_DEBUG_INFO = NO;
  536 + SDKROOT = macosx;
  537 + SWIFT_COMPILATION_MODE = wholemodule;
  538 + SWIFT_OPTIMIZATION_LEVEL = "-O";
  539 + };
  540 + name = Release;
  541 + };
  542 + 33CC10FC2044A3C60003C045 /* Debug */ = {
  543 + isa = XCBuildConfiguration;
  544 + baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */;
  545 + buildSettings = {
  546 + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
  547 + CLANG_ENABLE_MODULES = YES;
  548 + CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements;
  549 + CODE_SIGN_STYLE = Automatic;
  550 + COMBINE_HIDPI_IMAGES = YES;
  551 + INFOPLIST_FILE = Runner/Info.plist;
  552 + LD_RUNPATH_SEARCH_PATHS = (
  553 + "$(inherited)",
  554 + "@executable_path/../Frameworks",
  555 + );
  556 + PROVISIONING_PROFILE_SPECIFIER = "";
  557 + SWIFT_OPTIMIZATION_LEVEL = "-Onone";
  558 + SWIFT_VERSION = 5.0;
  559 + };
  560 + name = Debug;
  561 + };
  562 + 33CC10FD2044A3C60003C045 /* Release */ = {
  563 + isa = XCBuildConfiguration;
  564 + baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */;
  565 + buildSettings = {
  566 + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
  567 + CLANG_ENABLE_MODULES = YES;
  568 + CODE_SIGN_ENTITLEMENTS = Runner/Release.entitlements;
  569 + CODE_SIGN_STYLE = Automatic;
  570 + COMBINE_HIDPI_IMAGES = YES;
  571 + INFOPLIST_FILE = Runner/Info.plist;
  572 + LD_RUNPATH_SEARCH_PATHS = (
  573 + "$(inherited)",
  574 + "@executable_path/../Frameworks",
  575 + );
  576 + PROVISIONING_PROFILE_SPECIFIER = "";
  577 + SWIFT_VERSION = 5.0;
  578 + };
  579 + name = Release;
  580 + };
  581 + 33CC111C2044C6BA0003C045 /* Debug */ = {
  582 + isa = XCBuildConfiguration;
  583 + buildSettings = {
  584 + CODE_SIGN_STYLE = Manual;
  585 + PRODUCT_NAME = "$(TARGET_NAME)";
  586 + };
  587 + name = Debug;
  588 + };
  589 + 33CC111D2044C6BA0003C045 /* Release */ = {
  590 + isa = XCBuildConfiguration;
  591 + buildSettings = {
  592 + CODE_SIGN_STYLE = Automatic;
  593 + PRODUCT_NAME = "$(TARGET_NAME)";
  594 + };
  595 + name = Release;
  596 + };
  597 +/* End XCBuildConfiguration section */
  598 +
  599 +/* Begin XCConfigurationList section */
  600 + 33CC10E82044A3C60003C045 /* Build configuration list for PBXProject "Runner" */ = {
  601 + isa = XCConfigurationList;
  602 + buildConfigurations = (
  603 + 33CC10F92044A3C60003C045 /* Debug */,
  604 + 33CC10FA2044A3C60003C045 /* Release */,
  605 + 338D0CE9231458BD00FA5F75 /* Profile */,
  606 + );
  607 + defaultConfigurationIsVisible = 0;
  608 + defaultConfigurationName = Release;
  609 + };
  610 + 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */ = {
  611 + isa = XCConfigurationList;
  612 + buildConfigurations = (
  613 + 33CC10FC2044A3C60003C045 /* Debug */,
  614 + 33CC10FD2044A3C60003C045 /* Release */,
  615 + 338D0CEA231458BD00FA5F75 /* Profile */,
  616 + );
  617 + defaultConfigurationIsVisible = 0;
  618 + defaultConfigurationName = Release;
  619 + };
  620 + 33CC111B2044C6BA0003C045 /* Build configuration list for PBXAggregateTarget "Flutter Assemble" */ = {
  621 + isa = XCConfigurationList;
  622 + buildConfigurations = (
  623 + 33CC111C2044C6BA0003C045 /* Debug */,
  624 + 33CC111D2044C6BA0003C045 /* Release */,
  625 + 338D0CEB231458BD00FA5F75 /* Profile */,
  626 + );
  627 + defaultConfigurationIsVisible = 0;
  628 + defaultConfigurationName = Release;
  629 + };
  630 +/* End XCConfigurationList section */
  631 + };
  632 + rootObject = 33CC10E52044A3C60003C045 /* Project object */;
  633 +}
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
  3 +<plist version="1.0">
  4 +<dict>
  5 + <key>IDEDidComputeMac32BitWarning</key>
  6 + <true/>
  7 +</dict>
  8 +</plist>
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<Scheme
  3 + LastUpgradeVersion = "1300"
  4 + version = "1.3">
  5 + <BuildAction
  6 + parallelizeBuildables = "YES"
  7 + buildImplicitDependencies = "YES">
  8 + <BuildActionEntries>
  9 + <BuildActionEntry
  10 + buildForTesting = "YES"
  11 + buildForRunning = "YES"
  12 + buildForProfiling = "YES"
  13 + buildForArchiving = "YES"
  14 + buildForAnalyzing = "YES">
  15 + <BuildableReference
  16 + BuildableIdentifier = "primary"
  17 + BlueprintIdentifier = "33CC10EC2044A3C60003C045"
  18 + BuildableName = "example.app"
  19 + BlueprintName = "Runner"
  20 + ReferencedContainer = "container:Runner.xcodeproj">
  21 + </BuildableReference>
  22 + </BuildActionEntry>
  23 + </BuildActionEntries>
  24 + </BuildAction>
  25 + <TestAction
  26 + buildConfiguration = "Debug"
  27 + selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
  28 + selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
  29 + shouldUseLaunchSchemeArgsEnv = "YES">
  30 + <MacroExpansion>
  31 + <BuildableReference
  32 + BuildableIdentifier = "primary"
  33 + BlueprintIdentifier = "33CC10EC2044A3C60003C045"
  34 + BuildableName = "example.app"
  35 + BlueprintName = "Runner"
  36 + ReferencedContainer = "container:Runner.xcodeproj">
  37 + </BuildableReference>
  38 + </MacroExpansion>
  39 + <Testables>
  40 + </Testables>
  41 + </TestAction>
  42 + <LaunchAction
  43 + buildConfiguration = "Debug"
  44 + selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
  45 + selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
  46 + launchStyle = "0"
  47 + useCustomWorkingDirectory = "NO"
  48 + ignoresPersistentStateOnLaunch = "NO"
  49 + debugDocumentVersioning = "YES"
  50 + debugServiceExtension = "internal"
  51 + allowLocationSimulation = "YES">
  52 + <BuildableProductRunnable
  53 + runnableDebuggingMode = "0">
  54 + <BuildableReference
  55 + BuildableIdentifier = "primary"
  56 + BlueprintIdentifier = "33CC10EC2044A3C60003C045"
  57 + BuildableName = "example.app"
  58 + BlueprintName = "Runner"
  59 + ReferencedContainer = "container:Runner.xcodeproj">
  60 + </BuildableReference>
  61 + </BuildableProductRunnable>
  62 + </LaunchAction>
  63 + <ProfileAction
  64 + buildConfiguration = "Profile"
  65 + shouldUseLaunchSchemeArgsEnv = "YES"
  66 + savedToolIdentifier = ""
  67 + useCustomWorkingDirectory = "NO"
  68 + debugDocumentVersioning = "YES">
  69 + <BuildableProductRunnable
  70 + runnableDebuggingMode = "0">
  71 + <BuildableReference
  72 + BuildableIdentifier = "primary"
  73 + BlueprintIdentifier = "33CC10EC2044A3C60003C045"
  74 + BuildableName = "example.app"
  75 + BlueprintName = "Runner"
  76 + ReferencedContainer = "container:Runner.xcodeproj">
  77 + </BuildableReference>
  78 + </BuildableProductRunnable>
  79 + </ProfileAction>
  80 + <AnalyzeAction
  81 + buildConfiguration = "Debug">
  82 + </AnalyzeAction>
  83 + <ArchiveAction
  84 + buildConfiguration = "Release"
  85 + revealArchiveInOrganizer = "YES">
  86 + </ArchiveAction>
  87 +</Scheme>
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<Workspace
  3 + version = "1.0">
  4 + <FileRef
  5 + location = "group:Runner.xcodeproj">
  6 + </FileRef>
  7 + <FileRef
  8 + location = "group:Pods/Pods.xcodeproj">
  9 + </FileRef>
  10 +</Workspace>
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
  3 +<plist version="1.0">
  4 +<dict>
  5 + <key>IDEDidComputeMac32BitWarning</key>
  6 + <true/>
  7 +</dict>
  8 +</plist>
  1 +import Cocoa
  2 +import FlutterMacOS
  3 +
  4 +@NSApplicationMain
  5 +class AppDelegate: FlutterAppDelegate {
  6 + override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool {
  7 + return true
  8 + }
  9 +}
  1 +{
  2 + "images" : [
  3 + {
  4 + "size" : "16x16",
  5 + "idiom" : "mac",
  6 + "filename" : "app_icon_16.png",
  7 + "scale" : "1x"
  8 + },
  9 + {
  10 + "size" : "16x16",
  11 + "idiom" : "mac",
  12 + "filename" : "app_icon_32.png",
  13 + "scale" : "2x"
  14 + },
  15 + {
  16 + "size" : "32x32",
  17 + "idiom" : "mac",
  18 + "filename" : "app_icon_32.png",
  19 + "scale" : "1x"
  20 + },
  21 + {
  22 + "size" : "32x32",
  23 + "idiom" : "mac",
  24 + "filename" : "app_icon_64.png",
  25 + "scale" : "2x"
  26 + },
  27 + {
  28 + "size" : "128x128",
  29 + "idiom" : "mac",
  30 + "filename" : "app_icon_128.png",
  31 + "scale" : "1x"
  32 + },
  33 + {
  34 + "size" : "128x128",
  35 + "idiom" : "mac",
  36 + "filename" : "app_icon_256.png",
  37 + "scale" : "2x"
  38 + },
  39 + {
  40 + "size" : "256x256",
  41 + "idiom" : "mac",
  42 + "filename" : "app_icon_256.png",
  43 + "scale" : "1x"
  44 + },
  45 + {
  46 + "size" : "256x256",
  47 + "idiom" : "mac",
  48 + "filename" : "app_icon_512.png",
  49 + "scale" : "2x"
  50 + },
  51 + {
  52 + "size" : "512x512",
  53 + "idiom" : "mac",
  54 + "filename" : "app_icon_512.png",
  55 + "scale" : "1x"
  56 + },
  57 + {
  58 + "size" : "512x512",
  59 + "idiom" : "mac",
  60 + "filename" : "app_icon_1024.png",
  61 + "scale" : "2x"
  62 + }
  63 + ],
  64 + "info" : {
  65 + "version" : 1,
  66 + "author" : "xcode"
  67 + }
  68 +}
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="14490.70" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
  3 + <dependencies>
  4 + <deployment identifier="macosx"/>
  5 + <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="14490.70"/>
  6 + <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
  7 + </dependencies>
  8 + <objects>
  9 + <customObject id="-2" userLabel="File's Owner" customClass="NSApplication">
  10 + <connections>
  11 + <outlet property="delegate" destination="Voe-Tx-rLC" id="GzC-gU-4Uq"/>
  12 + </connections>
  13 + </customObject>
  14 + <customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
  15 + <customObject id="-3" userLabel="Application" customClass="NSObject"/>
  16 + <customObject id="Voe-Tx-rLC" customClass="AppDelegate" customModule="Runner" customModuleProvider="target">
  17 + <connections>
  18 + <outlet property="applicationMenu" destination="uQy-DD-JDr" id="XBo-yE-nKs"/>
  19 + <outlet property="mainFlutterWindow" destination="QvC-M9-y7g" id="gIp-Ho-8D9"/>
  20 + </connections>
  21 + </customObject>
  22 + <customObject id="YLy-65-1bz" customClass="NSFontManager"/>
  23 + <menu title="Main Menu" systemMenu="main" id="AYu-sK-qS6">
  24 + <items>
  25 + <menuItem title="APP_NAME" id="1Xt-HY-uBw">
  26 + <modifierMask key="keyEquivalentModifierMask"/>
  27 + <menu key="submenu" title="APP_NAME" systemMenu="apple" id="uQy-DD-JDr">
  28 + <items>
  29 + <menuItem title="About APP_NAME" id="5kV-Vb-QxS">
  30 + <modifierMask key="keyEquivalentModifierMask"/>
  31 + <connections>
  32 + <action selector="orderFrontStandardAboutPanel:" target="-1" id="Exp-CZ-Vem"/>
  33 + </connections>
  34 + </menuItem>
  35 + <menuItem isSeparatorItem="YES" id="VOq-y0-SEH"/>
  36 + <menuItem title="Preferences…" keyEquivalent="," id="BOF-NM-1cW"/>
  37 + <menuItem isSeparatorItem="YES" id="wFC-TO-SCJ"/>
  38 + <menuItem title="Services" id="NMo-om-nkz">
  39 + <modifierMask key="keyEquivalentModifierMask"/>
  40 + <menu key="submenu" title="Services" systemMenu="services" id="hz9-B4-Xy5"/>
  41 + </menuItem>
  42 + <menuItem isSeparatorItem="YES" id="4je-JR-u6R"/>
  43 + <menuItem title="Hide APP_NAME" keyEquivalent="h" id="Olw-nP-bQN">
  44 + <connections>
  45 + <action selector="hide:" target="-1" id="PnN-Uc-m68"/>
  46 + </connections>
  47 + </menuItem>
  48 + <menuItem title="Hide Others" keyEquivalent="h" id="Vdr-fp-XzO">
  49 + <modifierMask key="keyEquivalentModifierMask" option="YES" command="YES"/>
  50 + <connections>
  51 + <action selector="hideOtherApplications:" target="-1" id="VT4-aY-XCT"/>
  52 + </connections>
  53 + </menuItem>
  54 + <menuItem title="Show All" id="Kd2-mp-pUS">
  55 + <modifierMask key="keyEquivalentModifierMask"/>
  56 + <connections>
  57 + <action selector="unhideAllApplications:" target="-1" id="Dhg-Le-xox"/>
  58 + </connections>
  59 + </menuItem>
  60 + <menuItem isSeparatorItem="YES" id="kCx-OE-vgT"/>
  61 + <menuItem title="Quit APP_NAME" keyEquivalent="q" id="4sb-4s-VLi">
  62 + <connections>
  63 + <action selector="terminate:" target="-1" id="Te7-pn-YzF"/>
  64 + </connections>
  65 + </menuItem>
  66 + </items>
  67 + </menu>
  68 + </menuItem>
  69 + <menuItem title="Edit" id="5QF-Oa-p0T">
  70 + <modifierMask key="keyEquivalentModifierMask"/>
  71 + <menu key="submenu" title="Edit" id="W48-6f-4Dl">
  72 + <items>
  73 + <menuItem title="Undo" keyEquivalent="z" id="dRJ-4n-Yzg">
  74 + <connections>
  75 + <action selector="undo:" target="-1" id="M6e-cu-g7V"/>
  76 + </connections>
  77 + </menuItem>
  78 + <menuItem title="Redo" keyEquivalent="Z" id="6dh-zS-Vam">
  79 + <connections>
  80 + <action selector="redo:" target="-1" id="oIA-Rs-6OD"/>
  81 + </connections>
  82 + </menuItem>
  83 + <menuItem isSeparatorItem="YES" id="WRV-NI-Exz"/>
  84 + <menuItem title="Cut" keyEquivalent="x" id="uRl-iY-unG">
  85 + <connections>
  86 + <action selector="cut:" target="-1" id="YJe-68-I9s"/>
  87 + </connections>
  88 + </menuItem>
  89 + <menuItem title="Copy" keyEquivalent="c" id="x3v-GG-iWU">
  90 + <connections>
  91 + <action selector="copy:" target="-1" id="G1f-GL-Joy"/>
  92 + </connections>
  93 + </menuItem>
  94 + <menuItem title="Paste" keyEquivalent="v" id="gVA-U4-sdL">
  95 + <connections>
  96 + <action selector="paste:" target="-1" id="UvS-8e-Qdg"/>
  97 + </connections>
  98 + </menuItem>
  99 + <menuItem title="Paste and Match Style" keyEquivalent="V" id="WeT-3V-zwk">
  100 + <modifierMask key="keyEquivalentModifierMask" option="YES" command="YES"/>
  101 + <connections>
  102 + <action selector="pasteAsPlainText:" target="-1" id="cEh-KX-wJQ"/>
  103 + </connections>
  104 + </menuItem>
  105 + <menuItem title="Delete" id="pa3-QI-u2k">
  106 + <modifierMask key="keyEquivalentModifierMask"/>
  107 + <connections>
  108 + <action selector="delete:" target="-1" id="0Mk-Ml-PaM"/>
  109 + </connections>
  110 + </menuItem>
  111 + <menuItem title="Select All" keyEquivalent="a" id="Ruw-6m-B2m">
  112 + <connections>
  113 + <action selector="selectAll:" target="-1" id="VNm-Mi-diN"/>
  114 + </connections>
  115 + </menuItem>
  116 + <menuItem isSeparatorItem="YES" id="uyl-h8-XO2"/>
  117 + <menuItem title="Find" id="4EN-yA-p0u">
  118 + <modifierMask key="keyEquivalentModifierMask"/>
  119 + <menu key="submenu" title="Find" id="1b7-l0-nxx">
  120 + <items>
  121 + <menuItem title="Find…" tag="1" keyEquivalent="f" id="Xz5-n4-O0W">
  122 + <connections>
  123 + <action selector="performFindPanelAction:" target="-1" id="cD7-Qs-BN4"/>
  124 + </connections>
  125 + </menuItem>
  126 + <menuItem title="Find and Replace…" tag="12" keyEquivalent="f" id="YEy-JH-Tfz">
  127 + <modifierMask key="keyEquivalentModifierMask" option="YES" command="YES"/>
  128 + <connections>
  129 + <action selector="performFindPanelAction:" target="-1" id="WD3-Gg-5AJ"/>
  130 + </connections>
  131 + </menuItem>
  132 + <menuItem title="Find Next" tag="2" keyEquivalent="g" id="q09-fT-Sye">
  133 + <connections>
  134 + <action selector="performFindPanelAction:" target="-1" id="NDo-RZ-v9R"/>
  135 + </connections>
  136 + </menuItem>
  137 + <menuItem title="Find Previous" tag="3" keyEquivalent="G" id="OwM-mh-QMV">
  138 + <connections>
  139 + <action selector="performFindPanelAction:" target="-1" id="HOh-sY-3ay"/>
  140 + </connections>
  141 + </menuItem>
  142 + <menuItem title="Use Selection for Find" tag="7" keyEquivalent="e" id="buJ-ug-pKt">
  143 + <connections>
  144 + <action selector="performFindPanelAction:" target="-1" id="U76-nv-p5D"/>
  145 + </connections>
  146 + </menuItem>
  147 + <menuItem title="Jump to Selection" keyEquivalent="j" id="S0p-oC-mLd">
  148 + <connections>
  149 + <action selector="centerSelectionInVisibleArea:" target="-1" id="IOG-6D-g5B"/>
  150 + </connections>
  151 + </menuItem>
  152 + </items>
  153 + </menu>
  154 + </menuItem>
  155 + <menuItem title="Spelling and Grammar" id="Dv1-io-Yv7">
  156 + <modifierMask key="keyEquivalentModifierMask"/>
  157 + <menu key="submenu" title="Spelling" id="3IN-sU-3Bg">
  158 + <items>
  159 + <menuItem title="Show Spelling and Grammar" keyEquivalent=":" id="HFo-cy-zxI">
  160 + <connections>
  161 + <action selector="showGuessPanel:" target="-1" id="vFj-Ks-hy3"/>
  162 + </connections>
  163 + </menuItem>
  164 + <menuItem title="Check Document Now" keyEquivalent=";" id="hz2-CU-CR7">
  165 + <connections>
  166 + <action selector="checkSpelling:" target="-1" id="fz7-VC-reM"/>
  167 + </connections>
  168 + </menuItem>
  169 + <menuItem isSeparatorItem="YES" id="bNw-od-mp5"/>
  170 + <menuItem title="Check Spelling While Typing" id="rbD-Rh-wIN">
  171 + <modifierMask key="keyEquivalentModifierMask"/>
  172 + <connections>
  173 + <action selector="toggleContinuousSpellChecking:" target="-1" id="7w6-Qz-0kB"/>
  174 + </connections>
  175 + </menuItem>
  176 + <menuItem title="Check Grammar With Spelling" id="mK6-2p-4JG">
  177 + <modifierMask key="keyEquivalentModifierMask"/>
  178 + <connections>
  179 + <action selector="toggleGrammarChecking:" target="-1" id="muD-Qn-j4w"/>
  180 + </connections>
  181 + </menuItem>
  182 + <menuItem title="Correct Spelling Automatically" id="78Y-hA-62v">
  183 + <modifierMask key="keyEquivalentModifierMask"/>
  184 + <connections>
  185 + <action selector="toggleAutomaticSpellingCorrection:" target="-1" id="2lM-Qi-WAP"/>
  186 + </connections>
  187 + </menuItem>
  188 + </items>
  189 + </menu>
  190 + </menuItem>
  191 + <menuItem title="Substitutions" id="9ic-FL-obx">
  192 + <modifierMask key="keyEquivalentModifierMask"/>
  193 + <menu key="submenu" title="Substitutions" id="FeM-D8-WVr">
  194 + <items>
  195 + <menuItem title="Show Substitutions" id="z6F-FW-3nz">
  196 + <modifierMask key="keyEquivalentModifierMask"/>
  197 + <connections>
  198 + <action selector="orderFrontSubstitutionsPanel:" target="-1" id="oku-mr-iSq"/>
  199 + </connections>
  200 + </menuItem>
  201 + <menuItem isSeparatorItem="YES" id="gPx-C9-uUO"/>
  202 + <menuItem title="Smart Copy/Paste" id="9yt-4B-nSM">
  203 + <modifierMask key="keyEquivalentModifierMask"/>
  204 + <connections>
  205 + <action selector="toggleSmartInsertDelete:" target="-1" id="3IJ-Se-DZD"/>
  206 + </connections>
  207 + </menuItem>
  208 + <menuItem title="Smart Quotes" id="hQb-2v-fYv">
  209 + <modifierMask key="keyEquivalentModifierMask"/>
  210 + <connections>
  211 + <action selector="toggleAutomaticQuoteSubstitution:" target="-1" id="ptq-xd-QOA"/>
  212 + </connections>
  213 + </menuItem>
  214 + <menuItem title="Smart Dashes" id="rgM-f4-ycn">
  215 + <modifierMask key="keyEquivalentModifierMask"/>
  216 + <connections>
  217 + <action selector="toggleAutomaticDashSubstitution:" target="-1" id="oCt-pO-9gS"/>
  218 + </connections>
  219 + </menuItem>
  220 + <menuItem title="Smart Links" id="cwL-P1-jid">
  221 + <modifierMask key="keyEquivalentModifierMask"/>
  222 + <connections>
  223 + <action selector="toggleAutomaticLinkDetection:" target="-1" id="Gip-E3-Fov"/>
  224 + </connections>
  225 + </menuItem>
  226 + <menuItem title="Data Detectors" id="tRr-pd-1PS">
  227 + <modifierMask key="keyEquivalentModifierMask"/>
  228 + <connections>
  229 + <action selector="toggleAutomaticDataDetection:" target="-1" id="R1I-Nq-Kbl"/>
  230 + </connections>
  231 + </menuItem>
  232 + <menuItem title="Text Replacement" id="HFQ-gK-NFA">
  233 + <modifierMask key="keyEquivalentModifierMask"/>
  234 + <connections>
  235 + <action selector="toggleAutomaticTextReplacement:" target="-1" id="DvP-Fe-Py6"/>
  236 + </connections>
  237 + </menuItem>
  238 + </items>
  239 + </menu>
  240 + </menuItem>
  241 + <menuItem title="Transformations" id="2oI-Rn-ZJC">
  242 + <modifierMask key="keyEquivalentModifierMask"/>
  243 + <menu key="submenu" title="Transformations" id="c8a-y6-VQd">
  244 + <items>
  245 + <menuItem title="Make Upper Case" id="vmV-6d-7jI">
  246 + <modifierMask key="keyEquivalentModifierMask"/>
  247 + <connections>
  248 + <action selector="uppercaseWord:" target="-1" id="sPh-Tk-edu"/>
  249 + </connections>
  250 + </menuItem>
  251 + <menuItem title="Make Lower Case" id="d9M-CD-aMd">
  252 + <modifierMask key="keyEquivalentModifierMask"/>
  253 + <connections>
  254 + <action selector="lowercaseWord:" target="-1" id="iUZ-b5-hil"/>
  255 + </connections>
  256 + </menuItem>
  257 + <menuItem title="Capitalize" id="UEZ-Bs-lqG">
  258 + <modifierMask key="keyEquivalentModifierMask"/>
  259 + <connections>
  260 + <action selector="capitalizeWord:" target="-1" id="26H-TL-nsh"/>
  261 + </connections>
  262 + </menuItem>
  263 + </items>
  264 + </menu>
  265 + </menuItem>
  266 + <menuItem title="Speech" id="xrE-MZ-jX0">
  267 + <modifierMask key="keyEquivalentModifierMask"/>
  268 + <menu key="submenu" title="Speech" id="3rS-ZA-NoH">
  269 + <items>
  270 + <menuItem title="Start Speaking" id="Ynk-f8-cLZ">
  271 + <modifierMask key="keyEquivalentModifierMask"/>
  272 + <connections>
  273 + <action selector="startSpeaking:" target="-1" id="654-Ng-kyl"/>
  274 + </connections>
  275 + </menuItem>
  276 + <menuItem title="Stop Speaking" id="Oyz-dy-DGm">
  277 + <modifierMask key="keyEquivalentModifierMask"/>
  278 + <connections>
  279 + <action selector="stopSpeaking:" target="-1" id="dX8-6p-jy9"/>
  280 + </connections>
  281 + </menuItem>
  282 + </items>
  283 + </menu>
  284 + </menuItem>
  285 + </items>
  286 + </menu>
  287 + </menuItem>
  288 + <menuItem title="View" id="H8h-7b-M4v">
  289 + <modifierMask key="keyEquivalentModifierMask"/>
  290 + <menu key="submenu" title="View" id="HyV-fh-RgO">
  291 + <items>
  292 + <menuItem title="Enter Full Screen" keyEquivalent="f" id="4J7-dP-txa">
  293 + <modifierMask key="keyEquivalentModifierMask" control="YES" command="YES"/>
  294 + <connections>
  295 + <action selector="toggleFullScreen:" target="-1" id="dU3-MA-1Rq"/>
  296 + </connections>
  297 + </menuItem>
  298 + </items>
  299 + </menu>
  300 + </menuItem>
  301 + <menuItem title="Window" id="aUF-d1-5bR">
  302 + <modifierMask key="keyEquivalentModifierMask"/>
  303 + <menu key="submenu" title="Window" systemMenu="window" id="Td7-aD-5lo">
  304 + <items>
  305 + <menuItem title="Minimize" keyEquivalent="m" id="OY7-WF-poV">
  306 + <connections>
  307 + <action selector="performMiniaturize:" target="-1" id="VwT-WD-YPe"/>
  308 + </connections>
  309 + </menuItem>
  310 + <menuItem title="Zoom" id="R4o-n2-Eq4">
  311 + <modifierMask key="keyEquivalentModifierMask"/>
  312 + <connections>
  313 + <action selector="performZoom:" target="-1" id="DIl-cC-cCs"/>
  314 + </connections>
  315 + </menuItem>
  316 + <menuItem isSeparatorItem="YES" id="eu3-7i-yIM"/>
  317 + <menuItem title="Bring All to Front" id="LE2-aR-0XJ">
  318 + <modifierMask key="keyEquivalentModifierMask"/>
  319 + <connections>
  320 + <action selector="arrangeInFront:" target="-1" id="DRN-fu-gQh"/>
  321 + </connections>
  322 + </menuItem>
  323 + </items>
  324 + </menu>
  325 + </menuItem>
  326 + <menuItem title="Help" id="EPT-qC-fAb">
  327 + <modifierMask key="keyEquivalentModifierMask"/>
  328 + <menu key="submenu" title="Help" systemMenu="help" id="rJ0-wn-3NY"/>
  329 + </menuItem>
  330 + </items>
  331 + <point key="canvasLocation" x="142" y="-258"/>
  332 + </menu>
  333 + <window title="APP_NAME" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" releasedWhenClosed="NO" animationBehavior="default" id="QvC-M9-y7g" customClass="MainFlutterWindow" customModule="Runner" customModuleProvider="target">
  334 + <windowStyleMask key="styleMask" titled="YES" closable="YES" miniaturizable="YES" resizable="YES"/>
  335 + <rect key="contentRect" x="335" y="390" width="800" height="600"/>
  336 + <rect key="screenRect" x="0.0" y="0.0" width="2560" height="1577"/>
  337 + <view key="contentView" wantsLayer="YES" id="EiT-Mj-1SZ">
  338 + <rect key="frame" x="0.0" y="0.0" width="800" height="600"/>
  339 + <autoresizingMask key="autoresizingMask"/>
  340 + </view>
  341 + </window>
  342 + </objects>
  343 +</document>
  1 +// Application-level settings for the Runner target.
  2 +//
  3 +// This may be replaced with something auto-generated from metadata (e.g., pubspec.yaml) in the
  4 +// future. If not, the values below would default to using the project name when this becomes a
  5 +// 'flutter create' template.
  6 +
  7 +// The application's name. By default this is also the title of the Flutter window.
  8 +PRODUCT_NAME = example
  9 +
  10 +// The application's bundle identifier
  11 +PRODUCT_BUNDLE_IDENTIFIER = com.example.example
  12 +
  13 +// The copyright displayed in application information
  14 +PRODUCT_COPYRIGHT = Copyright © 2023 com.example. All rights reserved.
  1 +#include "../../Flutter/Flutter-Debug.xcconfig"
  2 +#include "Warnings.xcconfig"
  1 +#include "../../Flutter/Flutter-Release.xcconfig"
  2 +#include "Warnings.xcconfig"
  1 +WARNING_CFLAGS = -Wall -Wconditional-uninitialized -Wnullable-to-nonnull-conversion -Wmissing-method-return-type -Woverlength-strings
  2 +GCC_WARN_UNDECLARED_SELECTOR = YES
  3 +CLANG_UNDEFINED_BEHAVIOR_SANITIZER_NULLABILITY = YES
  4 +CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE
  5 +CLANG_WARN__DUPLICATE_METHOD_MATCH = YES
  6 +CLANG_WARN_PRAGMA_PACK = YES
  7 +CLANG_WARN_STRICT_PROTOTYPES = YES
  8 +CLANG_WARN_COMMA = YES
  9 +GCC_WARN_STRICT_SELECTOR_MATCH = YES
  10 +CLANG_WARN_OBJC_REPEATED_USE_OF_WEAK = YES
  11 +CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES
  12 +GCC_WARN_SHADOW = YES
  13 +CLANG_WARN_UNREACHABLE_CODE = YES
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
  3 +<plist version="1.0">
  4 +<dict>
  5 + <key>com.apple.security.app-sandbox</key>
  6 + <true/>
  7 + <key>com.apple.security.cs.allow-jit</key>
  8 + <true/>
  9 + <key>com.apple.security.network.server</key>
  10 + <true/>
  11 +</dict>
  12 +</plist>
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
  3 +<plist version="1.0">
  4 +<dict>
  5 + <key>CFBundleDevelopmentRegion</key>
  6 + <string>$(DEVELOPMENT_LANGUAGE)</string>
  7 + <key>CFBundleExecutable</key>
  8 + <string>$(EXECUTABLE_NAME)</string>
  9 + <key>CFBundleIconFile</key>
  10 + <string></string>
  11 + <key>CFBundleIdentifier</key>
  12 + <string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
  13 + <key>CFBundleInfoDictionaryVersion</key>
  14 + <string>6.0</string>
  15 + <key>CFBundleName</key>
  16 + <string>$(PRODUCT_NAME)</string>
  17 + <key>CFBundlePackageType</key>
  18 + <string>APPL</string>
  19 + <key>CFBundleShortVersionString</key>
  20 + <string>$(FLUTTER_BUILD_NAME)</string>
  21 + <key>CFBundleVersion</key>
  22 + <string>$(FLUTTER_BUILD_NUMBER)</string>
  23 + <key>LSMinimumSystemVersion</key>
  24 + <string>$(MACOSX_DEPLOYMENT_TARGET)</string>
  25 + <key>NSHumanReadableCopyright</key>
  26 + <string>$(PRODUCT_COPYRIGHT)</string>
  27 + <key>NSMainNibFile</key>
  28 + <string>MainMenu</string>
  29 + <key>NSPrincipalClass</key>
  30 + <string>NSApplication</string>
  31 +</dict>
  32 +</plist>
  1 +import Cocoa
  2 +import FlutterMacOS
  3 +
  4 +class MainFlutterWindow: NSWindow {
  5 + override func awakeFromNib() {
  6 + let flutterViewController = FlutterViewController.init()
  7 + let windowFrame = self.frame
  8 + self.contentViewController = flutterViewController
  9 + self.setFrame(windowFrame, display: true)
  10 +
  11 + RegisterGeneratedPlugins(registry: flutterViewController)
  12 +
  13 + super.awakeFromNib()
  14 + }
  15 +}
  1 +<?xml version="1.0" encoding="UTF-8"?>
  2 +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
  3 +<plist version="1.0">
  4 +<dict>
  5 + <key>com.apple.security.app-sandbox</key>
  6 + <true/>
  7 +</dict>
  8 +</plist>
  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: d6347d54a2d8028e0437e3c099f66fdb8ae02c4720c1e7534c9f24c10351f85d
  9 + url: "https://pub.dev"
  10 + source: hosted
  11 + version: "3.3.6"
  12 + args:
  13 + dependency: transitive
  14 + description:
  15 + name: args
  16 + sha256: "4cab82a83ffef80b262ddedf47a0a8e56ee6fbf7fe21e6e768b02792034dd440"
  17 + url: "https://pub.dev"
  18 + source: hosted
  19 + version: "2.4.0"
  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 + barcode:
  29 + dependency: transitive
  30 + description:
  31 + name: barcode
  32 + sha256: "52570564684bbb0240a9f1fdb6bad12adc5e0540103c1c96d6dd550bd928b1c9"
  33 + url: "https://pub.dev"
  34 + source: hosted
  35 + version: "2.2.3"
  36 + bidi:
  37 + dependency: transitive
  38 + description:
  39 + name: bidi
  40 + sha256: dc00274c7edabae2ab30c676e736ea1eb0b1b7a1b436cb5fe372e431ccb39ab0
  41 + url: "https://pub.dev"
  42 + source: hosted
  43 + version: "2.0.6"
  44 + boolean_selector:
  45 + dependency: transitive
  46 + description:
  47 + name: boolean_selector
  48 + sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66"
  49 + url: "https://pub.dev"
  50 + source: hosted
  51 + version: "2.1.1"
  52 + characters:
  53 + dependency: transitive
  54 + description:
  55 + name: characters
  56 + sha256: e6a326c8af69605aec75ed6c187d06b349707a27fbff8222ca9cc2cff167975c
  57 + url: "https://pub.dev"
  58 + source: hosted
  59 + version: "1.2.1"
  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 + flutter:
  109 + dependency: "direct main"
  110 + description: flutter
  111 + source: sdk
  112 + version: "0.0.0"
  113 + flutter_lints:
  114 + dependency: "direct dev"
  115 + description:
  116 + name: flutter_lints
  117 + sha256: aeb0b80a8b3709709c9cc496cdc027c5b3216796bc0af0ce1007eaf24464fd4c
  118 + url: "https://pub.dev"
  119 + source: hosted
  120 + version: "2.0.1"
  121 + flutter_math_fork:
  122 + dependency: transitive
  123 + description:
  124 + name: flutter_math_fork
  125 + sha256: fa511bdcb91fc35eac155ec5790883886dd9de6572fea549f1ad4660ef6804e9
  126 + url: "https://pub.dev"
  127 + source: hosted
  128 + version: "0.6.3+1"
  129 + flutter_svg:
  130 + dependency: transitive
  131 + description:
  132 + name: flutter_svg
  133 + sha256: "6ff9fa12892ae074092de2fa6a9938fb21dbabfdaa2ff57dc697ff912fc8d4b2"
  134 + url: "https://pub.dev"
  135 + source: hosted
  136 + version: "1.1.6"
  137 + flutter_test:
  138 + dependency: "direct dev"
  139 + description: flutter
  140 + source: sdk
  141 + version: "0.0.0"
  142 + flutter_web_plugins:
  143 + dependency: transitive
  144 + description: flutter
  145 + source: sdk
  146 + version: "0.0.0"
  147 + http:
  148 + dependency: transitive
  149 + description:
  150 + name: http
  151 + sha256: "6aa2946395183537c8b880962d935877325d6a09a2867c3970c05c0fed6ac482"
  152 + url: "https://pub.dev"
  153 + source: hosted
  154 + version: "0.13.5"
  155 + http_parser:
  156 + dependency: transitive
  157 + description:
  158 + name: http_parser
  159 + sha256: "2aa08ce0341cc9b354a498388e30986515406668dbcc4f7c950c3e715496693b"
  160 + url: "https://pub.dev"
  161 + source: hosted
  162 + version: "4.0.2"
  163 + image:
  164 + dependency: transitive
  165 + description:
  166 + name: image
  167 + sha256: "483a389d6ccb292b570c31b3a193779b1b0178e7eb571986d9a49904b6861227"
  168 + url: "https://pub.dev"
  169 + source: hosted
  170 + version: "4.0.15"
  171 + intl:
  172 + dependency: transitive
  173 + description:
  174 + name: intl
  175 + sha256: a3715e3bc90294e971cb7dc063fbf3cd9ee0ebf8604ffeafabd9e6f16abbdbe6
  176 + url: "https://pub.dev"
  177 + source: hosted
  178 + version: "0.18.0"
  179 + js:
  180 + dependency: transitive
  181 + description:
  182 + name: js
  183 + sha256: "5528c2f391ededb7775ec1daa69e65a2d61276f7552de2b5f7b8d34ee9fd4ab7"
  184 + url: "https://pub.dev"
  185 + source: hosted
  186 + version: "0.6.5"
  187 + lints:
  188 + dependency: transitive
  189 + description:
  190 + name: lints
  191 + sha256: "5e4a9cd06d447758280a8ac2405101e0e2094d2a1dbdd3756aec3fe7775ba593"
  192 + url: "https://pub.dev"
  193 + source: hosted
  194 + version: "2.0.1"
  195 + markdown:
  196 + dependency: transitive
  197 + description:
  198 + name: markdown
  199 + sha256: b3c60dee8c2af50ad0e6e90cceba98e47718a6ee0a7a6772c77846a0cc21f78b
  200 + url: "https://pub.dev"
  201 + source: hosted
  202 + version: "7.0.1"
  203 + markdown_to_pdf:
  204 + dependency: "direct main"
  205 + description:
  206 + path: ".."
  207 + relative: true
  208 + source: path
  209 + version: "0.0.1"
  210 + matcher:
  211 + dependency: transitive
  212 + description:
  213 + name: matcher
  214 + sha256: "16db949ceee371e9b99d22f88fa3a73c4e59fd0afed0bd25fc336eb76c198b72"
  215 + url: "https://pub.dev"
  216 + source: hosted
  217 + version: "0.12.13"
  218 + material_color_utilities:
  219 + dependency: transitive
  220 + description:
  221 + name: material_color_utilities
  222 + sha256: d92141dc6fe1dad30722f9aa826c7fbc896d021d792f80678280601aff8cf724
  223 + url: "https://pub.dev"
  224 + source: hosted
  225 + version: "0.2.0"
  226 + meta:
  227 + dependency: transitive
  228 + description:
  229 + name: meta
  230 + sha256: "6c268b42ed578a53088d834796959e4a1814b5e9e164f147f580a386e5decf42"
  231 + url: "https://pub.dev"
  232 + source: hosted
  233 + version: "1.8.0"
  234 + nested:
  235 + dependency: transitive
  236 + description:
  237 + name: nested
  238 + sha256: "03bac4c528c64c95c722ec99280375a6f2fc708eec17c7b3f07253b626cd2a20"
  239 + url: "https://pub.dev"
  240 + source: hosted
  241 + version: "1.0.0"
  242 + path:
  243 + dependency: transitive
  244 + description:
  245 + name: path
  246 + sha256: db9d4f58c908a4ba5953fcee2ae317c94889433e5024c27ce74a37f94267945b
  247 + url: "https://pub.dev"
  248 + source: hosted
  249 + version: "1.8.2"
  250 + path_drawing:
  251 + dependency: transitive
  252 + description:
  253 + name: path_drawing
  254 + sha256: bbb1934c0cbb03091af082a6389ca2080345291ef07a5fa6d6e078ba8682f977
  255 + url: "https://pub.dev"
  256 + source: hosted
  257 + version: "1.0.1"
  258 + path_parsing:
  259 + dependency: transitive
  260 + description:
  261 + name: path_parsing
  262 + sha256: e3e67b1629e6f7e8100b367d3db6ba6af4b1f0bb80f64db18ef1fbabd2fa9ccf
  263 + url: "https://pub.dev"
  264 + source: hosted
  265 + version: "1.0.1"
  266 + pdf:
  267 + dependency: transitive
  268 + description:
  269 + name: pdf
  270 + sha256: "6cd57e8e6d052bd1078f18e0dc7cd6701fad6288231c1ce99d66ef5034d14e61"
  271 + url: "https://pub.dev"
  272 + source: hosted
  273 + version: "3.9.0"
  274 + petitparser:
  275 + dependency: transitive
  276 + description:
  277 + name: petitparser
  278 + sha256: "49392a45ced973e8d94a85fdb21293fbb40ba805fc49f2965101ae748a3683b4"
  279 + url: "https://pub.dev"
  280 + source: hosted
  281 + version: "5.1.0"
  282 + plugin_platform_interface:
  283 + dependency: transitive
  284 + description:
  285 + name: plugin_platform_interface
  286 + sha256: "6a2128648c854906c53fa8e33986fc0247a1116122f9534dd20e3ab9e16a32bc"
  287 + url: "https://pub.dev"
  288 + source: hosted
  289 + version: "2.1.4"
  290 + pointycastle:
  291 + dependency: transitive
  292 + description:
  293 + name: pointycastle
  294 + sha256: "57b6b78df14175658f09c5dfcfc51a46ad9561a3504fe679913dab404d0cc0f2"
  295 + url: "https://pub.dev"
  296 + source: hosted
  297 + version: "3.7.0"
  298 + provider:
  299 + dependency: transitive
  300 + description:
  301 + name: provider
  302 + sha256: cdbe7530b12ecd9eb455bdaa2fcb8d4dad22e80b8afb4798b41479d5ce26847f
  303 + url: "https://pub.dev"
  304 + source: hosted
  305 + version: "6.0.5"
  306 + qr:
  307 + dependency: transitive
  308 + description:
  309 + name: qr
  310 + sha256: "64957a3930367bf97cc211a5af99551d630f2f4625e38af10edd6b19131b64b3"
  311 + url: "https://pub.dev"
  312 + source: hosted
  313 + version: "3.0.1"
  314 + sky_engine:
  315 + dependency: transitive
  316 + description: flutter
  317 + source: sdk
  318 + version: "0.0.99"
  319 + source_span:
  320 + dependency: transitive
  321 + description:
  322 + name: source_span
  323 + sha256: dd904f795d4b4f3b870833847c461801f6750a9fa8e61ea5ac53f9422b31f250
  324 + url: "https://pub.dev"
  325 + source: hosted
  326 + version: "1.9.1"
  327 + stack_trace:
  328 + dependency: transitive
  329 + description:
  330 + name: stack_trace
  331 + sha256: c3c7d8edb15bee7f0f74debd4b9c5f3c2ea86766fe4178eb2a18eb30a0bdaed5
  332 + url: "https://pub.dev"
  333 + source: hosted
  334 + version: "1.11.0"
  335 + stream_channel:
  336 + dependency: transitive
  337 + description:
  338 + name: stream_channel
  339 + sha256: "83615bee9045c1d322bbbd1ba209b7a749c2cbcdcb3fdd1df8eb488b3279c1c8"
  340 + url: "https://pub.dev"
  341 + source: hosted
  342 + version: "2.1.1"
  343 + string_scanner:
  344 + dependency: transitive
  345 + description:
  346 + name: string_scanner
  347 + sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde"
  348 + url: "https://pub.dev"
  349 + source: hosted
  350 + version: "1.2.0"
  351 + syncfusion_flutter_core:
  352 + dependency: transitive
  353 + description:
  354 + name: syncfusion_flutter_core
  355 + sha256: "3979f0b1c5a97422cadae52d476c21fa3e0fb671ef51de6cae1d646d8b99fe1f"
  356 + url: "https://pub.dev"
  357 + source: hosted
  358 + version: "20.4.54"
  359 + syncfusion_flutter_pdf:
  360 + dependency: transitive
  361 + description:
  362 + name: syncfusion_flutter_pdf
  363 + sha256: cebcafc60d52d52e0789c18b6332c2bd378f0a6cca006fe0373293bcc6a66e6d
  364 + url: "https://pub.dev"
  365 + source: hosted
  366 + version: "20.4.54"
  367 + syncfusion_flutter_pdfviewer:
  368 + dependency: "direct main"
  369 + description:
  370 + name: syncfusion_flutter_pdfviewer
  371 + sha256: "797a704efd843a606150d3d6317d5f2191173c334a5e5056b7f37855a8093af3"
  372 + url: "https://pub.dev"
  373 + source: hosted
  374 + version: "20.4.54"
  375 + syncfusion_pdfviewer_macos:
  376 + dependency: transitive
  377 + description:
  378 + name: syncfusion_pdfviewer_macos
  379 + sha256: "6f2a9cdfc80aff8a13caba8d36527b3d68f5cb3530a7f2b29d269fbcff745afd"
  380 + url: "https://pub.dev"
  381 + source: hosted
  382 + version: "20.4.54"
  383 + syncfusion_pdfviewer_platform_interface:
  384 + dependency: transitive
  385 + description:
  386 + name: syncfusion_pdfviewer_platform_interface
  387 + sha256: "646230861e103d33173a4909a184a00b2aa5a01819d38b05ccbf99da51be9314"
  388 + url: "https://pub.dev"
  389 + source: hosted
  390 + version: "20.4.54"
  391 + syncfusion_pdfviewer_web:
  392 + dependency: transitive
  393 + description:
  394 + name: syncfusion_pdfviewer_web
  395 + sha256: ba0b72766f445ae171a5363df20abd50be0c1bc4576044df6afba3377a419de1
  396 + url: "https://pub.dev"
  397 + source: hosted
  398 + version: "20.4.54"
  399 + syncfusion_pdfviewer_windows:
  400 + dependency: transitive
  401 + description:
  402 + name: syncfusion_pdfviewer_windows
  403 + sha256: "4cc6c92c211636550c4beb998f2db8f76d4f20eccbc8160730f2add0c8e23411"
  404 + url: "https://pub.dev"
  405 + source: hosted
  406 + version: "20.4.54"
  407 + term_glyph:
  408 + dependency: transitive
  409 + description:
  410 + name: term_glyph
  411 + sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84
  412 + url: "https://pub.dev"
  413 + source: hosted
  414 + version: "1.2.1"
  415 + test_api:
  416 + dependency: transitive
  417 + description:
  418 + name: test_api
  419 + sha256: ad540f65f92caa91bf21dfc8ffb8c589d6e4dc0c2267818b4cc2792857706206
  420 + url: "https://pub.dev"
  421 + source: hosted
  422 + version: "0.4.16"
  423 + tex_markdown:
  424 + dependency: "direct main"
  425 + description:
  426 + name: tex_markdown
  427 + sha256: "2e1c7968f73d4aeab03060739e82dd4f9dadd96cfd827f00577947664d2b9c5b"
  428 + url: "https://pub.dev"
  429 + source: hosted
  430 + version: "0.0.5"
  431 + tex_text:
  432 + dependency: transitive
  433 + description:
  434 + name: tex_text
  435 + sha256: "504723c343d3663c9b3e4cf686559e93a6453e0ab384d4e52bdea4210989d559"
  436 + url: "https://pub.dev"
  437 + source: hosted
  438 + version: "0.0.7"
  439 + tuple:
  440 + dependency: transitive
  441 + description:
  442 + name: tuple
  443 + sha256: "0ea99cd2f9352b2586583ab2ce6489d1f95a5f6de6fb9492faaf97ae2060f0aa"
  444 + url: "https://pub.dev"
  445 + source: hosted
  446 + version: "2.0.1"
  447 + typed_data:
  448 + dependency: transitive
  449 + description:
  450 + name: typed_data
  451 + sha256: "26f87ade979c47a150c9eaab93ccd2bebe70a27dc0b4b29517f2904f04eb11a5"
  452 + url: "https://pub.dev"
  453 + source: hosted
  454 + version: "1.3.1"
  455 + url_launcher:
  456 + dependency: transitive
  457 + description:
  458 + name: url_launcher
  459 + sha256: "75f2846facd11168d007529d6cd8fcb2b750186bea046af9711f10b907e1587e"
  460 + url: "https://pub.dev"
  461 + source: hosted
  462 + version: "6.1.10"
  463 + url_launcher_android:
  464 + dependency: transitive
  465 + description:
  466 + name: url_launcher_android
  467 + sha256: "845530e5e05db5500c1a4c1446785d60cbd8f9bd45e21e7dd643a3273bb4bbd1"
  468 + url: "https://pub.dev"
  469 + source: hosted
  470 + version: "6.0.25"
  471 + url_launcher_ios:
  472 + dependency: transitive
  473 + description:
  474 + name: url_launcher_ios
  475 + sha256: "7ab1e5b646623d6a2537aa59d5d039f90eebef75a7c25e105f6f75de1f7750c3"
  476 + url: "https://pub.dev"
  477 + source: hosted
  478 + version: "6.1.2"
  479 + url_launcher_linux:
  480 + dependency: transitive
  481 + description:
  482 + name: url_launcher_linux
  483 + sha256: "206fb8334a700ef7754d6a9ed119e7349bc830448098f21a69bf1b4ed038cabc"
  484 + url: "https://pub.dev"
  485 + source: hosted
  486 + version: "3.0.4"
  487 + url_launcher_macos:
  488 + dependency: transitive
  489 + description:
  490 + name: url_launcher_macos
  491 + sha256: "0ef2b4f97942a16523e51256b799e9aa1843da6c60c55eefbfa9dbc2dcb8331a"
  492 + url: "https://pub.dev"
  493 + source: hosted
  494 + version: "3.0.4"
  495 + url_launcher_platform_interface:
  496 + dependency: transitive
  497 + description:
  498 + name: url_launcher_platform_interface
  499 + sha256: "6c9ca697a5ae218ce56cece69d46128169a58aa8653c1b01d26fcd4aad8c4370"
  500 + url: "https://pub.dev"
  501 + source: hosted
  502 + version: "2.1.2"
  503 + url_launcher_web:
  504 + dependency: transitive
  505 + description:
  506 + name: url_launcher_web
  507 + sha256: "81fe91b6c4f84f222d186a9d23c73157dc4c8e1c71489c4d08be1ad3b228f1aa"
  508 + url: "https://pub.dev"
  509 + source: hosted
  510 + version: "2.0.16"
  511 + url_launcher_windows:
  512 + dependency: transitive
  513 + description:
  514 + name: url_launcher_windows
  515 + sha256: a83ba3607a507758669cfafb03f9de09bf6e6280c14d9b9cb18f013e406dcacd
  516 + url: "https://pub.dev"
  517 + source: hosted
  518 + version: "3.0.5"
  519 + uuid:
  520 + dependency: transitive
  521 + description:
  522 + name: uuid
  523 + sha256: "648e103079f7c64a36dc7d39369cabb358d377078a051d6ae2ad3aa539519313"
  524 + url: "https://pub.dev"
  525 + source: hosted
  526 + version: "3.0.7"
  527 + vector_math:
  528 + dependency: transitive
  529 + description:
  530 + name: vector_math
  531 + sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803"
  532 + url: "https://pub.dev"
  533 + source: hosted
  534 + version: "2.1.4"
  535 + xml:
  536 + dependency: transitive
  537 + description:
  538 + name: xml
  539 + sha256: "979ee37d622dec6365e2efa4d906c37470995871fe9ae080d967e192d88286b5"
  540 + url: "https://pub.dev"
  541 + source: hosted
  542 + version: "6.2.2"
  543 +sdks:
  544 + dart: ">=2.19.4 <3.0.0"
  545 + flutter: ">=3.3.0"
  1 +name: example
  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: '>=2.19.4 <3.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 + syncfusion_flutter_pdfviewer: ^20.4.54
  39 + markdown_to_pdf:
  40 + path: ../../markdown_to_pdf
  41 + tex_markdown: ^0.0.5
  42 +
  43 +dev_dependencies:
  44 + flutter_test:
  45 + sdk: flutter
  46 +
  47 + # The "flutter_lints" package below contains a set of recommended lints to
  48 + # encourage good coding practices. The lint set provided by the package is
  49 + # activated in the `analysis_options.yaml` file located at the root of your
  50 + # package. See that file for information about deactivating specific lint
  51 + # rules and activating additional ones.
  52 + flutter_lints: ^2.0.0
  53 +
  54 +# For information on the generic Dart part of this file, see the
  55 +# following page: https://dart.dev/tools/pub/pubspec
  56 +
  57 +# The following section is specific to Flutter packages.
  58 +flutter:
  59 +
  60 + # The following line ensures that the Material Icons font is
  61 + # included with your application, so that you can use the icons in
  62 + # the material Icons class.
  63 + uses-material-design: true
  64 +
  65 + # To add assets to your application, add an assets section, like this:
  66 + # assets:
  67 + # - images/a_dot_burr.jpeg
  68 + # - images/a_dot_ham.jpeg
  69 +
  70 + # An image asset can refer to one or more resolution-specific "variants", see
  71 + # https://flutter.dev/assets-and-images/#resolution-aware
  72 +
  73 + # For details regarding adding assets from package dependencies, see
  74 + # https://flutter.dev/assets-and-images/#from-packages
  75 +
  76 + # To add custom fonts to your application, add a fonts section here,
  77 + # in this "flutter" section. Each entry in this list should have a
  78 + # "family" key with the font family name, and a "fonts" key with a
  79 + # list giving the asset and other descriptors for the font. For
  80 + # example:
  81 + # fonts:
  82 + # - family: Schyler
  83 + # fonts:
  84 + # - asset: fonts/Schyler-Regular.ttf
  85 + # - asset: fonts/Schyler-Italic.ttf
  86 + # style: italic
  87 + # - family: Trajan Pro
  88 + # fonts:
  89 + # - asset: fonts/TrajanPro.ttf
  90 + # - asset: fonts/TrajanPro_Bold.ttf
  91 + # weight: 700
  92 + #
  93 + # For details regarding fonts from package dependencies,
  94 + # see https://flutter.dev/custom-fonts/#from-packages
  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:example/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 +}
  1 +<!DOCTYPE html>
  2 +<html>
  3 +<head>
  4 + <!--
  5 + If you are serving your web app in a path other than the root, change the
  6 + href value below to reflect the base path you are serving from.
  7 +
  8 + The path provided below has to start and end with a slash "/" in order for
  9 + it to work correctly.
  10 +
  11 + For more details:
  12 + * https://developer.mozilla.org/en-US/docs/Web/HTML/Element/base
  13 +
  14 + This is a placeholder for base href that will be replaced by the value of
  15 + the `--base-href` argument provided to `flutter build`.
  16 + -->
  17 + <base href="$FLUTTER_BASE_HREF">
  18 +
  19 + <meta charset="UTF-8">
  20 + <meta content="IE=Edge" http-equiv="X-UA-Compatible">
  21 + <meta name="description" content="A new Flutter project.">
  22 +
  23 + <!-- iOS meta tags & icons -->
  24 + <meta name="apple-mobile-web-app-capable" content="yes">
  25 + <meta name="apple-mobile-web-app-status-bar-style" content="black">
  26 + <meta name="apple-mobile-web-app-title" content="example">
  27 + <link rel="apple-touch-icon" href="icons/Icon-192.png">
  28 +
  29 + <!-- Favicon -->
  30 + <link rel="icon" type="image/png" href="favicon.png"/>
  31 +
  32 + <title>example</title>
  33 + <link rel="manifest" href="manifest.json">
  34 +
  35 + <script>
  36 + // The value below is injected by flutter build, do not touch.
  37 + var serviceWorkerVersion = null;
  38 + </script>
  39 + <!-- This script adds the flutter initialization JS code -->
  40 + <script src="flutter.js" defer></script>
  41 +</head>
  42 +<body>
  43 + <script>
  44 + window.addEventListener('load', function(ev) {
  45 + // Download main.dart.js
  46 + _flutter.loader.loadEntrypoint({
  47 + serviceWorker: {
  48 + serviceWorkerVersion: serviceWorkerVersion,
  49 + },
  50 + onEntrypointLoaded: function(engineInitializer) {
  51 + engineInitializer.initializeEngine().then(function(appRunner) {
  52 + appRunner.runApp();
  53 + });
  54 + }
  55 + });
  56 + });
  57 + </script>
  58 +</body>
  59 +</html>
  1 +{
  2 + "name": "example",
  3 + "short_name": "example",
  4 + "start_url": ".",
  5 + "display": "standalone",
  6 + "background_color": "#0175C2",
  7 + "theme_color": "#0175C2",
  8 + "description": "A new Flutter project.",
  9 + "orientation": "portrait-primary",
  10 + "prefer_related_applications": false,
  11 + "icons": [
  12 + {
  13 + "src": "icons/Icon-192.png",
  14 + "sizes": "192x192",
  15 + "type": "image/png"
  16 + },
  17 + {
  18 + "src": "icons/Icon-512.png",
  19 + "sizes": "512x512",
  20 + "type": "image/png"
  21 + },
  22 + {
  23 + "src": "icons/Icon-maskable-192.png",
  24 + "sizes": "192x192",
  25 + "type": "image/png",
  26 + "purpose": "maskable"
  27 + },
  28 + {
  29 + "src": "icons/Icon-maskable-512.png",
  30 + "sizes": "512x512",
  31 + "type": "image/png",
  32 + "purpose": "maskable"
  33 + }
  34 + ]
  35 +}
  1 +flutter/ephemeral/
  2 +
  3 +# Visual Studio user-specific files.
  4 +*.suo
  5 +*.user
  6 +*.userosscache
  7 +*.sln.docstates
  8 +
  9 +# Visual Studio build-related files.
  10 +x64/
  11 +x86/
  12 +
  13 +# Visual Studio cache files
  14 +# files ending in .cache can be ignored
  15 +*.[Cc]ache
  16 +# but keep track of directories ending in .cache
  17 +!*.[Cc]ache/
  1 +# Project-level configuration.
  2 +cmake_minimum_required(VERSION 3.14)
  3 +project(example LANGUAGES CXX)
  4 +
  5 +# The name of the executable created for the application. Change this to change
  6 +# the on-disk name of your application.
  7 +set(BINARY_NAME "example")
  8 +
  9 +# Explicitly opt in to modern CMake behaviors to avoid warnings with recent
  10 +# versions of CMake.
  11 +cmake_policy(SET CMP0063 NEW)
  12 +
  13 +# Define build configuration option.
  14 +get_property(IS_MULTICONFIG GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG)
  15 +if(IS_MULTICONFIG)
  16 + set(CMAKE_CONFIGURATION_TYPES "Debug;Profile;Release"
  17 + CACHE STRING "" FORCE)
  18 +else()
  19 + if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES)
  20 + set(CMAKE_BUILD_TYPE "Debug" CACHE
  21 + STRING "Flutter build mode" FORCE)
  22 + set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS
  23 + "Debug" "Profile" "Release")
  24 + endif()
  25 +endif()
  26 +# Define settings for the Profile build mode.
  27 +set(CMAKE_EXE_LINKER_FLAGS_PROFILE "${CMAKE_EXE_LINKER_FLAGS_RELEASE}")
  28 +set(CMAKE_SHARED_LINKER_FLAGS_PROFILE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE}")
  29 +set(CMAKE_C_FLAGS_PROFILE "${CMAKE_C_FLAGS_RELEASE}")
  30 +set(CMAKE_CXX_FLAGS_PROFILE "${CMAKE_CXX_FLAGS_RELEASE}")
  31 +
  32 +# Use Unicode for all projects.
  33 +add_definitions(-DUNICODE -D_UNICODE)
  34 +
  35 +# Compilation settings that should be applied to most targets.
  36 +#
  37 +# Be cautious about adding new options here, as plugins use this function by
  38 +# default. In most cases, you should add new options to specific targets instead
  39 +# of modifying this function.
  40 +function(APPLY_STANDARD_SETTINGS TARGET)
  41 + target_compile_features(${TARGET} PUBLIC cxx_std_17)
  42 + target_compile_options(${TARGET} PRIVATE /W4 /WX /wd"4100")
  43 + target_compile_options(${TARGET} PRIVATE /EHsc)
  44 + target_compile_definitions(${TARGET} PRIVATE "_HAS_EXCEPTIONS=0")
  45 + target_compile_definitions(${TARGET} PRIVATE "$<$<CONFIG:Debug>:_DEBUG>")
  46 +endfunction()
  47 +
  48 +# Flutter library and tool build rules.
  49 +set(FLUTTER_MANAGED_DIR "${CMAKE_CURRENT_SOURCE_DIR}/flutter")
  50 +add_subdirectory(${FLUTTER_MANAGED_DIR})
  51 +
  52 +# Application build; see runner/CMakeLists.txt.
  53 +add_subdirectory("runner")
  54 +
  55 +# Generated plugin build rules, which manage building the plugins and adding
  56 +# them to the application.
  57 +include(flutter/generated_plugins.cmake)
  58 +
  59 +
  60 +# === Installation ===
  61 +# Support files are copied into place next to the executable, so that it can
  62 +# run in place. This is done instead of making a separate bundle (as on Linux)
  63 +# so that building and running from within Visual Studio will work.
  64 +set(BUILD_BUNDLE_DIR "$<TARGET_FILE_DIR:${BINARY_NAME}>")
  65 +# Make the "install" step default, as it's required to run.
  66 +set(CMAKE_VS_INCLUDE_INSTALL_TO_DEFAULT_BUILD 1)
  67 +if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
  68 + set(CMAKE_INSTALL_PREFIX "${BUILD_BUNDLE_DIR}" CACHE PATH "..." FORCE)
  69 +endif()
  70 +
  71 +set(INSTALL_BUNDLE_DATA_DIR "${CMAKE_INSTALL_PREFIX}/data")
  72 +set(INSTALL_BUNDLE_LIB_DIR "${CMAKE_INSTALL_PREFIX}")
  73 +
  74 +install(TARGETS ${BINARY_NAME} RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX}"
  75 + COMPONENT Runtime)
  76 +
  77 +install(FILES "${FLUTTER_ICU_DATA_FILE}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}"
  78 + COMPONENT Runtime)
  79 +
  80 +install(FILES "${FLUTTER_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}"
  81 + COMPONENT Runtime)
  82 +
  83 +if(PLUGIN_BUNDLED_LIBRARIES)
  84 + install(FILES "${PLUGIN_BUNDLED_LIBRARIES}"
  85 + DESTINATION "${INSTALL_BUNDLE_LIB_DIR}"
  86 + COMPONENT Runtime)
  87 +endif()
  88 +
  89 +# Fully re-copy the assets directory on each build to avoid having stale files
  90 +# from a previous install.
  91 +set(FLUTTER_ASSET_DIR_NAME "flutter_assets")
  92 +install(CODE "
  93 + file(REMOVE_RECURSE \"${INSTALL_BUNDLE_DATA_DIR}/${FLUTTER_ASSET_DIR_NAME}\")
  94 + " COMPONENT Runtime)
  95 +install(DIRECTORY "${PROJECT_BUILD_DIR}/${FLUTTER_ASSET_DIR_NAME}"
  96 + DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" COMPONENT Runtime)
  97 +
  98 +# Install the AOT library on non-Debug builds only.
  99 +install(FILES "${AOT_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}"
  100 + CONFIGURATIONS Profile;Release
  101 + COMPONENT Runtime)
  1 +# This file controls Flutter-level build steps. It should not be edited.
  2 +cmake_minimum_required(VERSION 3.14)
  3 +
  4 +set(EPHEMERAL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/ephemeral")
  5 +
  6 +# Configuration provided via flutter tool.
  7 +include(${EPHEMERAL_DIR}/generated_config.cmake)
  8 +
  9 +# TODO: Move the rest of this into files in ephemeral. See
  10 +# https://github.com/flutter/flutter/issues/57146.
  11 +set(WRAPPER_ROOT "${EPHEMERAL_DIR}/cpp_client_wrapper")
  12 +
  13 +# === Flutter Library ===
  14 +set(FLUTTER_LIBRARY "${EPHEMERAL_DIR}/flutter_windows.dll")
  15 +
  16 +# Published to parent scope for install step.
  17 +set(FLUTTER_LIBRARY ${FLUTTER_LIBRARY} PARENT_SCOPE)
  18 +set(FLUTTER_ICU_DATA_FILE "${EPHEMERAL_DIR}/icudtl.dat" PARENT_SCOPE)
  19 +set(PROJECT_BUILD_DIR "${PROJECT_DIR}/build/" PARENT_SCOPE)
  20 +set(AOT_LIBRARY "${PROJECT_DIR}/build/windows/app.so" PARENT_SCOPE)
  21 +
  22 +list(APPEND FLUTTER_LIBRARY_HEADERS
  23 + "flutter_export.h"
  24 + "flutter_windows.h"
  25 + "flutter_messenger.h"
  26 + "flutter_plugin_registrar.h"
  27 + "flutter_texture_registrar.h"
  28 +)
  29 +list(TRANSFORM FLUTTER_LIBRARY_HEADERS PREPEND "${EPHEMERAL_DIR}/")
  30 +add_library(flutter INTERFACE)
  31 +target_include_directories(flutter INTERFACE
  32 + "${EPHEMERAL_DIR}"
  33 +)
  34 +target_link_libraries(flutter INTERFACE "${FLUTTER_LIBRARY}.lib")
  35 +add_dependencies(flutter flutter_assemble)
  36 +
  37 +# === Wrapper ===
  38 +list(APPEND CPP_WRAPPER_SOURCES_CORE
  39 + "core_implementations.cc"
  40 + "standard_codec.cc"
  41 +)
  42 +list(TRANSFORM CPP_WRAPPER_SOURCES_CORE PREPEND "${WRAPPER_ROOT}/")
  43 +list(APPEND CPP_WRAPPER_SOURCES_PLUGIN
  44 + "plugin_registrar.cc"
  45 +)
  46 +list(TRANSFORM CPP_WRAPPER_SOURCES_PLUGIN PREPEND "${WRAPPER_ROOT}/")
  47 +list(APPEND CPP_WRAPPER_SOURCES_APP
  48 + "flutter_engine.cc"
  49 + "flutter_view_controller.cc"
  50 +)
  51 +list(TRANSFORM CPP_WRAPPER_SOURCES_APP PREPEND "${WRAPPER_ROOT}/")
  52 +
  53 +# Wrapper sources needed for a plugin.
  54 +add_library(flutter_wrapper_plugin STATIC
  55 + ${CPP_WRAPPER_SOURCES_CORE}
  56 + ${CPP_WRAPPER_SOURCES_PLUGIN}
  57 +)
  58 +apply_standard_settings(flutter_wrapper_plugin)
  59 +set_target_properties(flutter_wrapper_plugin PROPERTIES
  60 + POSITION_INDEPENDENT_CODE ON)
  61 +set_target_properties(flutter_wrapper_plugin PROPERTIES
  62 + CXX_VISIBILITY_PRESET hidden)
  63 +target_link_libraries(flutter_wrapper_plugin PUBLIC flutter)
  64 +target_include_directories(flutter_wrapper_plugin PUBLIC
  65 + "${WRAPPER_ROOT}/include"
  66 +)
  67 +add_dependencies(flutter_wrapper_plugin flutter_assemble)
  68 +
  69 +# Wrapper sources needed for the runner.
  70 +add_library(flutter_wrapper_app STATIC
  71 + ${CPP_WRAPPER_SOURCES_CORE}
  72 + ${CPP_WRAPPER_SOURCES_APP}
  73 +)
  74 +apply_standard_settings(flutter_wrapper_app)
  75 +target_link_libraries(flutter_wrapper_app PUBLIC flutter)
  76 +target_include_directories(flutter_wrapper_app PUBLIC
  77 + "${WRAPPER_ROOT}/include"
  78 +)
  79 +add_dependencies(flutter_wrapper_app flutter_assemble)
  80 +
  81 +# === Flutter tool backend ===
  82 +# _phony_ is a non-existent file to force this command to run every time,
  83 +# since currently there's no way to get a full input/output list from the
  84 +# flutter tool.
  85 +set(PHONY_OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/_phony_")
  86 +set_source_files_properties("${PHONY_OUTPUT}" PROPERTIES SYMBOLIC TRUE)
  87 +add_custom_command(
  88 + OUTPUT ${FLUTTER_LIBRARY} ${FLUTTER_LIBRARY_HEADERS}
  89 + ${CPP_WRAPPER_SOURCES_CORE} ${CPP_WRAPPER_SOURCES_PLUGIN}
  90 + ${CPP_WRAPPER_SOURCES_APP}
  91 + ${PHONY_OUTPUT}
  92 + COMMAND ${CMAKE_COMMAND} -E env
  93 + ${FLUTTER_TOOL_ENVIRONMENT}
  94 + "${FLUTTER_ROOT}/packages/flutter_tools/bin/tool_backend.bat"
  95 + windows-x64 $<CONFIG>
  96 + VERBATIM
  97 +)
  98 +add_custom_target(flutter_assemble DEPENDS
  99 + "${FLUTTER_LIBRARY}"
  100 + ${FLUTTER_LIBRARY_HEADERS}
  101 + ${CPP_WRAPPER_SOURCES_CORE}
  102 + ${CPP_WRAPPER_SOURCES_PLUGIN}
  103 + ${CPP_WRAPPER_SOURCES_APP}
  104 +)
  1 +//
  2 +// Generated file. Do not edit.
  3 +//
  4 +
  5 +// clang-format off
  6 +
  7 +#include "generated_plugin_registrant.h"
  8 +
  9 +#include <syncfusion_pdfviewer_windows/syncfusion_pdfviewer_windows_plugin.h>
  10 +#include <url_launcher_windows/url_launcher_windows.h>
  11 +
  12 +void RegisterPlugins(flutter::PluginRegistry* registry) {
  13 + SyncfusionPdfviewerWindowsPluginRegisterWithRegistrar(
  14 + registry->GetRegistrarForPlugin("SyncfusionPdfviewerWindowsPlugin"));
  15 + UrlLauncherWindowsRegisterWithRegistrar(
  16 + registry->GetRegistrarForPlugin("UrlLauncherWindows"));
  17 +}
  1 +//
  2 +// Generated file. Do not edit.
  3 +//
  4 +
  5 +// clang-format off
  6 +
  7 +#ifndef GENERATED_PLUGIN_REGISTRANT_
  8 +#define GENERATED_PLUGIN_REGISTRANT_
  9 +
  10 +#include <flutter/plugin_registry.h>
  11 +
  12 +// Registers Flutter plugins.
  13 +void RegisterPlugins(flutter::PluginRegistry* registry);
  14 +
  15 +#endif // GENERATED_PLUGIN_REGISTRANT_
  1 +#
  2 +# Generated file, do not edit.
  3 +#
  4 +
  5 +list(APPEND FLUTTER_PLUGIN_LIST
  6 + syncfusion_pdfviewer_windows
  7 + url_launcher_windows
  8 +)
  9 +
  10 +list(APPEND FLUTTER_FFI_PLUGIN_LIST
  11 +)
  12 +
  13 +set(PLUGIN_BUNDLED_LIBRARIES)
  14 +
  15 +foreach(plugin ${FLUTTER_PLUGIN_LIST})
  16 + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${plugin}/windows plugins/${plugin})
  17 + target_link_libraries(${BINARY_NAME} PRIVATE ${plugin}_plugin)
  18 + list(APPEND PLUGIN_BUNDLED_LIBRARIES $<TARGET_FILE:${plugin}_plugin>)
  19 + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${plugin}_bundled_libraries})
  20 +endforeach(plugin)
  21 +
  22 +foreach(ffi_plugin ${FLUTTER_FFI_PLUGIN_LIST})
  23 + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${ffi_plugin}/windows plugins/${ffi_plugin})
  24 + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${ffi_plugin}_bundled_libraries})
  25 +endforeach(ffi_plugin)
  1 +cmake_minimum_required(VERSION 3.14)
  2 +project(runner LANGUAGES CXX)
  3 +
  4 +# Define the application target. To change its name, change BINARY_NAME in the
  5 +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer
  6 +# work.
  7 +#
  8 +# Any new source files that you add to the application should be added here.
  9 +add_executable(${BINARY_NAME} WIN32
  10 + "flutter_window.cpp"
  11 + "main.cpp"
  12 + "utils.cpp"
  13 + "win32_window.cpp"
  14 + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc"
  15 + "Runner.rc"
  16 + "runner.exe.manifest"
  17 +)
  18 +
  19 +# Apply the standard set of build settings. This can be removed for applications
  20 +# that need different build settings.
  21 +apply_standard_settings(${BINARY_NAME})
  22 +
  23 +# Add preprocessor definitions for the build version.
  24 +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION=\"${FLUTTER_VERSION}\"")
  25 +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_MAJOR=${FLUTTER_VERSION_MAJOR}")
  26 +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_MINOR=${FLUTTER_VERSION_MINOR}")
  27 +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_PATCH=${FLUTTER_VERSION_PATCH}")
  28 +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_BUILD=${FLUTTER_VERSION_BUILD}")
  29 +
  30 +# Disable Windows macros that collide with C++ standard library functions.
  31 +target_compile_definitions(${BINARY_NAME} PRIVATE "NOMINMAX")
  32 +
  33 +# Add dependency libraries and include directories. Add any application-specific
  34 +# dependencies here.
  35 +target_link_libraries(${BINARY_NAME} PRIVATE flutter flutter_wrapper_app)
  36 +target_link_libraries(${BINARY_NAME} PRIVATE "dwmapi.lib")
  37 +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}")
  38 +
  39 +# Run the Flutter tool portions of the build. This must not be removed.
  40 +add_dependencies(${BINARY_NAME} flutter_assemble)
  1 +// Microsoft Visual C++ generated resource script.
  2 +//
  3 +#pragma code_page(65001)
  4 +#include "resource.h"
  5 +
  6 +#define APSTUDIO_READONLY_SYMBOLS
  7 +/////////////////////////////////////////////////////////////////////////////
  8 +//
  9 +// Generated from the TEXTINCLUDE 2 resource.
  10 +//
  11 +#include "winres.h"
  12 +
  13 +/////////////////////////////////////////////////////////////////////////////
  14 +#undef APSTUDIO_READONLY_SYMBOLS
  15 +
  16 +/////////////////////////////////////////////////////////////////////////////
  17 +// English (United States) resources
  18 +
  19 +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
  20 +LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
  21 +
  22 +#ifdef APSTUDIO_INVOKED
  23 +/////////////////////////////////////////////////////////////////////////////
  24 +//
  25 +// TEXTINCLUDE
  26 +//
  27 +
  28 +1 TEXTINCLUDE
  29 +BEGIN
  30 + "resource.h\0"
  31 +END
  32 +
  33 +2 TEXTINCLUDE
  34 +BEGIN
  35 + "#include ""winres.h""\r\n"
  36 + "\0"
  37 +END
  38 +
  39 +3 TEXTINCLUDE
  40 +BEGIN
  41 + "\r\n"
  42 + "\0"
  43 +END
  44 +
  45 +#endif // APSTUDIO_INVOKED
  46 +
  47 +
  48 +/////////////////////////////////////////////////////////////////////////////
  49 +//
  50 +// Icon
  51 +//
  52 +
  53 +// Icon with lowest ID value placed first to ensure application icon
  54 +// remains consistent on all systems.
  55 +IDI_APP_ICON ICON "resources\\app_icon.ico"
  56 +
  57 +
  58 +/////////////////////////////////////////////////////////////////////////////
  59 +//
  60 +// Version
  61 +//
  62 +
  63 +#if defined(FLUTTER_VERSION_MAJOR) && defined(FLUTTER_VERSION_MINOR) && defined(FLUTTER_VERSION_PATCH) && defined(FLUTTER_VERSION_BUILD)
  64 +#define VERSION_AS_NUMBER FLUTTER_VERSION_MAJOR,FLUTTER_VERSION_MINOR,FLUTTER_VERSION_PATCH,FLUTTER_VERSION_BUILD
  65 +#else
  66 +#define VERSION_AS_NUMBER 1,0,0,0
  67 +#endif
  68 +
  69 +#if defined(FLUTTER_VERSION)
  70 +#define VERSION_AS_STRING FLUTTER_VERSION
  71 +#else
  72 +#define VERSION_AS_STRING "1.0.0"
  73 +#endif
  74 +
  75 +VS_VERSION_INFO VERSIONINFO
  76 + FILEVERSION VERSION_AS_NUMBER
  77 + PRODUCTVERSION VERSION_AS_NUMBER
  78 + FILEFLAGSMASK VS_FFI_FILEFLAGSMASK
  79 +#ifdef _DEBUG
  80 + FILEFLAGS VS_FF_DEBUG
  81 +#else
  82 + FILEFLAGS 0x0L
  83 +#endif
  84 + FILEOS VOS__WINDOWS32
  85 + FILETYPE VFT_APP
  86 + FILESUBTYPE 0x0L
  87 +BEGIN
  88 + BLOCK "StringFileInfo"
  89 + BEGIN
  90 + BLOCK "040904e4"
  91 + BEGIN
  92 + VALUE "CompanyName", "com.example" "\0"
  93 + VALUE "FileDescription", "example" "\0"
  94 + VALUE "FileVersion", VERSION_AS_STRING "\0"
  95 + VALUE "InternalName", "example" "\0"
  96 + VALUE "LegalCopyright", "Copyright (C) 2023 com.example. All rights reserved." "\0"
  97 + VALUE "OriginalFilename", "example.exe" "\0"
  98 + VALUE "ProductName", "example" "\0"
  99 + VALUE "ProductVersion", VERSION_AS_STRING "\0"
  100 + END
  101 + END
  102 + BLOCK "VarFileInfo"
  103 + BEGIN
  104 + VALUE "Translation", 0x409, 1252
  105 + END
  106 +END
  107 +
  108 +#endif // English (United States) resources
  109 +/////////////////////////////////////////////////////////////////////////////
  110 +
  111 +
  112 +
  113 +#ifndef APSTUDIO_INVOKED
  114 +/////////////////////////////////////////////////////////////////////////////
  115 +//
  116 +// Generated from the TEXTINCLUDE 3 resource.
  117 +//
  118 +
  119 +
  120 +/////////////////////////////////////////////////////////////////////////////
  121 +#endif // not APSTUDIO_INVOKED
  1 +#include "flutter_window.h"
  2 +
  3 +#include <optional>
  4 +
  5 +#include "flutter/generated_plugin_registrant.h"
  6 +
  7 +FlutterWindow::FlutterWindow(const flutter::DartProject& project)
  8 + : project_(project) {}
  9 +
  10 +FlutterWindow::~FlutterWindow() {}
  11 +
  12 +bool FlutterWindow::OnCreate() {
  13 + if (!Win32Window::OnCreate()) {
  14 + return false;
  15 + }
  16 +
  17 + RECT frame = GetClientArea();
  18 +
  19 + // The size here must match the window dimensions to avoid unnecessary surface
  20 + // creation / destruction in the startup path.
  21 + flutter_controller_ = std::make_unique<flutter::FlutterViewController>(
  22 + frame.right - frame.left, frame.bottom - frame.top, project_);
  23 + // Ensure that basic setup of the controller was successful.
  24 + if (!flutter_controller_->engine() || !flutter_controller_->view()) {
  25 + return false;
  26 + }
  27 + RegisterPlugins(flutter_controller_->engine());
  28 + SetChildContent(flutter_controller_->view()->GetNativeWindow());
  29 +
  30 + flutter_controller_->engine()->SetNextFrameCallback([&]() {
  31 + this->Show();
  32 + });
  33 +
  34 + return true;
  35 +}
  36 +
  37 +void FlutterWindow::OnDestroy() {
  38 + if (flutter_controller_) {
  39 + flutter_controller_ = nullptr;
  40 + }
  41 +
  42 + Win32Window::OnDestroy();
  43 +}
  44 +
  45 +LRESULT
  46 +FlutterWindow::MessageHandler(HWND hwnd, UINT const message,
  47 + WPARAM const wparam,
  48 + LPARAM const lparam) noexcept {
  49 + // Give Flutter, including plugins, an opportunity to handle window messages.
  50 + if (flutter_controller_) {
  51 + std::optional<LRESULT> result =
  52 + flutter_controller_->HandleTopLevelWindowProc(hwnd, message, wparam,
  53 + lparam);
  54 + if (result) {
  55 + return *result;
  56 + }
  57 + }
  58 +
  59 + switch (message) {
  60 + case WM_FONTCHANGE:
  61 + flutter_controller_->engine()->ReloadSystemFonts();
  62 + break;
  63 + }
  64 +
  65 + return Win32Window::MessageHandler(hwnd, message, wparam, lparam);
  66 +}
  1 +#ifndef RUNNER_FLUTTER_WINDOW_H_
  2 +#define RUNNER_FLUTTER_WINDOW_H_
  3 +
  4 +#include <flutter/dart_project.h>
  5 +#include <flutter/flutter_view_controller.h>
  6 +
  7 +#include <memory>
  8 +
  9 +#include "win32_window.h"
  10 +
  11 +// A window that does nothing but host a Flutter view.
  12 +class FlutterWindow : public Win32Window {
  13 + public:
  14 + // Creates a new FlutterWindow hosting a Flutter view running |project|.
  15 + explicit FlutterWindow(const flutter::DartProject& project);
  16 + virtual ~FlutterWindow();
  17 +
  18 + protected:
  19 + // Win32Window:
  20 + bool OnCreate() override;
  21 + void OnDestroy() override;
  22 + LRESULT MessageHandler(HWND window, UINT const message, WPARAM const wparam,
  23 + LPARAM const lparam) noexcept override;
  24 +
  25 + private:
  26 + // The project to run.
  27 + flutter::DartProject project_;
  28 +
  29 + // The Flutter instance hosted by this window.
  30 + std::unique_ptr<flutter::FlutterViewController> flutter_controller_;
  31 +};
  32 +
  33 +#endif // RUNNER_FLUTTER_WINDOW_H_
  1 +#include <flutter/dart_project.h>
  2 +#include <flutter/flutter_view_controller.h>
  3 +#include <windows.h>
  4 +
  5 +#include "flutter_window.h"
  6 +#include "utils.h"
  7 +
  8 +int APIENTRY wWinMain(_In_ HINSTANCE instance, _In_opt_ HINSTANCE prev,
  9 + _In_ wchar_t *command_line, _In_ int show_command) {
  10 + // Attach to console when present (e.g., 'flutter run') or create a
  11 + // new console when running with a debugger.
  12 + if (!::AttachConsole(ATTACH_PARENT_PROCESS) && ::IsDebuggerPresent()) {
  13 + CreateAndAttachConsole();
  14 + }
  15 +
  16 + // Initialize COM, so that it is available for use in the library and/or
  17 + // plugins.
  18 + ::CoInitializeEx(nullptr, COINIT_APARTMENTTHREADED);
  19 +
  20 + flutter::DartProject project(L"data");
  21 +
  22 + std::vector<std::string> command_line_arguments =
  23 + GetCommandLineArguments();
  24 +
  25 + project.set_dart_entrypoint_arguments(std::move(command_line_arguments));
  26 +
  27 + FlutterWindow window(project);
  28 + Win32Window::Point origin(10, 10);
  29 + Win32Window::Size size(1280, 720);
  30 + if (!window.Create(L"example", origin, size)) {
  31 + return EXIT_FAILURE;
  32 + }
  33 + window.SetQuitOnClose(true);
  34 +
  35 + ::MSG msg;
  36 + while (::GetMessage(&msg, nullptr, 0, 0)) {
  37 + ::TranslateMessage(&msg);
  38 + ::DispatchMessage(&msg);
  39 + }
  40 +
  41 + ::CoUninitialize();
  42 + return EXIT_SUCCESS;
  43 +}
  1 +//{{NO_DEPENDENCIES}}
  2 +// Microsoft Visual C++ generated include file.
  3 +// Used by Runner.rc
  4 +//
  5 +#define IDI_APP_ICON 101
  6 +
  7 +// Next default values for new objects
  8 +//
  9 +#ifdef APSTUDIO_INVOKED
  10 +#ifndef APSTUDIO_READONLY_SYMBOLS
  11 +#define _APS_NEXT_RESOURCE_VALUE 102
  12 +#define _APS_NEXT_COMMAND_VALUE 40001
  13 +#define _APS_NEXT_CONTROL_VALUE 1001
  14 +#define _APS_NEXT_SYMED_VALUE 101
  15 +#endif
  16 +#endif
  1 +<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
  2 +<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
  3 + <application xmlns="urn:schemas-microsoft-com:asm.v3">
  4 + <windowsSettings>
  5 + <dpiAwareness xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">PerMonitorV2</dpiAwareness>
  6 + </windowsSettings>
  7 + </application>
  8 + <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
  9 + <application>
  10 + <!-- Windows 10 and Windows 11 -->
  11 + <supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/>
  12 + <!-- Windows 8.1 -->
  13 + <supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/>
  14 + <!-- Windows 8 -->
  15 + <supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/>
  16 + <!-- Windows 7 -->
  17 + <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>
  18 + </application>
  19 + </compatibility>
  20 +</assembly>
  1 +#include "utils.h"
  2 +
  3 +#include <flutter_windows.h>
  4 +#include <io.h>
  5 +#include <stdio.h>
  6 +#include <windows.h>
  7 +
  8 +#include <iostream>
  9 +
  10 +void CreateAndAttachConsole() {
  11 + if (::AllocConsole()) {
  12 + FILE *unused;
  13 + if (freopen_s(&unused, "CONOUT$", "w", stdout)) {
  14 + _dup2(_fileno(stdout), 1);
  15 + }
  16 + if (freopen_s(&unused, "CONOUT$", "w", stderr)) {
  17 + _dup2(_fileno(stdout), 2);
  18 + }
  19 + std::ios::sync_with_stdio();
  20 + FlutterDesktopResyncOutputStreams();
  21 + }
  22 +}
  23 +
  24 +std::vector<std::string> GetCommandLineArguments() {
  25 + // Convert the UTF-16 command line arguments to UTF-8 for the Engine to use.
  26 + int argc;
  27 + wchar_t** argv = ::CommandLineToArgvW(::GetCommandLineW(), &argc);
  28 + if (argv == nullptr) {
  29 + return std::vector<std::string>();
  30 + }
  31 +
  32 + std::vector<std::string> command_line_arguments;
  33 +
  34 + // Skip the first argument as it's the binary name.
  35 + for (int i = 1; i < argc; i++) {
  36 + command_line_arguments.push_back(Utf8FromUtf16(argv[i]));
  37 + }
  38 +
  39 + ::LocalFree(argv);
  40 +
  41 + return command_line_arguments;
  42 +}
  43 +
  44 +std::string Utf8FromUtf16(const wchar_t* utf16_string) {
  45 + if (utf16_string == nullptr) {
  46 + return std::string();
  47 + }
  48 + int target_length = ::WideCharToMultiByte(
  49 + CP_UTF8, WC_ERR_INVALID_CHARS, utf16_string,
  50 + -1, nullptr, 0, nullptr, nullptr);
  51 + std::string utf8_string;
  52 + if (target_length == 0 || target_length > utf8_string.max_size()) {
  53 + return utf8_string;
  54 + }
  55 + utf8_string.resize(target_length);
  56 + int converted_length = ::WideCharToMultiByte(
  57 + CP_UTF8, WC_ERR_INVALID_CHARS, utf16_string,
  58 + -1, utf8_string.data(),
  59 + target_length, nullptr, nullptr);
  60 + if (converted_length == 0) {
  61 + return std::string();
  62 + }
  63 + return utf8_string;
  64 +}
  1 +#ifndef RUNNER_UTILS_H_
  2 +#define RUNNER_UTILS_H_
  3 +
  4 +#include <string>
  5 +#include <vector>
  6 +
  7 +// Creates a console for the process, and redirects stdout and stderr to
  8 +// it for both the runner and the Flutter library.
  9 +void CreateAndAttachConsole();
  10 +
  11 +// Takes a null-terminated wchar_t* encoded in UTF-16 and returns a std::string
  12 +// encoded in UTF-8. Returns an empty std::string on failure.
  13 +std::string Utf8FromUtf16(const wchar_t* utf16_string);
  14 +
  15 +// Gets the command line arguments passed in as a std::vector<std::string>,
  16 +// encoded in UTF-8. Returns an empty std::vector<std::string> on failure.
  17 +std::vector<std::string> GetCommandLineArguments();
  18 +
  19 +#endif // RUNNER_UTILS_H_
  1 +#include "win32_window.h"
  2 +
  3 +#include <dwmapi.h>
  4 +#include <flutter_windows.h>
  5 +
  6 +#include "resource.h"
  7 +
  8 +namespace {
  9 +
  10 +/// Window attribute that enables dark mode window decorations.
  11 +///
  12 +/// Redefined in case the developer's machine has a Windows SDK older than
  13 +/// version 10.0.22000.0.
  14 +/// See: https://docs.microsoft.com/windows/win32/api/dwmapi/ne-dwmapi-dwmwindowattribute
  15 +#ifndef DWMWA_USE_IMMERSIVE_DARK_MODE
  16 +#define DWMWA_USE_IMMERSIVE_DARK_MODE 20
  17 +#endif
  18 +
  19 +constexpr const wchar_t kWindowClassName[] = L"FLUTTER_RUNNER_WIN32_WINDOW";
  20 +
  21 +/// Registry key for app theme preference.
  22 +///
  23 +/// A value of 0 indicates apps should use dark mode. A non-zero or missing
  24 +/// value indicates apps should use light mode.
  25 +constexpr const wchar_t kGetPreferredBrightnessRegKey[] =
  26 + L"Software\\Microsoft\\Windows\\CurrentVersion\\Themes\\Personalize";
  27 +constexpr const wchar_t kGetPreferredBrightnessRegValue[] = L"AppsUseLightTheme";
  28 +
  29 +// The number of Win32Window objects that currently exist.
  30 +static int g_active_window_count = 0;
  31 +
  32 +using EnableNonClientDpiScaling = BOOL __stdcall(HWND hwnd);
  33 +
  34 +// Scale helper to convert logical scaler values to physical using passed in
  35 +// scale factor
  36 +int Scale(int source, double scale_factor) {
  37 + return static_cast<int>(source * scale_factor);
  38 +}
  39 +
  40 +// Dynamically loads the |EnableNonClientDpiScaling| from the User32 module.
  41 +// This API is only needed for PerMonitor V1 awareness mode.
  42 +void EnableFullDpiSupportIfAvailable(HWND hwnd) {
  43 + HMODULE user32_module = LoadLibraryA("User32.dll");
  44 + if (!user32_module) {
  45 + return;
  46 + }
  47 + auto enable_non_client_dpi_scaling =
  48 + reinterpret_cast<EnableNonClientDpiScaling*>(
  49 + GetProcAddress(user32_module, "EnableNonClientDpiScaling"));
  50 + if (enable_non_client_dpi_scaling != nullptr) {
  51 + enable_non_client_dpi_scaling(hwnd);
  52 + }
  53 + FreeLibrary(user32_module);
  54 +}
  55 +
  56 +} // namespace
  57 +
  58 +// Manages the Win32Window's window class registration.
  59 +class WindowClassRegistrar {
  60 + public:
  61 + ~WindowClassRegistrar() = default;
  62 +
  63 + // Returns the singleton registar instance.
  64 + static WindowClassRegistrar* GetInstance() {
  65 + if (!instance_) {
  66 + instance_ = new WindowClassRegistrar();
  67 + }
  68 + return instance_;
  69 + }
  70 +
  71 + // Returns the name of the window class, registering the class if it hasn't
  72 + // previously been registered.
  73 + const wchar_t* GetWindowClass();
  74 +
  75 + // Unregisters the window class. Should only be called if there are no
  76 + // instances of the window.
  77 + void UnregisterWindowClass();
  78 +
  79 + private:
  80 + WindowClassRegistrar() = default;
  81 +
  82 + static WindowClassRegistrar* instance_;
  83 +
  84 + bool class_registered_ = false;
  85 +};
  86 +
  87 +WindowClassRegistrar* WindowClassRegistrar::instance_ = nullptr;
  88 +
  89 +const wchar_t* WindowClassRegistrar::GetWindowClass() {
  90 + if (!class_registered_) {
  91 + WNDCLASS window_class{};
  92 + window_class.hCursor = LoadCursor(nullptr, IDC_ARROW);
  93 + window_class.lpszClassName = kWindowClassName;
  94 + window_class.style = CS_HREDRAW | CS_VREDRAW;
  95 + window_class.cbClsExtra = 0;
  96 + window_class.cbWndExtra = 0;
  97 + window_class.hInstance = GetModuleHandle(nullptr);
  98 + window_class.hIcon =
  99 + LoadIcon(window_class.hInstance, MAKEINTRESOURCE(IDI_APP_ICON));
  100 + window_class.hbrBackground = 0;
  101 + window_class.lpszMenuName = nullptr;
  102 + window_class.lpfnWndProc = Win32Window::WndProc;
  103 + RegisterClass(&window_class);
  104 + class_registered_ = true;
  105 + }
  106 + return kWindowClassName;
  107 +}
  108 +
  109 +void WindowClassRegistrar::UnregisterWindowClass() {
  110 + UnregisterClass(kWindowClassName, nullptr);
  111 + class_registered_ = false;
  112 +}
  113 +
  114 +Win32Window::Win32Window() {
  115 + ++g_active_window_count;
  116 +}
  117 +
  118 +Win32Window::~Win32Window() {
  119 + --g_active_window_count;
  120 + Destroy();
  121 +}
  122 +
  123 +bool Win32Window::Create(const std::wstring& title,
  124 + const Point& origin,
  125 + const Size& size) {
  126 + Destroy();
  127 +
  128 + const wchar_t* window_class =
  129 + WindowClassRegistrar::GetInstance()->GetWindowClass();
  130 +
  131 + const POINT target_point = {static_cast<LONG>(origin.x),
  132 + static_cast<LONG>(origin.y)};
  133 + HMONITOR monitor = MonitorFromPoint(target_point, MONITOR_DEFAULTTONEAREST);
  134 + UINT dpi = FlutterDesktopGetDpiForMonitor(monitor);
  135 + double scale_factor = dpi / 96.0;
  136 +
  137 + HWND window = CreateWindow(
  138 + window_class, title.c_str(), WS_OVERLAPPEDWINDOW,
  139 + Scale(origin.x, scale_factor), Scale(origin.y, scale_factor),
  140 + Scale(size.width, scale_factor), Scale(size.height, scale_factor),
  141 + nullptr, nullptr, GetModuleHandle(nullptr), this);
  142 +
  143 + if (!window) {
  144 + return false;
  145 + }
  146 +
  147 + UpdateTheme(window);
  148 +
  149 + return OnCreate();
  150 +}
  151 +
  152 +bool Win32Window::Show() {
  153 + return ShowWindow(window_handle_, SW_SHOWNORMAL);
  154 +}
  155 +
  156 +// static
  157 +LRESULT CALLBACK Win32Window::WndProc(HWND const window,
  158 + UINT const message,
  159 + WPARAM const wparam,
  160 + LPARAM const lparam) noexcept {
  161 + if (message == WM_NCCREATE) {
  162 + auto window_struct = reinterpret_cast<CREATESTRUCT*>(lparam);
  163 + SetWindowLongPtr(window, GWLP_USERDATA,
  164 + reinterpret_cast<LONG_PTR>(window_struct->lpCreateParams));
  165 +
  166 + auto that = static_cast<Win32Window*>(window_struct->lpCreateParams);
  167 + EnableFullDpiSupportIfAvailable(window);
  168 + that->window_handle_ = window;
  169 + } else if (Win32Window* that = GetThisFromHandle(window)) {
  170 + return that->MessageHandler(window, message, wparam, lparam);
  171 + }
  172 +
  173 + return DefWindowProc(window, message, wparam, lparam);
  174 +}
  175 +
  176 +LRESULT
  177 +Win32Window::MessageHandler(HWND hwnd,
  178 + UINT const message,
  179 + WPARAM const wparam,
  180 + LPARAM const lparam) noexcept {
  181 + switch (message) {
  182 + case WM_DESTROY:
  183 + window_handle_ = nullptr;
  184 + Destroy();
  185 + if (quit_on_close_) {
  186 + PostQuitMessage(0);
  187 + }
  188 + return 0;
  189 +
  190 + case WM_DPICHANGED: {
  191 + auto newRectSize = reinterpret_cast<RECT*>(lparam);
  192 + LONG newWidth = newRectSize->right - newRectSize->left;
  193 + LONG newHeight = newRectSize->bottom - newRectSize->top;
  194 +
  195 + SetWindowPos(hwnd, nullptr, newRectSize->left, newRectSize->top, newWidth,
  196 + newHeight, SWP_NOZORDER | SWP_NOACTIVATE);
  197 +
  198 + return 0;
  199 + }
  200 + case WM_SIZE: {
  201 + RECT rect = GetClientArea();
  202 + if (child_content_ != nullptr) {
  203 + // Size and position the child window.
  204 + MoveWindow(child_content_, rect.left, rect.top, rect.right - rect.left,
  205 + rect.bottom - rect.top, TRUE);
  206 + }
  207 + return 0;
  208 + }
  209 +
  210 + case WM_ACTIVATE:
  211 + if (child_content_ != nullptr) {
  212 + SetFocus(child_content_);
  213 + }
  214 + return 0;
  215 +
  216 + case WM_DWMCOLORIZATIONCOLORCHANGED:
  217 + UpdateTheme(hwnd);
  218 + return 0;
  219 + }
  220 +
  221 + return DefWindowProc(window_handle_, message, wparam, lparam);
  222 +}
  223 +
  224 +void Win32Window::Destroy() {
  225 + OnDestroy();
  226 +
  227 + if (window_handle_) {
  228 + DestroyWindow(window_handle_);
  229 + window_handle_ = nullptr;
  230 + }
  231 + if (g_active_window_count == 0) {
  232 + WindowClassRegistrar::GetInstance()->UnregisterWindowClass();
  233 + }
  234 +}
  235 +
  236 +Win32Window* Win32Window::GetThisFromHandle(HWND const window) noexcept {
  237 + return reinterpret_cast<Win32Window*>(
  238 + GetWindowLongPtr(window, GWLP_USERDATA));
  239 +}
  240 +
  241 +void Win32Window::SetChildContent(HWND content) {
  242 + child_content_ = content;
  243 + SetParent(content, window_handle_);
  244 + RECT frame = GetClientArea();
  245 +
  246 + MoveWindow(content, frame.left, frame.top, frame.right - frame.left,
  247 + frame.bottom - frame.top, true);
  248 +
  249 + SetFocus(child_content_);
  250 +}
  251 +
  252 +RECT Win32Window::GetClientArea() {
  253 + RECT frame;
  254 + GetClientRect(window_handle_, &frame);
  255 + return frame;
  256 +}
  257 +
  258 +HWND Win32Window::GetHandle() {
  259 + return window_handle_;
  260 +}
  261 +
  262 +void Win32Window::SetQuitOnClose(bool quit_on_close) {
  263 + quit_on_close_ = quit_on_close;
  264 +}
  265 +
  266 +bool Win32Window::OnCreate() {
  267 + // No-op; provided for subclasses.
  268 + return true;
  269 +}
  270 +
  271 +void Win32Window::OnDestroy() {
  272 + // No-op; provided for subclasses.
  273 +}
  274 +
  275 +void Win32Window::UpdateTheme(HWND const window) {
  276 + DWORD light_mode;
  277 + DWORD light_mode_size = sizeof(light_mode);
  278 + LSTATUS result = RegGetValue(HKEY_CURRENT_USER, kGetPreferredBrightnessRegKey,
  279 + kGetPreferredBrightnessRegValue,
  280 + RRF_RT_REG_DWORD, nullptr, &light_mode,
  281 + &light_mode_size);
  282 +
  283 + if (result == ERROR_SUCCESS) {
  284 + BOOL enable_dark_mode = light_mode == 0;
  285 + DwmSetWindowAttribute(window, DWMWA_USE_IMMERSIVE_DARK_MODE,
  286 + &enable_dark_mode, sizeof(enable_dark_mode));
  287 + }
  288 +}
  1 +#ifndef RUNNER_WIN32_WINDOW_H_
  2 +#define RUNNER_WIN32_WINDOW_H_
  3 +
  4 +#include <windows.h>
  5 +
  6 +#include <functional>
  7 +#include <memory>
  8 +#include <string>
  9 +
  10 +// A class abstraction for a high DPI-aware Win32 Window. Intended to be
  11 +// inherited from by classes that wish to specialize with custom
  12 +// rendering and input handling
  13 +class Win32Window {
  14 + public:
  15 + struct Point {
  16 + unsigned int x;
  17 + unsigned int y;
  18 + Point(unsigned int x, unsigned int y) : x(x), y(y) {}
  19 + };
  20 +
  21 + struct Size {
  22 + unsigned int width;
  23 + unsigned int height;
  24 + Size(unsigned int width, unsigned int height)
  25 + : width(width), height(height) {}
  26 + };
  27 +
  28 + Win32Window();
  29 + virtual ~Win32Window();
  30 +
  31 + // Creates a win32 window with |title| that is positioned and sized using
  32 + // |origin| and |size|. New windows are created on the default monitor. Window
  33 + // sizes are specified to the OS in physical pixels, hence to ensure a
  34 + // consistent size this function will scale the inputted width and height as
  35 + // as appropriate for the default monitor. The window is invisible until
  36 + // |Show| is called. Returns true if the window was created successfully.
  37 + bool Create(const std::wstring& title, const Point& origin, const Size& size);
  38 +
  39 + // Show the current window. Returns true if the window was successfully shown.
  40 + bool Show();
  41 +
  42 + // Release OS resources associated with window.
  43 + void Destroy();
  44 +
  45 + // Inserts |content| into the window tree.
  46 + void SetChildContent(HWND content);
  47 +
  48 + // Returns the backing Window handle to enable clients to set icon and other
  49 + // window properties. Returns nullptr if the window has been destroyed.
  50 + HWND GetHandle();
  51 +
  52 + // If true, closing this window will quit the application.
  53 + void SetQuitOnClose(bool quit_on_close);
  54 +
  55 + // Return a RECT representing the bounds of the current client area.
  56 + RECT GetClientArea();
  57 +
  58 + protected:
  59 + // Processes and route salient window messages for mouse handling,
  60 + // size change and DPI. Delegates handling of these to member overloads that
  61 + // inheriting classes can handle.
  62 + virtual LRESULT MessageHandler(HWND window,
  63 + UINT const message,
  64 + WPARAM const wparam,
  65 + LPARAM const lparam) noexcept;
  66 +
  67 + // Called when CreateAndShow is called, allowing subclass window-related
  68 + // setup. Subclasses should return false if setup fails.
  69 + virtual bool OnCreate();
  70 +
  71 + // Called when Destroy is called.
  72 + virtual void OnDestroy();
  73 +
  74 + private:
  75 + friend class WindowClassRegistrar;
  76 +
  77 + // OS callback called by message pump. Handles the WM_NCCREATE message which
  78 + // is passed when the non-client area is being created and enables automatic
  79 + // non-client DPI scaling so that the non-client area automatically
  80 + // responsponds to changes in DPI. All other messages are handled by
  81 + // MessageHandler.
  82 + static LRESULT CALLBACK WndProc(HWND const window,
  83 + UINT const message,
  84 + WPARAM const wparam,
  85 + LPARAM const lparam) noexcept;
  86 +
  87 + // Retrieves a class instance pointer for |window|
  88 + static Win32Window* GetThisFromHandle(HWND const window) noexcept;
  89 +
  90 + // Update the window frame's theme to match the system theme.
  91 + static void UpdateTheme(HWND const window);
  92 +
  93 + bool quit_on_close_ = false;
  94 +
  95 + // window handle for top level window.
  96 + HWND window_handle_ = nullptr;
  97 +
  98 + // window handle for hosted content.
  99 + HWND child_content_ = nullptr;
  100 +};
  101 +
  102 +#endif // RUNNER_WIN32_WINDOW_H_
  1 +// This is a generated file; do not edit or check into version control.
  2 +FLUTTER_ROOT=/Users/sohag/Developer/flutter
  3 +FLUTTER_APPLICATION_PATH=/Users/sohag/Documents/Projects/Flutter/packages/flutter_packages/markdown_to_pdf
  4 +COCOAPODS_PARALLEL_CODE_SIGN=true
  5 +FLUTTER_TARGET=lib/main.dart
  6 +FLUTTER_BUILD_DIR=build
  7 +FLUTTER_BUILD_NAME=0.0.1
  8 +FLUTTER_BUILD_NUMBER=0.0.1
  9 +EXCLUDED_ARCHS[sdk=iphonesimulator*]=i386
  10 +EXCLUDED_ARCHS[sdk=iphoneos*]=armv7
  11 +DART_OBFUSCATION=false
  12 +TRACK_WIDGET_CREATION=true
  13 +TREE_SHAKE_ICONS=false
  14 +PACKAGE_CONFIG=.dart_tool/package_config.json
  1 +#!/bin/sh
  2 +# This is a generated file; do not edit or check into version control.
  3 +export "FLUTTER_ROOT=/Users/sohag/Developer/flutter"
  4 +export "FLUTTER_APPLICATION_PATH=/Users/sohag/Documents/Projects/Flutter/packages/flutter_packages/markdown_to_pdf"
  5 +export "COCOAPODS_PARALLEL_CODE_SIGN=true"
  6 +export "FLUTTER_TARGET=lib/main.dart"
  7 +export "FLUTTER_BUILD_DIR=build"
  8 +export "FLUTTER_BUILD_NAME=0.0.1"
  9 +export "FLUTTER_BUILD_NUMBER=0.0.1"
  10 +export "DART_OBFUSCATION=false"
  11 +export "TRACK_WIDGET_CREATION=true"
  12 +export "TREE_SHAKE_ICONS=false"
  13 +export "PACKAGE_CONFIG=.dart_tool/package_config.json"
  1 +//
  2 +// Generated file. Do not edit.
  3 +//
  4 +
  5 +// clang-format off
  6 +
  7 +#ifndef GeneratedPluginRegistrant_h
  8 +#define GeneratedPluginRegistrant_h
  9 +
  10 +#import <Flutter/Flutter.h>
  11 +
  12 +NS_ASSUME_NONNULL_BEGIN
  13 +
  14 +@interface GeneratedPluginRegistrant : NSObject
  15 ++ (void)registerWithRegistry:(NSObject<FlutterPluginRegistry>*)registry;
  16 +@end
  17 +
  18 +NS_ASSUME_NONNULL_END
  19 +#endif /* GeneratedPluginRegistrant_h */
  1 +//
  2 +// Generated file. Do not edit.
  3 +//
  4 +
  5 +// clang-format off
  6 +
  7 +#import "GeneratedPluginRegistrant.h"
  8 +
  9 +@implementation GeneratedPluginRegistrant
  10 +
  11 ++ (void)registerWithRegistry:(NSObject<FlutterPluginRegistry>*)registry {
  12 +}
  13 +
  14 +@end
  1 +import 'dart:io';
  2 +import 'package:markdown/markdown.dart' as markdown;
  3 +import 'package:pdf/pdf.dart';
  4 +import 'package:pdf/widgets.dart' as pdf;
  5 +
  6 +void convert(String text) {
  7 + final file = File(inputPath);
  8 + final markdownText = file.readAsStringSync();
  9 +}
  1 +//
  2 +// Generated file. Do not edit.
  3 +//
  4 +
  5 +// clang-format off
  6 +
  7 +#include "generated_plugin_registrant.h"
  8 +
  9 +
  10 +void fl_register_plugins(FlPluginRegistry* registry) {
  11 +}
  1 +//
  2 +// Generated file. Do not edit.
  3 +//
  4 +
  5 +// clang-format off
  6 +
  7 +#ifndef GENERATED_PLUGIN_REGISTRANT_
  8 +#define GENERATED_PLUGIN_REGISTRANT_
  9 +
  10 +#include <flutter_linux/flutter_linux.h>
  11 +
  12 +// Registers Flutter plugins.
  13 +void fl_register_plugins(FlPluginRegistry* registry);
  14 +
  15 +#endif // GENERATED_PLUGIN_REGISTRANT_
  1 +#
  2 +# Generated file, do not edit.
  3 +#
  4 +
  5 +list(APPEND FLUTTER_PLUGIN_LIST
  6 +)
  7 +
  8 +list(APPEND FLUTTER_FFI_PLUGIN_LIST
  9 +)
  10 +
  11 +set(PLUGIN_BUNDLED_LIBRARIES)
  12 +
  13 +foreach(plugin ${FLUTTER_PLUGIN_LIST})
  14 + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${plugin}/linux plugins/${plugin})
  15 + target_link_libraries(${BINARY_NAME} PRIVATE ${plugin}_plugin)
  16 + list(APPEND PLUGIN_BUNDLED_LIBRARIES $<TARGET_FILE:${plugin}_plugin>)
  17 + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${plugin}_bundled_libraries})
  18 +endforeach(plugin)
  19 +
  20 +foreach(ffi_plugin ${FLUTTER_FFI_PLUGIN_LIST})
  21 + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${ffi_plugin}/linux plugins/${ffi_plugin})
  22 + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${ffi_plugin}_bundled_libraries})
  23 +endforeach(ffi_plugin)
  1 +//
  2 +// Generated file. Do not edit.
  3 +//
  4 +
  5 +import FlutterMacOS
  6 +import Foundation
  7 +
  8 +
  9 +func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) {
  10 +}
  1 +// This is a generated file; do not edit or check into version control.
  2 +FLUTTER_ROOT=/Users/sohag/Developer/flutter
  3 +FLUTTER_APPLICATION_PATH=/Users/sohag/Documents/Projects/Flutter/packages/flutter_packages/markdown_to_pdf
  4 +COCOAPODS_PARALLEL_CODE_SIGN=true
  5 +FLUTTER_BUILD_DIR=build
  6 +FLUTTER_BUILD_NAME=0.0.1
  7 +FLUTTER_BUILD_NUMBER=0.0.1
  8 +DART_OBFUSCATION=false
  9 +TRACK_WIDGET_CREATION=true
  10 +TREE_SHAKE_ICONS=false
  11 +PACKAGE_CONFIG=.dart_tool/package_config.json
  1 +#!/bin/sh
  2 +# This is a generated file; do not edit or check into version control.
  3 +export "FLUTTER_ROOT=/Users/sohag/Developer/flutter"
  4 +export "FLUTTER_APPLICATION_PATH=/Users/sohag/Documents/Projects/Flutter/packages/flutter_packages/markdown_to_pdf"
  5 +export "COCOAPODS_PARALLEL_CODE_SIGN=true"
  6 +export "FLUTTER_BUILD_DIR=build"
  7 +export "FLUTTER_BUILD_NAME=0.0.1"
  8 +export "FLUTTER_BUILD_NUMBER=0.0.1"
  9 +export "DART_OBFUSCATION=false"
  10 +export "TRACK_WIDGET_CREATION=true"
  11 +export "TREE_SHAKE_ICONS=false"
  12 +export "PACKAGE_CONFIG=.dart_tool/package_config.json"
  1 +name: markdown_to_pdf
  2 +description: A new Flutter package project.
  3 +version: 0.0.1
  4 +homepage:
  5 +
  6 +environment:
  7 + sdk: '>=2.19.4 <3.0.0'
  8 + flutter: ">=1.17.0"
  9 +
  10 +dependencies:
  11 + flutter:
  12 + sdk: flutter
  13 + http: ^0.13.5
  14 + markdown: ^7.0.1
  15 + pdf: ^3.9.0
  16 + tex_text: ^0.0.7
  17 +
  18 +dev_dependencies:
  19 + flutter_test:
  20 + sdk: flutter
  21 + flutter_lints: ^2.0.0
  22 +
  23 +# For information on the generic Dart part of this file, see the
  24 +# following page: https://dart.dev/tools/pub/pubspec
  25 +
  26 +# The following section is specific to Flutter packages.
  27 +flutter:
  28 +
  29 + # To add assets to your package, add an assets section, like this:
  30 + # assets:
  31 + # - images/a_dot_burr.jpeg
  32 + # - images/a_dot_ham.jpeg
  33 + #
  34 + # For details regarding assets in packages, see
  35 + # https://flutter.dev/assets-and-images/#from-packages
  36 + #
  37 + # An image asset can refer to one or more resolution-specific "variants", see
  38 + # https://flutter.dev/assets-and-images/#resolution-aware
  39 +
  40 + # To add custom fonts to your package, add a fonts section here,
  41 + # in this "flutter" section. Each entry in this list should have a
  42 + # "family" key with the font family name, and a "fonts" key with a
  43 + # list giving the asset and other descriptors for the font. For
  44 + # example:
  45 + # fonts:
  46 + # - family: Schyler
  47 + # fonts:
  48 + # - asset: fonts/Schyler-Regular.ttf
  49 + # - asset: fonts/Schyler-Italic.ttf
  50 + # style: italic
  51 + # - family: Trajan Pro
  52 + # fonts:
  53 + # - asset: fonts/TrajanPro.ttf
  54 + # - asset: fonts/TrajanPro_Bold.ttf
  55 + # weight: 700
  56 + #
  57 + # For details regarding fonts in packages, see
  58 + # https://flutter.dev/custom-fonts/#from-packages
  1 +import 'package:flutter_test/flutter_test.dart';
  2 +
  3 +void main() {
  4 + test('adds one to input values', () {
  5 + // final calculator = Calculator();
  6 + // expect(calculator.addOne(2), 3);
  7 + // expect(calculator.addOne(-7), -6);
  8 + // expect(calculator.addOne(0), 1);
  9 + });
  10 +}
  1 +//
  2 +// Generated file. Do not edit.
  3 +//
  4 +
  5 +// clang-format off
  6 +
  7 +#include "generated_plugin_registrant.h"
  8 +
  9 +
  10 +void RegisterPlugins(flutter::PluginRegistry* registry) {
  11 +}
  1 +//
  2 +// Generated file. Do not edit.
  3 +//
  4 +
  5 +// clang-format off
  6 +
  7 +#ifndef GENERATED_PLUGIN_REGISTRANT_
  8 +#define GENERATED_PLUGIN_REGISTRANT_
  9 +
  10 +#include <flutter/plugin_registry.h>
  11 +
  12 +// Registers Flutter plugins.
  13 +void RegisterPlugins(flutter::PluginRegistry* registry);
  14 +
  15 +#endif // GENERATED_PLUGIN_REGISTRANT_
  1 +#
  2 +# Generated file, do not edit.
  3 +#
  4 +
  5 +list(APPEND FLUTTER_PLUGIN_LIST
  6 +)
  7 +
  8 +list(APPEND FLUTTER_FFI_PLUGIN_LIST
  9 +)
  10 +
  11 +set(PLUGIN_BUNDLED_LIBRARIES)
  12 +
  13 +foreach(plugin ${FLUTTER_PLUGIN_LIST})
  14 + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${plugin}/windows plugins/${plugin})
  15 + target_link_libraries(${BINARY_NAME} PRIVATE ${plugin}_plugin)
  16 + list(APPEND PLUGIN_BUNDLED_LIBRARIES $<TARGET_FILE:${plugin}_plugin>)
  17 + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${plugin}_bundled_libraries})
  18 +endforeach(plugin)
  19 +
  20 +foreach(ffi_plugin ${FLUTTER_FFI_PLUGIN_LIST})
  21 + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${ffi_plugin}/windows plugins/${ffi_plugin})
  22 + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${ffi_plugin}_bundled_libraries})
  23 +endforeach(ffi_plugin)
  1 +## 0.1.1
  2 +
  3 +* Html parser math fixed.
  4 +
  5 +## 0.1.0
  6 +
  7 +* Html parser fixed.
  8 +
  9 +## 0.0.10
  10 +
  11 +* Alignment fixed.
  12 +
1 ## 0.0.9 13 ## 0.0.9
2 14
3 * To html added. 15 * To html added.
@@ -238,15 +238,15 @@ packages: @@ -238,15 +238,15 @@ packages:
238 path: ".." 238 path: ".."
239 relative: true 239 relative: true
240 source: path 240 source: path
241 - version: "0.0.9" 241 + version: "0.1.1"
242 tex_text: 242 tex_text:
243 dependency: transitive 243 dependency: transitive
244 description: 244 description:
245 name: tex_text 245 name: tex_text
246 - sha256: "58c556fb09dff7034d6f29b77b3be6b90e7f1257817daa0000c6f1609094490a" 246 + sha256: "33bd11ec8eb58ca9d32919a71629ab80d704405da1a6e03d48ec3f6a266f1267"
247 url: "https://pub.dev" 247 url: "https://pub.dev"
248 source: hosted 248 source: hosted
249 - version: "0.1.2" 249 + version: "0.1.4"
250 tuple: 250 tuple:
251 dependency: transitive 251 dependency: transitive
252 description: 252 description:
@@ -138,8 +138,7 @@ class HTag extends BlockMd { @@ -138,8 +138,7 @@ class HTag extends BlockMd {
138 Row( 138 Row(
139 children: [ 139 children: [
140 Expanded( 140 Expanded(
141 - child: TexText(  
142 - "${match?[2]}", 141 + child: TexText("${match?[2]}",
143 style: [ 142 style: [
144 Theme.of(context) 143 Theme.of(context)
145 .textTheme 144 .textTheme
@@ -165,8 +164,7 @@ class HTag extends BlockMd { @@ -165,8 +164,7 @@ class HTag extends BlockMd {
165 .textTheme 164 .textTheme
166 .titleSmall 165 .titleSmall
167 ?.copyWith(color: style?.color), 166 ?.copyWith(color: style?.color),
168 - ][match![1]!.length - 1],  
169 - ), 167 + ][match![1]!.length - 1]),
170 ), 168 ),
171 ], 169 ],
172 ), 170 ),
@@ -333,7 +331,7 @@ class UnOrderedList extends BlockMd { @@ -333,7 +331,7 @@ class UnOrderedList extends BlockMd {
333 @override 331 @override
334 String toHtml(String text) { 332 String toHtml(String text) {
335 var match = exp.firstMatch(text.trim()); 333 var match = exp.firstMatch(text.trim());
336 - return "<ul><li>${MdWidget.toHtml((match?[2]).toString())}</li></ul>"; 334 + return "<ul><li>${MdWidget.toHtml((match?[2]).toString()).trim()}</li></ul>";
337 } 335 }
338 } 336 }
339 337
@@ -377,7 +375,7 @@ class OrderedList extends BlockMd { @@ -377,7 +375,7 @@ class OrderedList extends BlockMd {
377 @override 375 @override
378 String toHtml(String text) { 376 String toHtml(String text) {
379 var match = exp.firstMatch(text.trim()); 377 var match = exp.firstMatch(text.trim());
380 - return '<ol start="${match?[1]}"><li>${MdWidget.toHtml((match?[2]).toString())}</li></ol>'; 378 + return '<ol start="${match?[1]}"><li>${MdWidget.toHtml((match?[2]).toString()).trim()}</li></ol>';
381 } 379 }
382 } 380 }
383 381
@@ -408,7 +406,7 @@ class BoldMd extends InlineMd { @@ -408,7 +406,7 @@ class BoldMd extends InlineMd {
408 @override 406 @override
409 String toHtml(String text) { 407 String toHtml(String text) {
410 var match = exp.firstMatch(text.trim()); 408 var match = exp.firstMatch(text.trim());
411 - return '<b>${TexText.toHtmlData((match?[1]).toString())}</b>'; 409 + return '<b>${TexText.toHtmlData((match?[1]).toString()).trim()}</b>';
412 } 410 }
413 } 411 }
414 412
@@ -437,7 +435,7 @@ class ItalicMd extends InlineMd { @@ -437,7 +435,7 @@ class ItalicMd extends InlineMd {
437 @override 435 @override
438 String toHtml(String text) { 436 String toHtml(String text) {
439 var match = exp.firstMatch(text.trim()); 437 var match = exp.firstMatch(text.trim());
440 - return '<i>${TexText.toHtmlData((match?[1]).toString())}</i>'; 438 + return '<i>${TexText.toHtmlData((match?[1]).toString()).trim()}</i>';
441 } 439 }
442 } 440 }
443 441
@@ -500,8 +498,8 @@ class ImageMd extends InlineMd { @@ -500,8 +498,8 @@ class ImageMd extends InlineMd {
500 if (match?[1] != null) { 498 if (match?[1] != null) {
501 var size = RegExp(r"^([0-9]+)?x?([0-9]+)?") 499 var size = RegExp(r"^([0-9]+)?x?([0-9]+)?")
502 .firstMatch(match![1].toString().trim()); 500 .firstMatch(match![1].toString().trim());
503 - width = double.tryParse(size?[1]?.toString() ?? 'a');  
504 - height = double.tryParse(size?[2]?.toString() ?? 'a'); 501 + width = double.tryParse(size?[1]?.toString().trim() ?? 'a');
  502 + height = double.tryParse(size?[2]?.toString().trim() ?? 'a');
505 } 503 }
506 return WidgetSpan( 504 return WidgetSpan(
507 // alignment: PlaceholderAlignment.middle, 505 // alignment: PlaceholderAlignment.middle,
@@ -528,7 +526,7 @@ class ImageMd extends InlineMd { @@ -528,7 +526,7 @@ class ImageMd extends InlineMd {
528 @override 526 @override
529 String toHtml(String text) { 527 String toHtml(String text) {
530 var match = exp.firstMatch(text.trim()); 528 var match = exp.firstMatch(text.trim());
531 - return '<img src="${match?[2]}">'; 529 + return '<img src="${match?[2].toString().trim()}">';
532 } 530 }
533 } 531 }
534 532
@@ -540,6 +538,8 @@ class TextMd extends InlineMd { @@ -540,6 +538,8 @@ class TextMd extends InlineMd {
540 InlineSpan inlineSpan(BuildContext context, String text, TextStyle? style, 538 InlineSpan inlineSpan(BuildContext context, String text, TextStyle? style,
541 void Function(String url, String title)? onLinkTab) { 539 void Function(String url, String title)? onLinkTab) {
542 return WidgetSpan( 540 return WidgetSpan(
  541 + alignment: PlaceholderAlignment.baseline,
  542 + baseline: TextBaseline.alphabetic,
543 child: TexText( 543 child: TexText(
544 text, 544 text,
545 style: style, 545 style: style,
@@ -548,6 +548,6 @@ class TextMd extends InlineMd { @@ -548,6 +548,6 @@ class TextMd extends InlineMd {
548 548
549 @override 549 @override
550 String toHtml(String text) { 550 String toHtml(String text) {
551 - return TexText.toHtmlData(text); 551 + return TexText.toHtmlData(text).trim();
552 } 552 }
553 } 553 }
@@ -20,7 +20,7 @@ class TexMarkdown extends StatelessWidget { @@ -20,7 +20,7 @@ class TexMarkdown extends StatelessWidget {
20 static String toHtml(String text) { 20 static String toHtml(String text) {
21 String html = ""; 21 String html = "";
22 text.trim().split(RegExp(r"\n\n+")).forEach((element) { 22 text.trim().split(RegExp(r"\n\n+")).forEach((element) {
23 - html += MdWidget.toHtml(element); 23 + html += '<p>${MdWidget.toHtml(element)}</p>';
24 }); 24 });
25 return html; 25 return html;
26 } 26 }
1 name: tex_markdown 1 name: tex_markdown
2 description: This package is used to create flutter widget that can render markdown and latex formulas. It is very simple to use and uses native flutter components. 2 description: This package is used to create flutter widget that can render markdown and latex formulas. It is very simple to use and uses native flutter components.
3 -version: 0.0.9 3 +version: 0.1.1
4 homepage: https://github.com/saminsohag/flutter_packages/tree/main/tex_markdown 4 homepage: https://github.com/saminsohag/flutter_packages/tree/main/tex_markdown
5 5
6 environment: 6 environment:
@@ -10,7 +10,7 @@ environment: @@ -10,7 +10,7 @@ environment:
10 dependencies: 10 dependencies:
11 flutter: 11 flutter:
12 sdk: flutter 12 sdk: flutter
13 - tex_text: ^0.1.2 13 + tex_text: ^0.1.4
14 14
15 dev_dependencies: 15 dev_dependencies:
16 flutter_test: 16 flutter_test: