2 Commits

Author SHA1 Message Date
2cd685b65e integrated with previous 2023-06-09 15:55:59 +05:30
a358f65853 start minimal 2023-06-02 10:50:56 +05:30
221 changed files with 8347 additions and 60081 deletions

View File

@ -1,36 +1,10 @@
# This file tracks properties of this Flutter project.
# Used by Flutter tool to assess capabilities and perform upgrades etc.
#
# This file should be version controlled and should not be manually edited.
version:
revision: "300451adae589accbece3490f4396f10bdf15e6e"
channel: "stable"
project_type: app
# Tracks metadata for the flutter migrate command
migration:
platforms:
- platform: root
create_revision: 300451adae589accbece3490f4396f10bdf15e6e
base_revision: 300451adae589accbece3490f4396f10bdf15e6e
- platform: android
create_revision: 300451adae589accbece3490f4396f10bdf15e6e
base_revision: 300451adae589accbece3490f4396f10bdf15e6e
- platform: ios
create_revision: 300451adae589accbece3490f4396f10bdf15e6e
base_revision: 300451adae589accbece3490f4396f10bdf15e6e
- platform: macos
create_revision: 300451adae589accbece3490f4396f10bdf15e6e
base_revision: 300451adae589accbece3490f4396f10bdf15e6e
# User provided section
# List of Local paths (relative to this file) that should be
# ignored by the migrate tool.
#
# Files that are not part of the templates will be ignored by default.
unmanaged_files:
- 'lib/main.dart'
- 'ios/Runner.xcodeproj/project.pbxproj'
# This file tracks properties of this Flutter project.
# Used by Flutter tool to assess capabilities and perform upgrades etc.
#
# This file should be version controlled and should not be manually edited.
version:
revision: 5f105a6ca7a5ac7b8bc9b241f4c2d86f4188cf5c
channel: stable
project_type: app

View File

@ -56,7 +56,7 @@ android {
// TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
applicationId "com.dvox.gifunavi"
minSdkVersion 23
targetSdkVersion 33
targetSdkVersion flutter.targetSdkVersion
versionCode flutterVersionCode.toInteger()
versionName flutterVersionName
multiDexEnabled true

View File

@ -6,7 +6,6 @@
<uses-permission android:name="android.permission.WAKE_LOCK"/>
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
<uses-permission android:name="android.permission.CAMERA"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<application
android:label="岐阜ナビ"
android:name="${applicationName}"

View File

@ -1,6 +0,0 @@
package com.dvox.rog_app
import io.flutter.embedding.android.FlutterActivity
class MainActivity: FlutterActivity() {
}

View File

@ -1,5 +0,0 @@
package com.example.rog_app
import io.flutter.embedding.android.FlutterActivity
class MainActivity: FlutterActivity()

View File

@ -1,31 +1,31 @@
buildscript {
ext.kotlin_version = '1.7.10'
repositories {
google()
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:7.3.0'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
}
}
allprojects {
repositories {
google()
mavenCentral()
}
}
rootProject.buildDir = '../build'
subprojects {
project.buildDir = "${rootProject.buildDir}/${project.name}"
}
subprojects {
project.evaluationDependsOn(':app')
}
tasks.register("clean", Delete) {
delete rootProject.buildDir
}
buildscript {
ext.kotlin_version = '1.6.10'
repositories {
google()
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:4.1.0'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
}
}
allprojects {
repositories {
google()
mavenCentral()
}
}
rootProject.buildDir = '../build'
subprojects {
project.buildDir = "${rootProject.buildDir}/${project.name}"
}
subprojects {
project.evaluationDependsOn(':app')
}
task clean(type: Delete) {
delete rootProject.buildDir
}

View File

@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-all.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-6.7-all.zip

View File

@ -1,262 +0,0 @@
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="100%" viewBox="0 0 228 218" enable-background="new 0 0 228 218" xml:space="preserve">
<path fill="#FEFFFF" opacity="1.000000" stroke="none"
d="
M135.000000,219.000000
C90.000000,219.000000 45.500004,219.000000 1.000006,219.000000
C1.000004,146.333344 1.000004,73.666679 1.000002,1.000016
C76.999992,1.000010 152.999985,1.000010 228.999969,1.000005
C228.999985,73.666649 228.999985,146.333298 229.000000,218.999969
C197.833328,219.000000 166.666672,219.000000 135.000000,219.000000
M216.926804,106.758018
C216.298935,102.247208 215.613327,97.743530 215.054062,93.224236
C213.384537,79.733543 208.741623,67.187660 201.382111,55.946453
C190.106430,38.723576 175.371307,25.233152 156.164032,16.917522
C136.226349,8.285669 115.521500,6.060920 94.483315,10.365341
C71.584160,15.050518 52.347744,26.579485 37.418335,44.891960
C18.040327,68.661095 10.337969,95.891487 15.240112,125.970604
C19.248966,150.568604 31.085663,171.387665 50.664322,187.317154
C72.992050,205.483292 98.262016,213.677887 127.181602,210.145828
C154.338058,206.829102 176.340363,194.057587 193.794693,173.621246
C209.871979,154.797241 216.252472,132.119095 216.926804,106.758018
z"/>
<path fill="#46F805" opacity="1.000000" stroke="none"
d="
M216.958176,107.215469
C216.252472,132.119095 209.871979,154.797241 193.794693,173.621246
C176.340363,194.057587 154.338058,206.829102 127.181602,210.145828
C98.262016,213.677887 72.992050,205.483292 50.664322,187.317154
C31.085663,171.387665 19.248966,150.568604 15.240112,125.970604
C10.337969,95.891487 18.040327,68.661095 37.418335,44.891960
C52.347744,26.579485 71.584160,15.050518 94.483315,10.365341
C115.521500,6.060920 136.226349,8.285669 156.164032,16.917522
C175.371307,25.233152 190.106430,38.723576 201.382111,55.946453
C208.741623,67.187660 213.384537,79.733543 215.054062,93.224236
C215.613327,97.743530 216.298935,102.247208 216.958176,107.215469
M170.257690,172.011200
C183.606674,167.275955 189.974182,158.306335 190.006775,144.156921
C190.022507,137.330933 190.101379,130.503281 189.985107,123.679214
C189.732086,108.828865 178.083466,97.090584 163.199799,97.031158
C131.734024,96.905518 100.267052,96.905540 68.801277,97.031151
C53.919376,97.090553 42.259666,108.839653 42.012997,123.679176
C41.899563,130.503326 41.978054,137.330917 41.992538,144.156891
C42.029594,161.617020 53.294106,172.990005 70.629173,173.003494
C100.763527,173.026962 130.897964,173.031647 161.032211,172.973877
C163.834534,172.968506 166.635880,172.459641 170.257690,172.011200
M180.093246,61.905071
C184.279572,59.674881 183.508865,56.653019 181.091934,53.776775
C179.638565,52.047207 177.595398,50.817970 175.840652,49.336220
C153.985825,30.881453 128.938461,24.002581 100.797737,29.051197
C82.948166,32.253517 67.393005,40.134453 54.408386,52.977425
C51.930382,55.428398 50.713989,58.398716 52.726345,60.818832
C55.025890,63.584339 58.128399,61.783146 60.586048,59.862011
C60.976566,59.556744 61.297619,59.163155 61.654312,58.813999
C74.537094,46.203491 90.294487,39.048336 107.886360,37.211983
C131.251984,34.772926 152.417618,41.060593 170.434204,56.785332
C172.967484,58.996365 176.321274,60.267330 180.093246,61.905071
M164.998444,65.492867
C148.321579,51.725647 129.498550,45.762684 107.793465,48.859478
C92.612213,51.025478 79.778320,57.477722 68.698692,67.818382
C66.542831,69.830460 64.352570,71.950378 67.375084,74.848778
C70.268723,77.623604 72.852974,76.370232 75.459091,74.089806
C78.417046,71.501518 81.399467,68.864319 84.693405,66.750366
C97.781052,58.351074 111.966118,55.601196 127.467705,57.818993
C139.441559,59.532078 149.680389,64.290848 158.627655,72.143814
C161.600006,74.752632 164.947571,78.570702 168.577179,75.233856
C172.700760,71.442871 167.955780,68.681625 164.998444,65.492867
M85.156090,87.966469
C86.030838,87.215935 86.905663,86.465485 87.780334,85.714859
C99.589012,75.580788 113.011475,71.276520 127.971436,76.731949
C134.837952,79.235947 140.830322,84.099312 147.314423,87.722153
C148.576660,88.427399 150.783295,89.063324 151.657440,88.450951
C152.877655,87.596153 153.735123,85.567230 153.833740,83.983795
C153.907288,82.803261 152.775681,81.268318 151.766968,80.341606
C136.591522,66.399719 118.981415,62.334915 99.581802,69.069458
C92.821068,71.416435 86.716652,75.933937 80.742928,80.080284
C79.159348,81.179443 79.172714,84.579338 78.452835,86.922836
C80.440567,87.329514 82.428291,87.736198 85.156090,87.966469
z"/>
<path fill="#020500" opacity="1.000000" stroke="none"
d="
M169.847687,172.097870
C166.635880,172.459641 163.834534,172.968506 161.032211,172.973877
C130.897964,173.031647 100.763527,173.026962 70.629173,173.003494
C53.294106,172.990005 42.029594,161.617020 41.992538,144.156891
C41.978054,137.330917 41.899563,130.503326 42.012997,123.679176
C42.259666,108.839653 53.919376,97.090553 68.801277,97.031151
C100.267052,96.905540 131.734024,96.905518 163.199799,97.031158
C178.083466,97.090584 189.732086,108.828865 189.985107,123.679214
C190.101379,130.503281 190.022507,137.330933 190.006775,144.156921
C189.974182,158.306335 183.606674,167.275955 169.847687,172.097870
M98.500000,168.996811
C119.999046,168.995728 141.498657,169.087769 162.996918,168.958588
C175.874664,168.881226 185.742538,158.974380 185.969498,146.128601
C186.099030,138.797882 186.080276,131.461731 185.974792,124.130249
C185.785965,111.003746 175.915695,101.077690 162.750229,101.036942
C131.585205,100.940483 100.419495,100.940758 69.254471,101.036804
C56.089668,101.077377 46.218140,111.001488 46.024536,124.126472
C45.918854,131.291275 45.934669,138.459747 46.020058,145.625076
C46.180038,159.049927 56.034389,168.859863 69.501350,168.979355
C78.833557,169.062180 88.167068,168.996262 98.500000,168.996811
z"/>
<path fill="#010101" opacity="1.000000" stroke="none"
d="
M179.694244,61.939251
C176.321274,60.267330 172.967484,58.996365 170.434204,56.785332
C152.417618,41.060593 131.251984,34.772926 107.886360,37.211983
C90.294487,39.048336 74.537094,46.203491 61.654312,58.813999
C61.297619,59.163155 60.976566,59.556744 60.586048,59.862011
C58.128399,61.783146 55.025890,63.584339 52.726345,60.818832
C50.713989,58.398716 51.930382,55.428398 54.408386,52.977425
C67.393005,40.134453 82.948166,32.253517 100.797737,29.051197
C128.938461,24.002581 153.985825,30.881453 175.840652,49.336220
C177.595398,50.817970 179.638565,52.047207 181.091934,53.776775
C183.508865,56.653019 184.279572,59.674881 179.694244,61.939251
z"/>
<path fill="#020202" opacity="1.000000" stroke="none"
d="
M165.255981,65.750282
C167.955780,68.681625 172.700760,71.442871 168.577179,75.233856
C164.947571,78.570702 161.600006,74.752632 158.627655,72.143814
C149.680389,64.290848 139.441559,59.532078 127.467705,57.818993
C111.966118,55.601196 97.781052,58.351074 84.693405,66.750366
C81.399467,68.864319 78.417046,71.501518 75.459091,74.089806
C72.852974,76.370232 70.268723,77.623604 67.375084,74.848778
C64.352570,71.950378 66.542831,69.830460 68.698692,67.818382
C79.778320,57.477722 92.612213,51.025478 107.793465,48.859478
C129.498550,45.762684 148.321579,51.725647 165.255981,65.750282
z"/>
<path fill="#010101" opacity="1.000000" stroke="none"
d="
M84.786057,88.054672
C82.428291,87.736198 80.440567,87.329514 78.452835,86.922836
C79.172714,84.579338 79.159348,81.179443 80.742928,80.080284
C86.716652,75.933937 92.821068,71.416435 99.581802,69.069458
C118.981415,62.334915 136.591522,66.399719 151.766968,80.341606
C152.775681,81.268318 153.907288,82.803261 153.833740,83.983795
C153.735123,85.567230 152.877655,87.596153 151.657440,88.450951
C150.783295,89.063324 148.576660,88.427399 147.314423,87.722153
C140.830322,84.099312 134.837952,79.235947 127.971436,76.731949
C113.011475,71.276520 99.589012,75.580788 87.780334,85.714859
C86.905663,86.465485 86.030838,87.215935 84.786057,88.054672
z"/>
<path fill="#45F405" opacity="1.000000" stroke="none"
d="
M98.000000,168.996811
C88.167068,168.996262 78.833557,169.062180 69.501350,168.979355
C56.034389,168.859863 46.180038,159.049927 46.020058,145.625076
C45.934669,138.459747 45.918854,131.291275 46.024536,124.126472
C46.218140,111.001488 56.089668,101.077377 69.254471,101.036804
C100.419495,100.940758 131.585205,100.940483 162.750229,101.036942
C175.915695,101.077690 185.785965,111.003746 185.974792,124.130249
C186.080276,131.461731 186.099030,138.797882 185.969498,146.128601
C185.742538,158.974380 175.874664,168.881226 162.996918,168.958588
C141.498657,169.087769 119.999046,168.995728 98.000000,168.996811
M72.517471,156.298859
C80.138840,159.353607 87.503647,157.838089 94.688698,154.830109
C95.777313,154.374374 97.062141,152.817688 97.112732,151.717651
C97.362045,146.296997 97.226082,140.858612 97.226082,135.358704
C91.435829,135.358704 86.228844,135.358704 81.073105,135.358704
C81.073105,136.997421 81.073105,138.269821 81.073105,140.145599
C84.855919,140.145599 88.409081,140.145599 92.144981,140.145599
C92.144981,143.241974 92.413750,145.774017 92.037720,148.206375
C91.833107,149.529877 90.811729,151.316467 89.682938,151.813416
C81.482758,155.423401 71.780396,152.478333 67.757477,145.417282
C63.080647,137.208466 64.778267,124.736839 71.652496,119.923119
C73.959686,118.307503 77.209213,117.011337 79.913063,117.201736
C85.570892,117.600159 91.152313,119.083649 97.027321,120.169975
C98.037239,117.505173 97.189743,115.156593 93.452667,114.222862
C91.206703,113.661690 88.953072,113.120949 86.684349,112.662804
C74.903259,110.283730 64.786530,115.311432 61.294830,125.569092
C57.996853,135.257660 59.286362,150.979126 72.517471,156.298859
M140.788330,119.740959
C138.112366,128.469070 141.109146,133.963821 149.899292,136.252609
C153.896698,137.293457 158.124466,137.712418 161.887756,139.278488
C163.759872,140.057587 165.789642,142.695450 165.977692,144.661774
C166.170288,146.675629 164.674255,149.437943 163.039337,150.870941
C161.472122,152.244598 158.698685,153.069962 156.594650,152.843307
C150.966522,152.237030 145.413147,150.937057 139.203979,149.797836
C139.708023,151.318359 139.750885,153.912521 141.020294,154.855392
C146.890152,159.215347 160.245956,159.017899 166.246948,154.847000
C170.232544,152.076889 172.367737,148.268097 171.807266,143.340729
C171.237473,138.331589 168.256500,135.199158 163.455536,133.913345
C159.295914,132.799316 155.060211,131.971436 150.891037,130.890259
C147.499298,130.010696 145.271240,127.852997 145.195877,124.221153
C145.117767,120.457268 147.679672,118.578964 150.906433,117.576622
C152.302765,117.142876 153.916183,116.814148 155.310913,117.076363
C160.199585,117.995430 165.036011,119.192436 170.559433,120.433838
C169.943695,118.554634 169.853897,115.591080 168.644943,115.027275
C160.778381,111.358612 147.479202,109.327438 140.788330,119.740959
M132.817932,132.896713
C135.846466,124.082535 133.661346,116.655113 126.259239,114.718079
C119.749092,113.014465 112.756485,113.154472 105.958328,112.478416
C105.958328,128.098404 105.958328,142.348679 105.958328,156.683014
C107.664940,156.683014 109.056923,156.683014 111.030914,156.683014
C111.030914,151.333450 111.030914,146.281372 111.030914,141.143188
C119.350121,140.867004 127.513252,141.644302 132.817932,132.896713
z"/>
<path fill="#060B04" opacity="1.000000" stroke="none"
d="
M72.141678,156.177597
C59.286362,150.979126 57.996853,135.257660 61.294830,125.569092
C64.786530,115.311432 74.903259,110.283730 86.684349,112.662804
C88.953072,113.120949 91.206703,113.661690 93.452667,114.222862
C97.189743,115.156593 98.037239,117.505173 97.027321,120.169975
C91.152313,119.083649 85.570892,117.600159 79.913063,117.201736
C77.209213,117.011337 73.959686,118.307503 71.652496,119.923119
C64.778267,124.736839 63.080647,137.208466 67.757477,145.417282
C71.780396,152.478333 81.482758,155.423401 89.682938,151.813416
C90.811729,151.316467 91.833107,149.529877 92.037720,148.206375
C92.413750,145.774017 92.144981,143.241974 92.144981,140.145599
C88.409081,140.145599 84.855919,140.145599 81.073105,140.145599
C81.073105,138.269821 81.073105,136.997421 81.073105,135.358704
C86.228844,135.358704 91.435829,135.358704 97.226082,135.358704
C97.226082,140.858612 97.362045,146.296997 97.112732,151.717651
C97.062141,152.817688 95.777313,154.374374 94.688698,154.830109
C87.503647,157.838089 80.138840,159.353607 72.141678,156.177597
z"/>
<path fill="#060C04" opacity="1.000000" stroke="none"
d="
M140.952881,119.380417
C147.479202,109.327438 160.778381,111.358612 168.644943,115.027275
C169.853897,115.591080 169.943695,118.554634 170.559433,120.433838
C165.036011,119.192436 160.199585,117.995430 155.310913,117.076363
C153.916183,116.814148 152.302765,117.142876 150.906433,117.576622
C147.679672,118.578964 145.117767,120.457268 145.195877,124.221153
C145.271240,127.852997 147.499298,130.010696 150.891037,130.890259
C155.060211,131.971436 159.295914,132.799316 163.455536,133.913345
C168.256500,135.199158 171.237473,138.331589 171.807266,143.340729
C172.367737,148.268097 170.232544,152.076889 166.246948,154.847000
C160.245956,159.017899 146.890152,159.215347 141.020294,154.855392
C139.750885,153.912521 139.708023,151.318359 139.203979,149.797836
C145.413147,150.937057 150.966522,152.237030 156.594650,152.843307
C158.698685,153.069962 161.472122,152.244598 163.039337,150.870941
C164.674255,149.437943 166.170288,146.675629 165.977692,144.661774
C165.789642,142.695450 163.759872,140.057587 161.887756,139.278488
C158.124466,137.712418 153.896698,137.293457 149.899292,136.252609
C141.109146,133.963821 138.112366,128.469070 140.952881,119.380417
z"/>
<path fill="#050B04" opacity="1.000000" stroke="none"
d="
M132.604187,133.225220
C127.513252,141.644302 119.350121,140.867004 111.030914,141.143188
C111.030914,146.281372 111.030914,151.333450 111.030914,156.683014
C109.056923,156.683014 107.664940,156.683014 105.958328,156.683014
C105.958328,142.348679 105.958328,128.098404 105.958328,112.478416
C112.756485,113.154472 119.749092,113.014465 126.259239,114.718079
C133.661346,116.655113 135.846466,124.082535 132.604187,133.225220
M121.717529,118.245148
C118.152855,118.245148 114.588173,118.245148 111.147324,118.245148
C111.147324,124.415359 111.147324,130.005188 111.147324,135.548203
C121.878319,136.871048 126.539490,135.156418 128.297501,129.385284
C129.804199,124.439133 128.007614,121.018356 121.717529,118.245148
z"/>
<path fill="#45F405" opacity="1.000000" stroke="none"
d="
M122.127472,118.331490
C128.007614,121.018356 129.804199,124.439133 128.297501,129.385284
C126.539490,135.156418 121.878319,136.871048 111.147324,135.548203
C111.147324,130.005188 111.147324,124.415359 111.147324,118.245148
C114.588173,118.245148 118.152855,118.245148 122.127472,118.331490
z"/>
</svg>

Before

Width:  |  Height:  |  Size: 15 KiB

View File

@ -1,330 +0,0 @@
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="100%" viewBox="0 0 228 218" enable-background="new 0 0 228 218" xml:space="preserve">
<path fill="#FFFDFD" opacity="1.000000" stroke="none"
d="
M1.000000,79.000000
C1.000000,52.666668 1.000000,26.833336 1.000000,1.000004
C76.999992,1.000002 152.999985,1.000002 229.000000,1.000001
C229.000000,73.666656 229.000000,146.333313 229.000000,218.999969
C153.000015,218.999985 77.000031,218.999985 1.000022,219.000000
C1.000000,172.500000 1.000000,126.000000 1.000000,79.000000
M11.639966,126.773796
C13.368825,133.145004 14.506862,139.750229 16.922529,145.849426
C32.487865,185.149628 61.664894,208.079315 103.304634,213.091293
C160.019211,219.917770 210.397430,180.915848 218.644272,124.403412
C224.300415,85.644035 210.913300,53.167866 180.960480,28.411943
C157.441650,8.973706 129.616989,1.812979 99.315132,6.280443
C72.216248,10.275686 49.832855,23.236273 32.848125,44.679813
C13.972346,68.510826 6.996265,95.803246 11.639966,126.773796
z"/>
<path fill="#FF2504" opacity="1.000000" stroke="none"
d="
M11.496333,126.355560
C6.996265,95.803246 13.972346,68.510826 32.848125,44.679813
C49.832855,23.236273 72.216248,10.275686 99.315132,6.280443
C129.616989,1.812979 157.441650,8.973706 180.960480,28.411943
C210.913300,53.167866 224.300415,85.644035 218.644272,124.403412
C210.397430,180.915848 160.019211,219.917770 103.304634,213.091293
C61.664894,208.079315 32.487865,185.149628 16.922529,145.849426
C14.506862,139.750229 13.368825,133.145004 11.496333,126.355560
M105.000961,124.105751
C105.000961,124.105751 104.745796,124.369095 104.126457,124.851120
C100.903809,128.180267 97.681160,131.509430 94.014862,135.415359
C92.627441,136.750137 91.240021,138.084900 89.289009,139.650360
C84.996109,144.049606 80.703217,148.448868 76.002815,153.427597
C74.987877,154.413361 73.972946,155.399124 72.377853,156.613983
C68.737885,160.356186 65.097916,164.098404 61.006866,168.430603
C60.283661,169.104675 59.560459,169.778763 58.289165,170.704544
C55.042290,173.982681 51.795414,177.260834 48.552605,180.534882
C82.994301,214.508865 145.702423,218.280518 185.476105,177.128098
C226.652496,134.524384 217.321259,73.152115 186.614212,43.774364
C174.551575,55.470825 162.498383,67.158127 150.018738,79.426643
C147.977737,81.422966 145.936737,83.419296 143.333710,85.661514
C139.707977,89.386589 136.082260,93.111664 132.014343,97.419563
C130.956894,98.429230 129.899445,99.438904 128.291153,100.697105
C124.347298,104.744133 120.403442,108.791161 116.013718,113.416931
C114.622208,114.761574 113.230698,116.106216 111.420296,117.562943
C111.083664,118.011703 110.747025,118.460464 110.032127,119.481323
C108.737732,120.750404 107.443336,122.019478 105.670601,123.352196
C105.360893,123.514114 105.177956,123.767578 105.199974,124.123863
C105.199974,124.123863 105.207138,124.202545 105.000961,124.105751
M97.365318,121.754982
C97.365318,121.754982 97.213715,121.963066 97.845581,121.442192
C104.512207,114.685333 111.178833,107.928474 118.500191,100.945206
C119.392036,99.910851 120.283882,98.876495 121.751778,97.570831
C127.133148,92.088036 132.514511,86.605240 138.523697,80.844315
C140.405289,78.845688 142.286880,76.847061 144.745758,74.576729
C156.881119,62.501865 169.016479,50.427002 181.608673,37.897579
C154.406204,14.610365 123.778397,6.216994 89.911461,15.453262
C52.041664,25.781202 27.739298,51.061649 19.264135,89.561996
C12.119747,122.016998 21.118900,150.817780 43.570446,176.293015
C46.408489,172.817307 48.782036,169.910477 51.761181,166.756165
C52.564640,166.119461 53.368103,165.482758 54.750069,164.576660
C58.780914,160.442413 62.811756,156.308182 67.494316,151.947662
C68.381996,150.919205 69.269676,149.890747 70.741211,148.598434
C79.639664,139.629562 88.538116,130.660690 97.365318,121.754982
z"/>
<path fill="#FFFDFD" opacity="1.000000" stroke="none"
d="
M137.895889,81.122437
C132.514511,86.605240 127.133148,92.088036 121.203033,97.351173
C103.025848,97.091690 85.395264,96.869644 67.769722,97.076775
C56.221268,97.212502 45.512978,105.498947 43.195145,116.814857
C41.782555,123.711281 42.512241,131.023132 41.946785,138.121857
C41.075527,149.059464 43.313717,158.896744 51.155586,167.003632
C48.782036,169.910477 46.408489,172.817307 43.570446,176.293015
C21.118900,150.817780 12.119747,122.016998 19.264135,89.561996
C27.739298,51.061649 52.041664,25.781202 89.911461,15.453262
C123.778397,6.216994 154.406204,14.610365 181.608673,37.897579
C169.016479,50.427002 156.881119,62.501865 144.284332,74.402267
C133.061005,67.261986 121.571854,64.977112 108.689606,66.768036
C98.101250,68.240059 89.426727,72.794106 81.422020,79.212433
C78.929924,81.210640 76.201401,83.903252 79.084648,87.474594
C81.710503,90.727127 84.501549,88.788292 86.653313,86.752617
C96.766685,77.184860 108.662163,72.732277 122.412636,75.177612
C127.757095,76.128052 132.745361,79.081444 137.895889,81.122437
z"/>
<path fill="#FFFCFC" opacity="1.000000" stroke="none"
d="
M150.445175,78.845428
C162.498383,67.158127 174.551575,55.470825 186.614212,43.774364
C217.321259,73.152115 226.652496,134.524384 185.476105,177.128098
C145.702423,218.280518 82.994301,214.508865 48.552605,180.534882
C51.795414,177.260834 55.042290,173.982681 58.787811,170.854355
C62.340233,171.669189 65.391464,172.898407 68.448189,172.912216
C100.058250,173.055099 131.669632,173.100220 163.279694,172.959961
C178.127716,172.894073 189.722794,161.139160 189.977921,146.287476
C190.100784,139.135544 190.048309,131.979492 189.996063,124.825905
C189.876923,108.510101 178.320450,97.086761 161.895279,96.994812
C152.082382,96.939880 142.269440,96.889275 132.456543,96.836731
C136.082260,93.111664 139.707977,89.386589 143.867645,85.763756
C145.317841,86.476974 146.161362,87.386642 147.166794,87.631554
C148.831512,88.037079 151.667770,88.712051 152.111969,88.032509
C153.161255,86.427338 153.520279,84.047508 153.314774,82.068565
C153.194168,80.907379 151.455826,79.914185 150.445175,78.845428
z"/>
<path fill="#FBFBFB" opacity="1.000000" stroke="none"
d="
M61.457951,167.840622
C65.097916,164.098404 68.737885,160.356186 72.965790,156.733490
C78.435059,156.932831 83.451775,157.772385 88.169090,156.931763
C97.510834,155.267044 97.442612,154.883408 97.442383,145.498642
C97.442314,142.849426 97.718674,140.155685 97.304199,137.572876
C97.137787,136.535919 95.452484,135.742722 94.458511,134.838577
C97.681160,131.509430 100.903809,128.180267 104.519241,124.784599
C104.912018,124.718079 105.248154,124.516663 105.281403,125.014679
C105.314659,135.928513 105.314659,146.344330 105.314659,156.741913
C107.468216,156.741913 109.050301,156.741913 110.929352,156.741913
C110.929352,154.017075 110.929352,151.549332 110.929352,149.081604
C110.929352,146.478363 110.929352,143.875107 110.929352,141.477814
C115.703285,140.967667 120.061005,140.971725 124.166908,139.956924
C130.900314,138.292740 134.390732,132.935211 134.184189,125.804550
C133.991272,119.144508 130.499237,115.135078 123.345245,113.628845
C121.094315,113.154922 118.757233,113.090195 116.459587,112.838181
C120.403442,108.791161 124.347298,104.744133 128.903076,100.829170
C140.680008,100.977264 151.846390,100.889809 163.009689,101.036476
C175.885803,101.205620 185.722183,111.017990 185.970047,123.852043
C186.098740,130.515442 186.009277,137.183319 185.995560,143.849136
C185.963165,159.598953 176.578308,168.986176 160.818161,168.993973
C131.321793,169.008545 101.825294,169.037949 72.329208,168.947098
C68.704353,168.935944 65.081650,168.226471 61.457951,167.840622
M145.939529,114.214363
C143.940674,116.751434 141.046677,119.002518 140.126068,121.884071
C138.100525,128.224045 141.480881,133.802322 148.046112,135.837494
C152.151184,137.110031 156.474060,137.662109 160.654282,138.715790
C163.776978,139.502899 166.042191,141.207657 166.183472,144.858505
C166.328384,148.603088 164.368378,150.845871 161.102890,151.965500
C159.252457,152.599945 157.118576,153.201859 155.268021,152.891190
C149.969879,152.001770 144.751236,150.638794 138.517899,149.241592
C139.597397,151.333374 140.149109,154.458206 141.767899,155.175751
C148.064041,157.966660 154.767532,159.103271 161.655319,157.079300
C167.990829,155.217606 172.029266,150.378036 171.997452,144.605362
C171.964813,138.681259 168.646240,134.974701 161.524139,133.154968
C158.146896,132.292084 154.692505,131.735764 151.297012,130.938553
C147.668518,130.086639 144.685089,127.702515 145.517548,124.081390
C146.088058,121.599678 148.889816,118.651749 151.338333,117.828773
C154.399582,116.799850 158.204224,117.310249 161.533524,117.954361
C164.435913,118.515869 167.123947,120.185417 169.906693,121.365379
C170.275177,121.140579 170.643661,120.915779 171.012146,120.690979
C170.000900,118.592896 169.496750,115.277092 167.890350,114.608116
C161.039520,111.755180 153.844528,110.492722 145.939529,114.214363
z"/>
<path fill="#FCFAFA" opacity="1.000000" stroke="none"
d="
M117.845451,101.171616
C111.178833,107.928474 104.512207,114.685333 97.510864,121.242249
C98.372559,117.041649 96.836845,114.757133 92.810448,113.911087
C90.391205,113.402748 88.035027,112.548340 85.600800,112.165428
C75.996300,110.654625 67.000435,114.554688 62.838375,121.894341
C58.096054,130.257263 58.836342,144.041550 64.456787,150.647156
C65.041946,151.334869 66.037476,151.673401 66.842606,152.173950
C62.811756,156.308182 58.780914,160.442413 54.419048,164.361145
C49.781567,159.034683 46.015305,153.674744 46.015427,146.584869
C46.015564,138.781418 45.837093,130.972702 46.062771,123.175743
C46.410538,111.160713 56.074387,101.270645 68.046333,101.101608
C84.642395,100.867287 101.245415,101.124725 117.845451,101.171616
z"/>
<path fill="#050505" opacity="1.000000" stroke="none"
d="
M61.232410,168.135620
C65.081650,168.226471 68.704353,168.935944 72.329208,168.947098
C101.825294,169.037949 131.321793,169.008545 160.818161,168.993973
C176.578308,168.986176 185.963165,159.598953 185.995560,143.849136
C186.009277,137.183319 186.098740,130.515442 185.970047,123.852043
C185.722183,111.017990 175.885803,101.205620 163.009689,101.036476
C151.846390,100.889809 140.680008,100.977264 129.178497,100.704903
C129.899445,99.438904 130.956894,98.429230 132.235443,97.128143
C142.269440,96.889275 152.082382,96.939880 161.895279,96.994812
C178.320450,97.086761 189.876923,108.510101 189.996063,124.825905
C190.048309,131.979492 190.100784,139.135544 189.977921,146.287476
C189.722794,161.139160 178.127716,172.894073 163.279694,172.959961
C131.669632,173.100220 100.058250,173.055099 68.448189,172.912216
C65.391464,172.898407 62.340233,171.669189 59.061852,170.728516
C59.560459,169.778763 60.283661,169.104675 61.232410,168.135620
z"/>
<path fill="#010101" opacity="1.000000" stroke="none"
d="
M138.209793,80.983383
C132.745361,79.081444 127.757095,76.128052 122.412636,75.177612
C108.662163,72.732277 96.766685,77.184860 86.653313,86.752617
C84.501549,88.788292 81.710503,90.727127 79.084648,87.474594
C76.201401,83.903252 78.929924,81.210640 81.422020,79.212433
C89.426727,72.794106 98.101250,68.240059 108.689606,66.768036
C121.571854,64.977112 133.061005,67.261986 143.995697,74.538116
C142.286880,76.847061 140.405289,78.845688 138.209793,80.983383
z"/>
<path fill="#FAF8F8" opacity="1.000000" stroke="none"
d="
M97.436569,121.691833
C88.538116,130.660690 79.639664,139.629562 70.295746,148.418472
C64.737686,141.993805 64.391373,134.882599 66.477417,127.548653
C68.372246,120.886932 73.625763,116.536835 80.479477,117.208832
C86.223137,117.771988 91.790909,120.129066 97.436569,121.691833
z"/>
<path fill="#060606" opacity="1.000000" stroke="none"
d="
M118.172821,101.058411
C101.245415,101.124725 84.642395,100.867287 68.046333,101.101608
C56.074387,101.270645 46.410538,111.160713 46.062771,123.175743
C45.837093,130.972702 46.015564,138.781418 46.015427,146.584869
C46.015305,153.674744 49.781567,159.034683 54.129795,164.495834
C53.368103,165.482758 52.564640,166.119461 51.458385,166.879898
C43.313717,158.896744 41.075527,149.059464 41.946785,138.121857
C42.512241,131.023132 41.782555,123.711281 43.195145,116.814857
C45.512978,105.498947 56.221268,97.212502 67.769722,97.076775
C85.395264,96.869644 103.025848,97.091690 120.915009,97.486824
C120.283882,98.876495 119.392036,99.910851 118.172821,101.058411
z"/>
<path fill="#0A0A0A" opacity="1.000000" stroke="none"
d="
M116.236649,113.127556
C118.757233,113.090195 121.094315,113.154922 123.345245,113.628845
C130.499237,115.135078 133.991272,119.144508 134.184189,125.804550
C134.390732,132.935211 130.900314,138.292740 124.166908,139.956924
C120.061005,140.971725 115.703285,140.967667 110.929352,141.477814
C110.929352,143.875107 110.929352,146.478363 110.929352,149.081604
C110.929352,151.549332 110.929352,154.017075 110.929352,156.741913
C109.050301,156.741913 107.468216,156.741913 105.314659,156.741913
C105.314659,146.344330 105.314659,135.928513 105.314552,124.930588
C105.314445,124.348495 105.207138,124.202545 105.207138,124.202545
C105.207138,124.202545 105.199974,124.123863 105.432587,124.200241
C105.826439,123.947266 105.987694,123.617912 106.148941,123.288559
C107.443336,122.019478 108.737732,120.750404 110.459549,119.536423
C110.886978,125.002693 110.886978,130.413849 110.886978,136.127319
C114.515312,135.959579 117.518089,136.096848 120.422874,135.627579
C126.052094,134.718201 128.809967,131.341278 128.613159,126.167221
C128.432465,121.417213 125.291023,118.551018 119.639153,118.037651
C117.042809,117.801819 114.439392,117.644035 111.839188,117.450867
C113.230698,116.106216 114.622208,114.761574 116.236649,113.127556
z"/>
<path fill="#0C0C0C" opacity="1.000000" stroke="none"
d="
M97.400940,121.723404
C91.790909,120.129066 86.223137,117.771988 80.479477,117.208832
C73.625763,116.536835 68.372246,120.886932 66.477417,127.548653
C64.391373,134.882599 64.737686,141.993805 70.003822,148.550400
C69.269676,149.890747 68.381996,150.919205 67.168457,152.060806
C66.037476,151.673401 65.041946,151.334869 64.456787,150.647156
C58.836342,144.041550 58.096054,130.257263 62.838375,121.894341
C67.000435,114.554688 75.996300,110.654625 85.600800,112.165428
C88.035027,112.548340 90.391205,113.402748 92.810448,113.911087
C96.836845,114.757133 98.372559,117.041649 97.194931,121.502686
C97.213715,121.963066 97.365318,121.754982 97.400940,121.723404
z"/>
<path fill="#FBFBFB" opacity="1.000000" stroke="none"
d="
M111.629738,117.506897
C114.439392,117.644035 117.042809,117.801819 119.639153,118.037651
C125.291023,118.551018 128.432465,121.417213 128.613159,126.167221
C128.809967,131.341278 126.052094,134.718201 120.422874,135.627579
C117.518089,136.096848 114.515312,135.959579 110.886978,136.127319
C110.886978,130.413849 110.886978,125.002693 110.648682,119.250374
C110.747025,118.460464 111.083664,118.011703 111.629738,117.506897
z"/>
<path fill="#0A0A0A" opacity="1.000000" stroke="none"
d="
M94.236687,135.126968
C95.452484,135.742722 97.137787,136.535919 97.304199,137.572876
C97.718674,140.155685 97.442314,142.849426 97.442383,145.498642
C97.442612,154.883408 97.510834,155.267044 88.169090,156.931763
C83.451775,157.772385 78.435059,156.932831 73.255867,156.618927
C73.972946,155.399124 74.987877,154.413361 76.630783,153.063126
C80.869255,152.556152 84.515709,152.662720 88.072685,152.149353
C89.508911,151.942062 91.964752,150.228165 91.869156,149.459534
C91.450981,146.097366 94.279053,141.938400 89.852600,139.419662
C91.240021,138.084900 92.627441,136.750137 94.236687,135.126968
z"/>
<path fill="#FAEEEE" opacity="1.000000" stroke="none"
d="
M89.570801,139.535004
C94.279053,141.938400 91.450981,146.097366 91.869156,149.459534
C91.964752,150.228165 89.508911,151.942062 88.072685,152.149353
C84.515709,152.662720 80.869255,152.556152 76.834534,152.773392
C80.703217,148.448868 84.996109,144.049606 89.570801,139.535004
z"/>
<path fill="#010101" opacity="1.000000" stroke="none"
d="
M150.231964,79.136032
C151.455826,79.914185 153.194168,80.907379 153.314774,82.068565
C153.520279,84.047508 153.161255,86.427338 152.111969,88.032509
C151.667770,88.712051 148.831512,88.037079 147.166794,87.631554
C146.161362,87.386642 145.317841,86.476974 144.148651,85.640808
C145.936737,83.419296 147.977737,81.422966 150.231964,79.136032
z"/>
<path fill="#716A6A" opacity="1.000000" stroke="none"
d="
M105.909775,123.320374
C105.987694,123.617912 105.826439,123.947266 105.393486,124.194603
C105.177956,123.767578 105.360893,123.514114 105.909775,123.320374
z"/>
<path fill="#716A6A" opacity="1.000000" stroke="none"
d="
M105.104050,124.154144
C105.207138,124.202545 105.314445,124.348495 105.281296,124.432579
C105.248154,124.516663 104.912018,124.718079 104.828903,124.543587
C104.745796,124.369095 105.000961,124.105751 105.104050,124.154144
z"/>
<path fill="#0C0C0C" opacity="1.000000" stroke="none"
d="
M146.297729,114.064087
C153.844528,110.492722 161.039520,111.755180 167.890350,114.608116
C169.496750,115.277092 170.000900,118.592896 171.012146,120.690979
C170.643661,120.915779 170.275177,121.140579 169.906693,121.365379
C167.123947,120.185417 164.435913,118.515869 161.533524,117.954361
C158.204224,117.310249 154.399582,116.799850 151.338333,117.828773
C148.889816,118.651749 146.088058,121.599678 145.517548,124.081390
C144.685089,127.702515 147.668518,130.086639 151.297012,130.938553
C154.692505,131.735764 158.146896,132.292084 161.524139,133.154968
C168.646240,134.974701 171.964813,138.681259 171.997452,144.605362
C172.029266,150.378036 167.990829,155.217606 161.655319,157.079300
C154.767532,159.103271 148.064041,157.966660 141.767899,155.175751
C140.149109,154.458206 139.597397,151.333374 138.517899,149.241592
C144.751236,150.638794 149.969879,152.001770 155.268021,152.891190
C157.118576,153.201859 159.252457,152.599945 161.102890,151.965500
C164.368378,150.845871 166.328384,148.603088 166.183472,144.858505
C166.042191,141.207657 163.776978,139.502899 160.654282,138.715790
C156.474060,137.662109 152.151184,137.110031 148.046112,135.837494
C141.480881,133.802322 138.100525,128.224045 140.126068,121.884071
C141.046677,119.002518 143.940674,116.751434 146.297729,114.064087
z"/>
</svg>

Before

Width:  |  Height:  |  Size: 18 KiB

View File

@ -1,223 +0,0 @@
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="100%" viewBox="0 0 228 218" enable-background="new 0 0 228 218" xml:space="preserve">
<path fill="#FFFFFE" opacity="1.000000" stroke="none"
d="
M128.000000,219.000000
C85.333336,219.000000 43.166672,219.000000 1.000006,219.000000
C1.000004,146.333344 1.000004,73.666679 1.000002,1.000015
C76.999992,1.000010 152.999985,1.000010 228.999969,1.000005
C228.999985,73.666649 228.999985,146.333298 229.000000,218.999969
C195.500000,219.000000 162.000000,219.000000 128.000000,219.000000
M211.356735,142.761169
C216.959747,126.543365 218.578262,109.939430 215.393814,93.070824
C205.220444,39.180355 158.749893,4.487432 104.144997,9.825882
C45.162910,15.592267 3.768258,73.577332 16.267906,131.591431
C24.812157,171.247498 65.187325,213.020203 113.266548,209.065552
C121.365295,208.399429 129.848053,209.958374 137.619064,208.168915
C173.556595,199.893402 197.924927,177.917084 211.356735,142.761169
z"/>
<path fill="#FFFF01" opacity="1.000000" stroke="none"
d="
M211.238464,143.136215
C197.924927,177.917084 173.556595,199.893402 137.619064,208.168915
C129.848053,209.958374 121.365295,208.399429 113.266548,209.065552
C65.187325,213.020203 24.812157,171.247498 16.267906,131.591431
C3.768258,73.577332 45.162910,15.592267 104.144997,9.825882
C158.749893,4.487432 205.220444,39.180355 215.393814,93.070824
C218.578262,109.939430 216.959747,126.543365 211.238464,143.136215
M141.500000,173.010422
C148.832275,173.007446 156.166840,173.120834 163.496338,172.976929
C178.113113,172.689941 189.698883,161.108643 189.975906,146.496292
C190.121170,138.833496 190.123276,131.163315 189.975250,123.500610
C189.692978,108.888618 178.091858,97.117470 163.490646,97.044701
C131.829178,96.886887 100.165825,96.886452 68.504356,97.045013
C53.907982,97.118118 42.300411,108.912048 42.018955,123.506935
C41.884029,130.503387 41.972092,137.504593 41.993484,144.503525
C42.045700,161.586075 53.431450,172.984940 70.509674,173.003876
C93.839752,173.029724 117.169891,173.010391 141.500000,173.010422
M145.195145,53.059601
C132.671616,48.831715 120.037170,46.583344 106.697777,48.901024
C92.144775,51.429550 79.601631,57.560379 68.898666,67.630280
C66.663559,69.733177 64.132935,71.886955 67.486404,74.962341
C70.359642,77.597321 72.936218,76.566895 75.440186,74.077713
C94.411148,55.218845 124.443062,51.774925 147.717285,64.416367
C153.098404,67.339134 157.729401,71.637459 162.729340,75.270096
C164.872406,76.827118 167.161926,77.076057 168.950348,74.908501
C170.859512,72.594582 170.038712,70.591064 168.031189,68.451729
C161.755615,61.764080 154.061371,57.273716 145.195145,53.059601
M136.995056,70.495941
C130.889023,68.996986 124.835899,66.539024 118.665939,66.198593
C105.796410,65.488518 93.971779,68.992683 83.825935,77.538658
C78.267273,82.220787 76.393448,85.115898 79.110603,87.473625
C83.913605,91.641281 86.293518,86.724174 89.223190,84.267517
C97.254776,77.532669 106.856201,74.010139 116.965042,74.302345
C128.364182,74.631851 138.470352,79.663750 147.113617,87.418709
C148.205200,88.398109 150.730148,87.779953 152.590988,87.901962
C152.669205,85.706879 153.695923,82.371986 152.662857,81.512314
C147.971252,77.608131 142.699188,74.401505 136.995056,70.495941
z"/>
<path fill="#060600" opacity="1.000000" stroke="none"
d="
M141.000000,173.010422
C117.169891,173.010391 93.839752,173.029724 70.509674,173.003876
C53.431450,172.984940 42.045700,161.586075 41.993484,144.503525
C41.972092,137.504593 41.884029,130.503387 42.018955,123.506935
C42.300411,108.912048 53.907982,97.118118 68.504356,97.045013
C100.165825,96.886452 131.829178,96.886887 163.490646,97.044701
C178.091858,97.117470 189.692978,108.888618 189.975250,123.500610
C190.123276,131.163315 190.121170,138.833496 189.975906,146.496292
C189.698883,161.108643 178.113113,172.689941 163.496338,172.976929
C156.166840,173.120834 148.832275,173.007446 141.000000,173.010422
M78.508835,168.996704
C106.309456,168.996552 134.110138,169.031723 161.910675,168.981659
C176.254440,168.955841 185.910965,159.193314 185.989548,144.777817
C186.027679,137.786255 186.105927,130.792099 185.969147,123.802979
C185.722504,111.200974 175.995682,101.137589 163.479416,101.071487
C131.850861,100.904434 100.220337,100.912048 68.591660,101.066132
C56.255783,101.126228 46.408096,110.969093 46.060596,123.234039
C45.839100,131.051804 45.865570,138.884628 46.055489,146.704041
C46.305157,156.983246 53.109276,165.737915 63.156441,168.017517
C67.778450,169.066223 72.718353,168.713791 78.508835,168.996704
z"/>
<path fill="#020202" opacity="1.000000" stroke="none"
d="
M145.546295,53.242447
C154.061371,57.273716 161.755615,61.764080 168.031189,68.451729
C170.038712,70.591064 170.859512,72.594582 168.950348,74.908501
C167.161926,77.076057 164.872406,76.827118 162.729340,75.270096
C157.729401,71.637459 153.098404,67.339134 147.717285,64.416367
C124.443062,51.774925 94.411148,55.218845 75.440186,74.077713
C72.936218,76.566895 70.359642,77.597321 67.486404,74.962341
C64.132935,71.886955 66.663559,69.733177 68.898666,67.630280
C79.601631,57.560379 92.144775,51.429550 106.697777,48.901024
C120.037170,46.583344 132.671616,48.831715 145.546295,53.242447
z"/>
<path fill="#010101" opacity="1.000000" stroke="none"
d="
M137.315521,70.719925
C142.699188,74.401505 147.971252,77.608131 152.662857,81.512314
C153.695923,82.371986 152.669205,85.706879 152.591003,87.901962
C150.730148,87.779953 148.205200,88.398109 147.113617,87.418709
C138.470352,79.663750 128.364182,74.631851 116.965042,74.302345
C106.856201,74.010139 97.254776,77.532669 89.223190,84.267517
C86.293518,86.724174 83.913605,91.641281 79.110603,87.473625
C76.393448,85.115898 78.267273,82.220787 83.825935,77.538658
C93.971779,68.992683 105.796410,65.488518 118.665939,66.198593
C124.835899,66.539024 130.889023,68.996986 137.315521,70.719925
z"/>
<path fill="#FBFB00" opacity="1.000000" stroke="none"
d="
M78.011475,168.996704
C72.718353,168.713791 67.778450,169.066223 63.156441,168.017517
C53.109276,165.737915 46.305157,156.983246 46.055489,146.704041
C45.865570,138.884628 45.839100,131.051804 46.060596,123.234039
C46.408096,110.969093 56.255783,101.126228 68.591660,101.066132
C100.220337,100.912048 131.850861,100.904434 163.479416,101.071487
C175.995682,101.137589 185.722504,111.200974 185.969147,123.802979
C186.105927,130.792099 186.027679,137.786255 185.989548,144.777817
C185.910965,159.193314 176.254440,168.955841 161.910675,168.981659
C134.110138,169.031723 106.309456,168.996552 78.011475,168.996704
M87.464859,140.006775
C88.918213,140.072632 90.371567,140.138504 92.160362,140.219574
C92.160362,143.287308 92.291122,146.089172 92.088486,148.866714
C92.018829,149.821472 91.349426,151.112457 90.558853,151.576294
C81.942871,156.631027 68.790039,151.772293 66.436646,142.167770
C65.335182,137.672531 65.465065,132.562943 66.324631,127.972939
C67.619476,121.058601 73.356010,116.691696 80.442207,117.153847
C86.015923,117.517365 91.503868,119.195900 97.106133,120.305405
C98.236244,116.876221 96.421555,115.133743 92.807922,113.940582
C80.451744,109.860825 68.681549,112.643951 63.315113,121.182526
C57.711147,130.099014 58.783627,144.994049 65.765984,151.942963
C73.431854,159.572113 84.768539,159.398056 95.419266,154.528183
C96.244370,154.150925 97.146912,152.873581 97.172134,151.990555
C97.331345,146.417328 97.252846,140.837326 97.252846,135.329025
C91.375755,135.329025 86.148041,135.329025 80.673889,135.329025
C80.860909,137.081635 81.009377,138.473007 81.173050,140.006775
C83.200340,140.006775 84.852486,140.006775 87.464859,140.006775
M139.947678,122.030350
C139.522522,130.931564 142.041336,134.319275 150.803986,136.498367
C154.491913,137.415466 158.403549,137.770721 161.832062,139.259674
C163.723831,140.081253 165.802322,142.616837 166.012787,144.571777
C166.229630,146.586014 164.761856,149.372406 163.139252,150.823853
C161.587784,152.211655 158.813477,153.058212 156.709549,152.843063
C151.078247,152.267166 145.518219,150.994385 139.438431,149.910889
C139.763611,151.166870 139.628632,153.826248 140.847839,154.813782
C146.681152,159.538620 161.469986,158.959030 167.268845,154.087006
C170.825150,151.099106 172.520218,147.280319 171.694763,142.565140
C170.889603,137.965790 167.985977,135.198471 163.667740,133.966095
C160.010223,132.922272 156.265869,132.175049 152.546478,131.357864
C148.259766,130.416016 144.700027,128.473053 145.284378,123.486549
C145.853470,118.630081 149.849274,116.803444 154.055740,117.156929
C159.359726,117.602646 164.575729,119.095253 169.992432,120.168457
C171.146255,116.891342 170.007278,114.396408 165.476608,113.689087
C163.029068,113.306984 160.661758,112.390205 158.211685,112.048996
C150.104172,110.919937 143.696381,114.229126 139.947678,122.030350
M132.343079,119.471489
C125.193138,109.937660 115.030090,113.924957 105.881866,112.990257
C105.881866,127.933136 105.881866,142.299973 105.881866,156.755585
C107.588455,156.755585 108.995186,156.755585 110.873703,156.755585
C110.873703,151.469147 110.873703,146.407013 110.873703,141.420410
C131.606461,139.232544 137.422180,133.471283 132.343079,119.471489
z"/>
<path fill="#0B0B04" opacity="1.000000" stroke="none"
d="
M86.984749,140.006775
C84.852486,140.006775 83.200340,140.006775 81.173050,140.006775
C81.009377,138.473007 80.860909,137.081635 80.673889,135.329025
C86.148041,135.329025 91.375755,135.329025 97.252846,135.329025
C97.252846,140.837326 97.331345,146.417328 97.172134,151.990555
C97.146912,152.873581 96.244370,154.150925 95.419266,154.528183
C84.768539,159.398056 73.431854,159.572113 65.765984,151.942963
C58.783627,144.994049 57.711147,130.099014 63.315113,121.182526
C68.681549,112.643951 80.451744,109.860825 92.807922,113.940582
C96.421555,115.133743 98.236244,116.876221 97.106133,120.305405
C91.503868,119.195900 86.015923,117.517365 80.442207,117.153847
C73.356010,116.691696 67.619476,121.058601 66.324631,127.972939
C65.465065,132.562943 65.335182,137.672531 66.436646,142.167770
C68.790039,151.772293 81.942871,156.631027 90.558853,151.576294
C91.349426,151.112457 92.018829,149.821472 92.088486,148.866714
C92.291122,146.089172 92.160362,143.287308 92.160362,140.219574
C90.371567,140.138504 88.918213,140.072632 86.984749,140.006775
z"/>
<path fill="#0D0D04" opacity="1.000000" stroke="none"
d="
M140.018677,121.625992
C143.696381,114.229126 150.104172,110.919937 158.211685,112.048996
C160.661758,112.390205 163.029068,113.306984 165.476608,113.689087
C170.007278,114.396408 171.146255,116.891342 169.992432,120.168457
C164.575729,119.095253 159.359726,117.602646 154.055740,117.156929
C149.849274,116.803444 145.853470,118.630081 145.284378,123.486549
C144.700027,128.473053 148.259766,130.416016 152.546478,131.357864
C156.265869,132.175049 160.010223,132.922272 163.667740,133.966095
C167.985977,135.198471 170.889603,137.965790 171.694763,142.565140
C172.520218,147.280319 170.825150,151.099106 167.268845,154.087006
C161.469986,158.959030 146.681152,159.538620 140.847839,154.813782
C139.628632,153.826248 139.763611,151.166870 139.438431,149.910889
C145.518219,150.994385 151.078247,152.267166 156.709549,152.843063
C158.813477,153.058212 161.587784,152.211655 163.139252,150.823853
C164.761856,149.372406 166.229630,146.586014 166.012787,144.571777
C165.802322,142.616837 163.723831,140.081253 161.832062,139.259674
C158.403549,137.770721 154.491913,137.415466 150.803986,136.498367
C142.041336,134.319275 139.522522,130.931564 140.018677,121.625992
z"/>
<path fill="#0B0B04" opacity="1.000000" stroke="none"
d="
M132.583527,119.784050
C137.422180,133.471283 131.606461,139.232544 110.873703,141.420410
C110.873703,146.407013 110.873703,151.469147 110.873703,156.755585
C108.995186,156.755585 107.588455,156.755585 105.881866,156.755585
C105.881866,142.299973 105.881866,127.933136 105.881866,112.990257
C115.030090,113.924957 125.193138,109.937660 132.583527,119.784050
M128.690262,124.987030
C126.092094,118.336884 120.386665,116.326439 111.035500,118.718056
C111.035500,124.338562 111.035500,129.937027 111.035500,135.500748
C123.415474,137.236740 127.945847,134.709579 128.690262,124.987030
z"/>
<path fill="#FBFB00" opacity="1.000000" stroke="none"
d="
M128.721634,125.372940
C127.945847,134.709579 123.415474,137.236740 111.035500,135.500748
C111.035500,129.937027 111.035500,124.338562 111.035500,118.718056
C120.386665,116.326439 126.092094,118.336884 128.721634,125.372940
z"/>
</svg>

Before

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.4 KiB

View File

@ -1,7 +0,0 @@
Open *demo.html* to see a list of all the glyphs in your font along with their codes/ligatures.
To use the generated font in desktop programs, you can install the TTF font. In order to copy the character associated with each icon, refer to the text box at the bottom right corner of each glyph in demo.html. The character inside this text box may be invisible; but it can still be copied. See this guide for more info: https://icomoon.io/docs/#local-fonts
You won't need any of the files located under the *demo-files* directory when including the generated font in your own projects.
You can import *selection.json* back to the IcoMoon app using the *Import Icons* button (or via Main Menu → Manage Projects) to retrieve your icon selection.

View File

@ -1,152 +0,0 @@
body {
padding: 0;
margin: 0;
font-family: sans-serif;
font-size: 1em;
line-height: 1.5;
color: #555;
background: #fff;
}
h1 {
font-size: 1.5em;
font-weight: normal;
}
small {
font-size: .66666667em;
}
a {
color: #e74c3c;
text-decoration: none;
}
a:hover, a:focus {
box-shadow: 0 1px #e74c3c;
}
.bshadow0, input {
box-shadow: inset 0 -2px #e7e7e7;
}
input:hover {
box-shadow: inset 0 -2px #ccc;
}
input, fieldset {
font-family: sans-serif;
font-size: 1em;
margin: 0;
padding: 0;
border: 0;
}
input {
color: inherit;
line-height: 1.5;
height: 1.5em;
padding: .25em 0;
}
input:focus {
outline: none;
box-shadow: inset 0 -2px #449fdb;
}
.glyph {
font-size: 16px;
width: 15em;
padding-bottom: 1em;
margin-right: 4em;
margin-bottom: 1em;
float: left;
overflow: hidden;
}
.liga {
width: 80%;
width: calc(100% - 2.5em);
}
.talign-right {
text-align: right;
}
.talign-center {
text-align: center;
}
.bgc1 {
background: #f1f1f1;
}
.fgc1 {
color: #999;
}
.fgc0 {
color: #000;
}
p {
margin-top: 1em;
margin-bottom: 1em;
}
.mvm {
margin-top: .75em;
margin-bottom: .75em;
}
.mtn {
margin-top: 0;
}
.mtl, .mal {
margin-top: 1.5em;
}
.mbl, .mal {
margin-bottom: 1.5em;
}
.mal, .mhl {
margin-left: 1.5em;
margin-right: 1.5em;
}
.mhmm {
margin-left: 1em;
margin-right: 1em;
}
.mls {
margin-left: .25em;
}
.ptl {
padding-top: 1.5em;
}
.pbs, .pvs {
padding-bottom: .25em;
}
.pvs, .pts {
padding-top: .25em;
}
.unit {
float: left;
}
.unitRight {
float: right;
}
.size1of2 {
width: 50%;
}
.size1of1 {
width: 100%;
}
.clearfix:before, .clearfix:after {
content: " ";
display: table;
}
.clearfix:after {
clear: both;
}
.hidden-true {
display: none;
}
.textbox0 {
width: 3em;
background: #f1f1f1;
padding: .25em .5em;
line-height: 1.5;
height: 1.5em;
}
#testDrive {
display: block;
padding-top: 24px;
line-height: 1.5;
}
.fs0 {
font-size: 16px;
}
.fs1 {
font-size: 32px;
}

View File

@ -1,30 +0,0 @@
if (!('boxShadow' in document.body.style)) {
document.body.setAttribute('class', 'noBoxShadow');
}
document.body.addEventListener("click", function(e) {
var target = e.target;
if (target.tagName === "INPUT" &&
target.getAttribute('class').indexOf('liga') === -1) {
target.select();
}
});
(function() {
var fontSize = document.getElementById('fontSize'),
testDrive = document.getElementById('testDrive'),
testText = document.getElementById('testText');
function updateTest() {
testDrive.innerHTML = testText.value || String.fromCharCode(160);
if (window.icomoonLiga) {
window.icomoonLiga(testDrive);
}
}
function updateSize() {
testDrive.style.fontSize = fontSize.value + 'px';
}
fontSize.addEventListener('change', updateSize, false);
testText.addEventListener('input', updateTest, false);
testText.addEventListener('change', updateTest, false);
updateSize();
}());

View File

@ -1,80 +0,0 @@
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>IcoMoon Demo</title>
<meta name="description" content="An Icon Font Generated By IcoMoon.io">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="demo-files/demo.css">
<link rel="stylesheet" href="style.css"></head>
<body>
<div class="bgc1 clearfix">
<h1 class="mhmm mvm"><span class="fgc1">Font Name:</span> icomoon <small class="fgc1">(Glyphs:&nbsp;3)</small></h1>
</div>
<div class="clearfix mhl ptl">
<h1 class="mvm mtn fgc1">Grid Size: Unknown</h1>
<div class="glyph fs1">
<div class="clearfix bshadow0 pbs">
<span class="icon-gps_signal_middle"><span class="path1"></span><span class="path2"></span><span class="path3"></span><span class="path4"></span><span class="path5"></span><span class="path6"></span><span class="path7"></span><span class="path8"></span><span class="path9"></span></span>
<span class="mls"> icon-gps_signal_middle</span>
</div>
<fieldset class="fs0 size1of1 clearfix hidden-false">
<input type="text" readonly value="e900" class="unit size1of2" />
<input type="text" maxlength="1" readonly value="&#xe900;" class="unitRight size1of2 talign-right" />
</fieldset>
<div class="fs0 bshadow0 clearfix hidden-false">
<span class="unit pvs fgc1">liga: </span>
<input type="text" readonly value="" class="liga unitRight" />
</div>
</div>
<div class="glyph fs1">
<div class="clearfix bshadow0 pbs">
<span class="icon-gps_signal_low"><span class="path1"></span><span class="path2"></span><span class="path3"></span><span class="path4"></span><span class="path5"></span><span class="path6"></span><span class="path7"></span><span class="path8"></span><span class="path9"></span><span class="path10"></span></span>
<span class="mls"> icon-gps_signal_low</span>
</div>
<fieldset class="fs0 size1of1 clearfix hidden-false">
<input type="text" readonly value="e909" class="unit size1of2" />
<input type="text" maxlength="1" readonly value="&#xe909;" class="unitRight size1of2 talign-right" />
</fieldset>
<div class="fs0 bshadow0 clearfix hidden-false">
<span class="unit pvs fgc1">liga: </span>
<input type="text" readonly value="" class="liga unitRight" />
</div>
</div>
<div class="glyph fs1">
<div class="clearfix bshadow0 pbs">
<span class="icon-gps_signal_high"><span class="path1"></span><span class="path2"></span><span class="path3"></span><span class="path4"></span><span class="path5"></span><span class="path6"></span><span class="path7"></span><span class="path8"></span><span class="path9"></span><span class="path10"></span></span>
<span class="mls"> icon-gps_signal_high</span>
</div>
<fieldset class="fs0 size1of1 clearfix hidden-false">
<input type="text" readonly value="e913" class="unit size1of2" />
<input type="text" maxlength="1" readonly value="&#xe913;" class="unitRight size1of2 talign-right" />
</fieldset>
<div class="fs0 bshadow0 clearfix hidden-false">
<span class="unit pvs fgc1">liga: </span>
<input type="text" readonly value="" class="liga unitRight" />
</div>
</div>
</div>
<!--[if gt IE 8]><!-->
<div class="mhl clearfix mbl">
<h1>Font Test Drive</h1>
<label>
Font Size: <input id="fontSize" type="number" class="textbox0 mbm"
min="8" value="48" />
px
</label>
<input id="testText" type="text" class="phl size1of1 mvl"
placeholder="Type some text to test..." value=""/>
<div id="testDrive" class="icon-" style="font-family: icomoon">&nbsp;
</div>
</div>
<!--<![endif]-->
<div class="bgc1 clearfix">
<p class="mhl">Generated by <a href="https://icomoon.io/app">IcoMoon</a></p>
</div>
<script src="demo-files/demo.js"></script>
</body>
</html>

View File

@ -1,39 +0,0 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
<svg xmlns="http://www.w3.org/2000/svg">
<metadata>Generated by IcoMoon</metadata>
<defs>
<font id="icomoon" horiz-adv-x="1024">
<font-face units-per-em="1024" ascent="960" descent="-64" />
<missing-glyph horiz-adv-x="1024" />
<glyph unicode="&#x20;" horiz-adv-x="512" d="" />
<glyph unicode="&#xe900;" horiz-adv-x="1071" d="M476.771 924.771c199.666 13.278 355.46-61.878 467.376-225.468 108.605-206.743 88.252-399.332-61.064-577.761-127.939-124.994-280.599-169.618-457.982-133.872-231.133 67.546-353.261 221.776-366.385 462.679 9.428 217.043 114.333 366.572 314.716 448.587 34.697 10.24 69.143 18.852 103.339 25.835z" />
<glyph unicode="&#xe901;" horiz-adv-x="1071" d="M504.954 741.578c110.963 8.694 205.688-25.752 284.183-103.339 4.721-17.168-1.541-28.129-18.789-32.881-30.823 26.775-64.489 49.478-100.991 68.11-81.37 34.44-162.788 34.44-244.257 0-35.044-21.006-68.708-43.709-100.991-68.11-11.273 4.217-18.319 12.046-21.138 23.486 29.204 38.979 66.782 67.945 112.734 86.899 29.725 10.931 59.477 19.542 89.248 25.835z" />
<glyph unicode="&#xe902;" horiz-adv-x="1071" d="M514.349 657.028c80.403 7.114 148.513-17.937 204.33-75.156 6.247-23.475-2.367-33.652-25.835-30.532-96.19 87.544-193.264 89.11-291.229 4.697-18.12-11.933-30.646-8.019-37.578 11.743 2.069 12.747 8.332 22.925 18.789 30.532 39.091 31.31 82.932 50.882 131.523 58.716z" />
<glyph unicode="&#xe903;" horiz-adv-x="1071" d="M260.697 506.716c184.765 0.783 369.523 0 554.275-2.349 26.431-4.496 44.436-19.371 54.018-44.624 4.462-91.056 2.894-181.873-4.697-272.44-9.131-15.191-22.443-25.365-39.927-30.532-191.023-3.133-382.043-3.133-573.064 0-26.722 3.227-43.163 18.098-49.321 44.624-3.132 84.55-3.132 169.101 0 253.651 8.958 30.138 28.53 47.362 58.716 51.67z" />
<glyph unicode="&#xe904;" horiz-adv-x="1071" d="M237.211 492.624c197.291 0.783 394.574 0 591.853-2.349 15.294-7.455 25.473-19.198 30.532-35.229 3.133-84.55 3.133-169.101 0-253.651-6.017-17.554-17.76-29.297-35.229-35.229-192.587-3.133-385.174-3.133-577.761 0-17.469 5.933-29.212 17.676-35.229 35.229-3.132 86.115-3.132 172.234 0 258.349 7.828 11.724 16.439 22.683 25.835 32.881z" />
<glyph unicode="&#xe905;" horiz-adv-x="1071" d="M345.248 440.954c28.354 0.658 56.537-0.907 84.55-4.697 0-14.092 0-28.183 0-42.275-4.942-0.7-9.639 0.080-14.092 2.349-12.498 31.307-34.419 40.702-65.761 28.183-25.779-24.083-36.739-53.835-32.881-89.248-3.754-35.765 7.207-65.513 32.881-89.248 49.484-5.209 65.924 15.928 49.321 63.413-4.239 5.641-9.72 9.559-16.44 11.743 20.355 3.133 40.71 3.133 61.064 0-5.643-4.242-9.558-9.719-11.743-16.44-1.566-23.486-3.132-46.972-4.697-70.459-1.566-1.564-3.132-3.133-4.697-4.697-6.167 5.040-13.213 8.173-21.138 9.394-77.32-18.3-116.464 13.016-117.431 93.945-1.181 48.762 19.174 84.776 61.064 108.037z" />
<glyph unicode="&#xe906;" horiz-adv-x="1071" d="M472.073 436.257c30.471 5.421 61.788 6.205 93.945 2.349 45.267-6.67 61.708-32.505 49.321-77.505-5.482-18.005-17.225-29.748-35.229-35.229-19.977-0.939-39.551-3.288-58.716-7.046-3.133-21.922-3.133-43.839 0-65.761 5.702-7.276 12.748-12.753 21.138-16.44-23.486-3.133-46.972-3.133-70.459 0 5.068 4.491 10.545 8.403 16.44 11.743 3.133 57.931 3.133 115.867 0 173.798-4.88 5.684-10.362 10.381-16.44 14.092z" />
<glyph unicode="&#xe907;" horiz-adv-x="1071" d="M692.844 440.954c27.066 1.649 53.68-0.7 79.853-7.046-4.434-12.772-5.998-26.079-4.697-39.927-4.697 0-9.394 0-14.092 0-7.765 33.707-28.118 43.886-61.064 30.532-18.939-21.626-17.375-41.979 4.697-61.064 22.326-11.546 43.464-24.858 63.413-39.927 24.599-57.264 5.81-88.581-56.367-93.945-17.925 3.791-35.934 6.924-54.018 9.394-0.77 12.622 0.014 25.149 2.349 37.578 1.945 2.147 4.293 3.716 7.046 4.697 6.656-15.285 17.615-27.028 32.881-35.229 43.637-7.619 60.078 10.386 49.321 54.018-22.984 18.277-47.254 34.717-72.807 49.321-24.567 39.56-16.741 70.092 23.486 91.596z" />
<glyph unicode="&#xe908;" horiz-adv-x="1071" d="M519.046 426.862c58.077 5.369 79.214-19.681 63.413-75.156-17.779-16.271-38.917-22.537-63.413-18.789 0 31.317 0 62.628 0 93.945z" />
<glyph unicode="&#xe909;" horiz-adv-x="1071" d="M472.073 943.56c-62.2-9.509-121.698-29.081-178.495-58.716-183.411-111.384-267.179-275.005-251.303-490.862 33.091-203.748 146.608-340.752 340.55-411.009 213.466-56.080 392.746-2.062 537.835 162.055 123.012 171.919 138.667 353.547 46.972 544.881-113.96 181.861-279.148 266.412-495.56 253.651zM669.358 619.45c-67.809 41.065-139.837 48.111-216.073 21.138-25.823-10.547-49.309-24.639-70.459-42.275-14.050-10.059-19.531-23.368-16.44-39.927 3.777-6.128 9.257-9.259 16.44-9.394 24.303 17.197 49.355 33.637 75.156 49.321 62.177 27.915 123.242 25.567 183.193-7.046-26.619-28.183-53.234-56.367-79.853-84.55-100.22 0.783-200.428 0-300.624-2.349-30.974-2.785-50.545-19.226-58.716-49.321-3.132-84.55-3.132-169.101 0-253.651 5.542-11.086 11.023-22.044 16.44-32.881-6.072-8.436-13.118-16.267-21.138-23.486-117.899 133.054-150.78 284.93-98.642 455.633 79.099 195.473 224.714 298.813 436.844 310.018 117.098-2.714 218.089-43.424 302.972-122.128-54.901-58.031-111.268-114.398-169.101-169.101zM260.697 154.422c187.896-0.784 375.785 0 563.67 2.349 26.244 6.384 41.12 22.824 44.624 49.321 3.133 84.55 3.133 169.101 0 253.651-9.582 25.252-27.587 40.128-54.018 44.624-67.307 2.348-134.637 3.131-201.982 2.349 18.789 21.921 39.142 42.275 61.064 61.064 9.254-13.214 21.781-18.694 37.578-16.44 14.026 18.322 10.898 33.196-9.394 44.624 53.135 56.268 107.938 111.070 164.404 164.404 57.809-59.207 96.171-129.666 115.083-211.376 34.623-240.701-56.973-413.715-274.789-519.046-142.665-52.083-280.449-41.12-413.358 32.881-24.842 17.004-48.328 35.793-70.459 56.367 11.913 12.706 24.439 24.449 37.578 35.229zM542.532 487.927c-17.225-15.656-34.445-31.317-51.67-46.972-6.449 0.737-12.715-0.047-18.789-2.349 2.555-3.368 5.688-5.717 9.394-7.046-50.104-53.234-101.774-104.904-155.009-155.009-14.272 44.69-11.923 88.534 7.046 131.523 32.897 33.454 60.297 29.541 82.202-11.743 4.453-2.269 9.15-3.049 14.092-2.349 0 14.092 0 28.183 0 42.275-90.584 23.622-139.122-10.822-145.615-103.339 3.54-15.393 5.889-31.049 7.046-46.972 1.991-11.861 7.471-21.255 16.44-28.183-25.052-28.183-51.67-54.803-79.853-79.853-6.123 6.985-11.603 14.815-16.44 23.486-3.132 86.115-3.132 172.234 0 258.349 6.848 11.555 15.459 21.734 25.835 30.532 102.575 3.896 204.349 3.113 305.321-2.349zM598.899 492.624c76.739 0.783 153.459 0 230.165-2.349 9.977-5.27 18.587-12.316 25.835-21.138 7.647-88.942 9.216-178.19 4.697-267.743-6.017-17.554-17.76-29.297-35.229-35.229-184.752-2.349-369.51-3.133-554.275-2.349 21.921 25.050 45.407 48.537 70.459 70.459 20.407-4.105 40.762-2.541 61.064 4.697 7.925-1.221 14.971-4.354 21.138-9.394 6.026 24.224 9.157 49.274 9.394 75.156 2.185 6.722 6.1 12.199 11.743 16.44-4.453 2.269-9.15 3.049-14.092 2.349 18.789 21.922 39.144 42.275 61.064 61.064 0.78-45.432 0-90.84-2.349-136.22-5.895-3.34-11.372-7.253-16.44-11.743 23.486-3.133 46.972-3.133 70.459 0-8.389 3.687-15.435 9.164-21.138 16.44-3.133 21.922-3.133 43.839 0 65.761 19.165 3.758 38.738 6.106 58.716 7.046 33.999 17.168 45.742 44.567 35.229 82.202-15.665 24.379-38.372 35.342-68.11 32.881 15.656 18.789 32.881 36.014 51.67 51.67zM533.138 426.862c42.172 0.892 60.176-19.461 54.018-61.064-1.625-11.029-7.107-19.639-16.44-25.835-16.722-5.81-33.947-8.159-51.67-7.046 0 26.619 0 53.234 0 79.853 3.133 6.261 7.83 10.959 14.092 14.092zM401.615 295.339c7.172-39.809-10.052-57.034-51.67-51.67 15.657 18.789 32.881 36.014 51.67 51.67z" />
<glyph unicode="&#xe90a;" horiz-adv-x="1071" d="M669.358 619.45c-7.83-10.96-17.225-20.355-28.183-28.183-59.951 32.613-121.015 34.961-183.193 7.046-25.801-15.684-50.853-32.124-75.156-49.321-7.184 0.135-12.664 3.267-16.44 9.394-3.090 16.559 2.39 29.868 16.44 39.927 21.15 17.636 44.636 31.728 70.459 42.275 76.236 26.973 148.264 19.928 216.073-21.138z" />
<glyph unicode="&#xe90b;" horiz-adv-x="1071" d="M702.239 595.963c20.292-11.427 23.42-26.302 9.394-44.624-15.797-2.254-28.324 3.227-37.578 16.44 7.83 10.96 17.225 20.355 28.183 28.183z" />
<glyph unicode="&#xe90c;" horiz-adv-x="1071" d="M561.321 506.716c-4.697-7.829-10.959-14.092-18.789-18.789-100.973 5.462-202.746 6.245-305.321 2.349-10.376-8.798-18.987-18.977-25.835-30.532-3.132-86.115-3.132-172.234 0-258.349 4.837-8.671 10.317-16.501 16.44-23.486-1.566-4.697-4.697-7.83-9.394-9.394-5.418 10.837-10.898 21.795-16.44 32.881-3.132 84.55-3.132 169.101 0 253.651 8.17 30.095 27.742 46.537 58.716 49.321 100.196 2.349 200.404 3.131 300.624 2.349z" />
<glyph unicode="&#xe90d;" horiz-adv-x="1071" d="M612.991 506.716c67.344 0.783 134.675 0 201.982-2.349 26.431-4.496 44.436-19.371 54.018-44.624 3.133-84.55 3.133-169.101 0-253.651-3.504-26.497-18.38-42.938-44.624-49.321-187.885-2.349-375.773-3.133-563.67-2.349 1.566 4.697 4.697 7.83 9.394 9.394 184.765-0.784 369.523 0 554.275 2.349 17.469 5.933 29.212 17.676 35.229 35.229 4.519 89.553 2.95 178.801-4.697 267.743-7.248 8.821-15.858 15.867-25.835 21.138-76.706 2.348-153.426 3.131-230.165 2.349 3.133 6.263 7.83 10.96 14.092 14.092z" />
<glyph unicode="&#xe90e;" horiz-adv-x="1071" d="M326.459 276.55c-4.697-7.83-10.96-14.092-18.789-18.789-8.969 6.928-14.45 16.323-16.44 28.183-1.157 15.924-3.506 31.58-7.046 46.972 6.493 92.517 55.031 126.962 145.615 103.339 0-14.092 0-28.183 0-42.275-4.942-0.7-9.639 0.080-14.092 2.349-21.905 41.284-49.305 45.197-82.202 11.743-18.969-42.989-21.318-86.833-7.046-131.523z" />
<glyph unicode="&#xe90f;" horiz-adv-x="1071" d="M490.862 440.954c-1.564-4.697-4.697-7.83-9.394-9.394-3.706 1.329-6.839 3.678-9.394 7.046 6.074 2.302 12.34 3.086 18.789 2.349z" />
<glyph unicode="&#xe910;" horiz-adv-x="1071" d="M547.229 440.954c29.738 2.461 52.445-8.502 68.11-32.881 10.512-37.634-1.231-65.033-35.229-82.202-19.977-0.939-39.551-3.288-58.716-7.046-3.133-21.922-3.133-43.839 0-65.761 5.702-7.276 12.748-12.753 21.138-16.44-23.486-3.133-46.972-3.133-70.459 0 5.068 4.491 10.545 8.403 16.44 11.743 2.349 45.38 3.128 90.788 2.349 136.22 7.83 10.959 17.225 20.353 28.183 28.183 0-26.619 0-53.234 0-79.853 17.723-1.113 34.948 1.235 51.67 7.046 9.333 6.196 14.815 14.806 16.44 25.835 6.158 41.604-11.846 61.957-54.018 61.064 3.133 6.261 7.83 10.959 14.092 14.092z" />
<glyph unicode="&#xe911;" horiz-adv-x="1071" d="M692.844 440.954c27.066 1.649 53.68-0.7 79.853-7.046-4.434-12.772-5.998-26.079-4.697-39.927-4.697 0-9.394 0-14.092 0-7.765 33.707-28.118 43.886-61.064 30.532-18.939-21.626-17.375-41.979 4.697-61.064 22.326-11.546 43.464-24.858 63.413-39.927 24.599-57.264 5.81-88.581-56.367-93.945-17.925 3.791-35.934 6.924-54.018 9.394-0.77 12.622 0.014 25.149 2.349 37.578 1.945 2.147 4.293 3.716 7.046 4.697 6.656-15.285 17.615-27.028 32.881-35.229 43.637-7.619 60.078 10.386 49.321 54.018-22.984 18.277-47.254 34.717-72.807 49.321-24.567 39.56-16.741 70.092 23.486 91.596z" />
<glyph unicode="&#xe912;" horiz-adv-x="1071" d="M429.798 323.523c4.942 0.7 9.639-0.080 14.092-2.349-5.643-4.242-9.558-9.719-11.743-16.44-0.237-25.882-3.369-50.932-9.394-75.156-6.167 5.040-13.213 8.173-21.138 9.394-20.302-7.238-40.657-8.803-61.064-4.697 1.566 4.697 4.697 7.83 9.394 9.394 41.618-5.364 58.841 11.861 51.67 51.67 7.829 10.959 17.223 20.353 28.183 28.183z" />
<glyph unicode="&#xe913;" horiz-adv-x="1071" d="M476.771 929.468c203.992 13.476 361.35-64.811 472.073-234.862 84.55-161.272 84.55-322.546 0-483.817-130.461-195.927-311.305-268.734-542.532-218.422-195.946 64.418-311.029 198.29-345.248 401.615-15.798 232.312 80.496 399.065 288.881 500.257 41.888 15.544 84.163 27.287 126.826 35.229z" />
<glyph unicode="&#xe914;" horiz-adv-x="1071" d="M519.046 840.22c131.297 2.777 241.683-42.629 331.156-136.22 3.119-23.469-7.055-32.081-30.532-25.835-147.423 132.183-308.694 150.972-483.817 56.367-22.969-13.877-43.324-31.1-61.064-51.67-30.235-15.35-41.978-6.738-35.229 25.835 77.581 77.549 170.743 121.39 279.486 131.523z" />
<glyph unicode="&#xe915;" horiz-adv-x="1071" d="M504.954 741.578c110.963 8.694 205.688-25.752 284.183-103.339 4.721-17.168-1.541-28.129-18.789-32.881-30.823 26.775-64.489 49.478-100.991 68.11-81.37 34.44-162.788 34.44-244.257 0-35.044-21.006-68.708-43.709-100.991-68.11-11.273 4.217-18.319 12.046-21.138 23.486 29.204 38.979 66.782 67.945 112.734 86.899 29.725 10.931 59.477 19.542 89.248 25.835z" />
<glyph unicode="&#xe916;" horiz-adv-x="1071" d="M514.349 657.028c80.403 7.114 148.513-17.937 204.33-75.156 6.247-23.475-2.367-33.652-25.835-30.532-96.19 87.544-193.264 89.11-291.229 4.697-18.12-11.933-30.646-8.019-37.578 11.743 2.069 12.747 8.332 22.925 18.789 30.532 39.091 31.31 82.932 50.882 131.523 58.716z" />
<glyph unicode="&#xe917;" horiz-adv-x="1071" d="M260.697 506.716c184.765 0.783 369.523 0 554.275-2.349 26.431-4.496 44.436-19.371 54.018-44.624 4.462-91.056 2.894-181.873-4.697-272.44-9.131-15.191-22.443-25.365-39.927-30.532-191.023-3.133-382.043-3.133-573.064 0-26.722 3.227-43.163 18.098-49.321 44.624-3.132 84.55-3.132 169.101 0 253.651 8.958 30.138 28.53 47.362 58.716 51.67z" />
<glyph unicode="&#xe918;" horiz-adv-x="1071" d="M237.211 492.624c197.291 0.783 394.574 0 591.853-2.349 15.294-7.455 25.473-19.198 30.532-35.229 3.133-84.55 3.133-169.101 0-253.651-6.017-17.554-17.76-29.297-35.229-35.229-192.587-3.133-385.174-3.133-577.761 0-17.469 5.933-29.212 17.676-35.229 35.229-3.132 86.115-3.132 172.234 0 258.349 7.828 11.724 16.439 22.683 25.835 32.881z" />
<glyph unicode="&#xe919;" horiz-adv-x="1071" d="M345.248 440.954c28.354 0.658 56.537-0.907 84.55-4.697 0-14.092 0-28.183 0-42.275-4.942-0.7-9.639 0.080-14.092 2.349-12.498 31.307-34.419 40.702-65.761 28.183-25.779-24.083-36.739-53.835-32.881-89.248-3.754-35.765 7.207-65.513 32.881-89.248 49.484-5.209 65.924 15.928 49.321 63.413-4.239 5.641-9.72 9.559-16.44 11.743 20.355 3.133 40.71 3.133 61.064 0-5.643-4.242-9.558-9.719-11.743-16.44-1.566-23.486-3.132-46.972-4.697-70.459-1.566-1.564-3.132-3.133-4.697-4.697-6.167 5.040-13.213 8.173-21.138 9.394-77.32-18.3-116.464 13.016-117.431 93.945-1.181 48.762 19.174 84.776 61.064 108.037z" />
<glyph unicode="&#xe91a;" horiz-adv-x="1071" d="M472.073 436.257c30.471 5.421 61.788 6.205 93.945 2.349 45.267-6.67 61.708-32.505 49.321-77.505-5.482-18.005-17.225-29.748-35.229-35.229-19.977-0.939-39.551-3.288-58.716-7.046-3.133-21.922-3.133-43.839 0-65.761 5.702-7.276 12.748-12.753 21.138-16.44-23.486-3.133-46.972-3.133-70.459 0 5.068 4.491 10.545 8.403 16.44 11.743 3.133 57.931 3.133 115.867 0 173.798-4.88 5.684-10.362 10.381-16.44 14.092z" />
<glyph unicode="&#xe91b;" horiz-adv-x="1071" d="M692.844 440.954c27.066 1.649 53.68-0.7 79.853-7.046-4.434-12.772-5.998-26.079-4.697-39.927-4.697 0-9.394 0-14.092 0-7.765 33.707-28.118 43.886-61.064 30.532-18.939-21.626-17.375-41.979 4.697-61.064 22.326-11.546 43.464-24.858 63.413-39.927 24.599-57.264 5.81-88.581-56.367-93.945-17.925 3.791-35.934 6.924-54.018 9.394-0.77 12.622 0.014 25.149 2.349 37.578 1.945 2.147 4.293 3.716 7.046 4.697 6.656-15.285 17.615-27.028 32.881-35.229 43.637-7.619 60.078 10.386 49.321 54.018-22.984 18.277-47.254 34.717-72.807 49.321-24.567 39.56-16.741 70.092 23.486 91.596z" />
<glyph unicode="&#xe91c;" horiz-adv-x="1071" d="M519.046 426.862c58.077 5.369 79.214-19.681 63.413-75.156-17.779-16.271-38.917-22.537-63.413-18.789 0 31.317 0 62.628 0 93.945z" />
</font></defs></svg>

Before

Width:  |  Height:  |  Size: 15 KiB

File diff suppressed because one or more lines are too long

View File

@ -1,169 +0,0 @@
@font-face {
font-family: 'icomoon';
src: url('fonts/icomoon.eot?tueyzw');
src: url('fonts/icomoon.eot?tueyzw#iefix') format('embedded-opentype'),
url('fonts/icomoon.ttf?tueyzw') format('truetype'),
url('fonts/icomoon.woff?tueyzw') format('woff'),
url('fonts/icomoon.svg?tueyzw#icomoon') format('svg');
font-weight: normal;
font-style: normal;
font-display: block;
}
[class^="icon-"], [class*=" icon-"] {
/* use !important to prevent issues with browser extensions that change fonts */
font-family: 'icomoon' !important;
speak: never;
font-style: normal;
font-weight: normal;
font-variant: normal;
text-transform: none;
line-height: 1;
/* Better Font Rendering =========== */
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
.icon-gps_signal_middle .path1:before {
content: "\e900";
color: rgb(255, 254, 11);
}
.icon-gps_signal_middle .path2:before {
content: "\e901";
margin-left: -1.0458984375em;
color: rgb(1, 1, 1);
}
.icon-gps_signal_middle .path3:before {
content: "\e902";
margin-left: -1.0458984375em;
color: rgb(0, 0, 0);
}
.icon-gps_signal_middle .path4:before {
content: "\e903";
margin-left: -1.0458984375em;
color: rgb(5, 5, 5);
}
.icon-gps_signal_middle .path5:before {
content: "\e904";
margin-left: -1.0458984375em;
color: rgb(254, 255, 0);
}
.icon-gps_signal_middle .path6:before {
content: "\e905";
margin-left: -1.0458984375em;
color: rgb(2, 2, 2);
}
.icon-gps_signal_middle .path7:before {
content: "\e906";
margin-left: -1.0458984375em;
color: rgb(3, 3, 3);
}
.icon-gps_signal_middle .path8:before {
content: "\e907";
margin-left: -1.0458984375em;
color: rgb(2, 2, 2);
}
.icon-gps_signal_middle .path9:before {
content: "\e908";
margin-left: -1.0458984375em;
color: rgb(254, 255, 0);
}
.icon-gps_signal_low .path1:before {
content: "\e909";
color: rgb(255, 65, 37);
}
.icon-gps_signal_low .path2:before {
content: "\e90a";
margin-left: -1.0458984375em;
color: rgb(0, 0, 0);
}
.icon-gps_signal_low .path3:before {
content: "\e90b";
margin-left: -1.0458984375em;
color: rgb(0, 0, 0);
}
.icon-gps_signal_low .path4:before {
content: "\e90c";
margin-left: -1.0458984375em;
color: rgb(10, 10, 10);
}
.icon-gps_signal_low .path5:before {
content: "\e90d";
margin-left: -1.0458984375em;
color: rgb(3, 3, 3);
}
.icon-gps_signal_low .path6:before {
content: "\e90e";
margin-left: -1.0458984375em;
color: rgb(2, 2, 2);
}
.icon-gps_signal_low .path7:before {
content: "\e90f";
margin-left: -1.0458984375em;
color: rgb(5, 5, 5);
}
.icon-gps_signal_low .path8:before {
content: "\e910";
margin-left: -1.0458984375em;
color: rgb(3, 3, 3);
}
.icon-gps_signal_low .path9:before {
content: "\e911";
margin-left: -1.0458984375em;
color: rgb(2, 2, 2);
}
.icon-gps_signal_low .path10:before {
content: "\e912";
margin-left: -1.0458984375em;
color: rgb(2, 2, 2);
}
.icon-gps_signal_high .path1:before {
content: "\e913";
color: rgb(22, 158, 213);
}
.icon-gps_signal_high .path2:before {
content: "\e914";
margin-left: -1.0458984375em;
color: rgb(1, 1, 1);
}
.icon-gps_signal_high .path3:before {
content: "\e915";
margin-left: -1.0458984375em;
color: rgb(1, 1, 1);
}
.icon-gps_signal_high .path4:before {
content: "\e916";
margin-left: -1.0458984375em;
color: rgb(0, 0, 0);
}
.icon-gps_signal_high .path5:before {
content: "\e917";
margin-left: -1.0458984375em;
color: rgb(5, 5, 5);
}
.icon-gps_signal_high .path6:before {
content: "\e918";
margin-left: -1.0458984375em;
color: rgb(14, 157, 213);
}
.icon-gps_signal_high .path7:before {
content: "\e919";
margin-left: -1.0458984375em;
color: rgb(2, 2, 2);
}
.icon-gps_signal_high .path8:before {
content: "\e91a";
margin-left: -1.0458984375em;
color: rgb(3, 3, 3);
}
.icon-gps_signal_high .path9:before {
content: "\e91b";
margin-left: -1.0458984375em;
color: rgb(2, 2, 2);
}
.icon-gps_signal_high .path10:before {
content: "\e91c";
margin-left: -1.0458984375em;
color: rgb(14, 157, 213);
}

Binary file not shown.

View File

@ -1,7 +0,0 @@
Open *demo.html* to see a list of all the glyphs in your font along with their codes/ligatures.
To use the generated font in desktop programs, you can install the TTF font. In order to copy the character associated with each icon, refer to the text box at the bottom right corner of each glyph in demo.html. The character inside this text box may be invisible; but it can still be copied. See this guide for more info: https://icomoon.io/docs/#local-fonts
You won't need any of the files located under the *demo-files* directory when including the generated font in your own projects.
You can import *selection.json* back to the IcoMoon app using the *Import Icons* button (or via Main Menu → Manage Projects) to retrieve your icon selection.

View File

@ -1,152 +0,0 @@
body {
padding: 0;
margin: 0;
font-family: sans-serif;
font-size: 1em;
line-height: 1.5;
color: #555;
background: #fff;
}
h1 {
font-size: 1.5em;
font-weight: normal;
}
small {
font-size: .66666667em;
}
a {
color: #e74c3c;
text-decoration: none;
}
a:hover, a:focus {
box-shadow: 0 1px #e74c3c;
}
.bshadow0, input {
box-shadow: inset 0 -2px #e7e7e7;
}
input:hover {
box-shadow: inset 0 -2px #ccc;
}
input, fieldset {
font-family: sans-serif;
font-size: 1em;
margin: 0;
padding: 0;
border: 0;
}
input {
color: inherit;
line-height: 1.5;
height: 1.5em;
padding: .25em 0;
}
input:focus {
outline: none;
box-shadow: inset 0 -2px #449fdb;
}
.glyph {
font-size: 16px;
width: 15em;
padding-bottom: 1em;
margin-right: 4em;
margin-bottom: 1em;
float: left;
overflow: hidden;
}
.liga {
width: 80%;
width: calc(100% - 2.5em);
}
.talign-right {
text-align: right;
}
.talign-center {
text-align: center;
}
.bgc1 {
background: #f1f1f1;
}
.fgc1 {
color: #999;
}
.fgc0 {
color: #000;
}
p {
margin-top: 1em;
margin-bottom: 1em;
}
.mvm {
margin-top: .75em;
margin-bottom: .75em;
}
.mtn {
margin-top: 0;
}
.mtl, .mal {
margin-top: 1.5em;
}
.mbl, .mal {
margin-bottom: 1.5em;
}
.mal, .mhl {
margin-left: 1.5em;
margin-right: 1.5em;
}
.mhmm {
margin-left: 1em;
margin-right: 1em;
}
.mls {
margin-left: .25em;
}
.ptl {
padding-top: 1.5em;
}
.pbs, .pvs {
padding-bottom: .25em;
}
.pvs, .pts {
padding-top: .25em;
}
.unit {
float: left;
}
.unitRight {
float: right;
}
.size1of2 {
width: 50%;
}
.size1of1 {
width: 100%;
}
.clearfix:before, .clearfix:after {
content: " ";
display: table;
}
.clearfix:after {
clear: both;
}
.hidden-true {
display: none;
}
.textbox0 {
width: 3em;
background: #f1f1f1;
padding: .25em .5em;
line-height: 1.5;
height: 1.5em;
}
#testDrive {
display: block;
padding-top: 24px;
line-height: 1.5;
}
.fs0 {
font-size: 16px;
}
.fs1 {
font-size: 32px;
}

View File

@ -1,30 +0,0 @@
if (!('boxShadow' in document.body.style)) {
document.body.setAttribute('class', 'noBoxShadow');
}
document.body.addEventListener("click", function(e) {
var target = e.target;
if (target.tagName === "INPUT" &&
target.getAttribute('class').indexOf('liga') === -1) {
target.select();
}
});
(function() {
var fontSize = document.getElementById('fontSize'),
testDrive = document.getElementById('testDrive'),
testText = document.getElementById('testText');
function updateTest() {
testDrive.innerHTML = testText.value || String.fromCharCode(160);
if (window.icomoonLiga) {
window.icomoonLiga(testDrive);
}
}
function updateSize() {
testDrive.style.fontSize = fontSize.value + 'px';
}
fontSize.addEventListener('change', updateSize, false);
testText.addEventListener('input', updateTest, false);
testText.addEventListener('change', updateTest, false);
updateSize();
}());

View File

@ -1,80 +0,0 @@
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>IcoMoon Demo</title>
<meta name="description" content="An Icon Font Generated By IcoMoon.io">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="demo-files/demo.css">
<link rel="stylesheet" href="style.css"></head>
<body>
<div class="bgc1 clearfix">
<h1 class="mhmm mvm"><span class="fgc1">Font Name:</span> icomoon <small class="fgc1">(Glyphs:&nbsp;3)</small></h1>
</div>
<div class="clearfix mhl ptl">
<h1 class="mvm mtn fgc1">Grid Size: Unknown</h1>
<div class="glyph fs1">
<div class="clearfix bshadow0 pbs">
<span class="icon-gps_signal_low"><span class="path1"></span><span class="path2"></span><span class="path3"></span><span class="path4"></span><span class="path5"></span><span class="path6"></span><span class="path7"></span><span class="path8"></span><span class="path9"></span><span class="path10"></span><span class="path11"></span><span class="path12"></span><span class="path13"></span><span class="path14"></span><span class="path15"></span><span class="path16"></span><span class="path17"></span><span class="path18"></span><span class="path19"></span></span>
<span class="mls"> icon-gps_signal_low</span>
</div>
<fieldset class="fs0 size1of1 clearfix hidden-false">
<input type="text" readonly value="e900" class="unit size1of2" />
<input type="text" maxlength="1" readonly value="&#xe900;" class="unitRight size1of2 talign-right" />
</fieldset>
<div class="fs0 bshadow0 clearfix hidden-true">
<span class="unit pvs fgc1">liga: </span>
<input type="text" readonly value="" class="liga unitRight" />
</div>
</div>
<div class="glyph fs1">
<div class="clearfix bshadow0 pbs">
<span class="icon-gps_signal_middle"><span class="path1"></span><span class="path2"></span><span class="path3"></span><span class="path4"></span><span class="path5"></span><span class="path6"></span><span class="path7"></span><span class="path8"></span><span class="path9"></span><span class="path10"></span></span>
<span class="mls"> icon-gps_signal_middle</span>
</div>
<fieldset class="fs0 size1of1 clearfix hidden-false">
<input type="text" readonly value="e913" class="unit size1of2" />
<input type="text" maxlength="1" readonly value="&#xe913;" class="unitRight size1of2 talign-right" />
</fieldset>
<div class="fs0 bshadow0 clearfix hidden-true">
<span class="unit pvs fgc1">liga: </span>
<input type="text" readonly value="" class="liga unitRight" />
</div>
</div>
<div class="glyph fs1">
<div class="clearfix bshadow0 pbs">
<span class="icon-gps_signal_high"><span class="path1"></span><span class="path2"></span><span class="path3"></span><span class="path4"></span><span class="path5"></span><span class="path6"></span><span class="path7"></span><span class="path8"></span><span class="path9"></span><span class="path10"></span><span class="path11"></span></span>
<span class="mls"> icon-gps_signal_high</span>
</div>
<fieldset class="fs0 size1of1 clearfix hidden-false">
<input type="text" readonly value="e91d" class="unit size1of2" />
<input type="text" maxlength="1" readonly value="&#xe91d;" class="unitRight size1of2 talign-right" />
</fieldset>
<div class="fs0 bshadow0 clearfix hidden-true">
<span class="unit pvs fgc1">liga: </span>
<input type="text" readonly value="" class="liga unitRight" />
</div>
</div>
</div>
<!--[if gt IE 8]><!-->
<div class="mhl clearfix mbl">
<h1>Font Test Drive</h1>
<label>
Font Size: <input id="fontSize" type="number" class="textbox0 mbm"
min="8" value="48" />
px
</label>
<input id="testText" type="text" class="phl size1of1 mvl"
placeholder="Type some text to test..." value=""/>
<div id="testDrive" class="icon-" style="font-family: icomoon">&nbsp;
</div>
</div>
<!--<![endif]-->
<div class="bgc1 clearfix">
<p class="mhl">Generated by <a href="https://icomoon.io/app">IcoMoon</a></p>
</div>
<script src="demo-files/demo.js"></script>
</body>
</html>

View File

@ -1,50 +0,0 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
<svg xmlns="http://www.w3.org/2000/svg">
<metadata>Generated by IcoMoon</metadata>
<defs>
<font id="icomoon" horiz-adv-x="1024">
<font-face units-per-em="1024" ascent="960" descent="-64" />
<missing-glyph horiz-adv-x="1024" />
<glyph unicode="&#x20;" horiz-adv-x="512" d="" />
<glyph unicode="&#xe900;" horiz-adv-x="1071" d="M4.697 588.917c0 123.694 0 245.040 0 366.385 356.991 0 713.982 0 1070.972 0 0-341.333 0-682.667 0-1024-356.991 0-713.982 0-1070.972 0 0 218.422 0 436.844 0 657.615zM54.676 364.512c8.121-29.927 13.467-60.954 24.814-89.603 73.114-184.603 210.166-292.309 405.758-315.852 266.402-32.066 503.041 151.136 541.779 416.589 26.568 182.062-36.314 334.611-177.010 450.896-110.474 91.306-241.173 124.942-383.508 103.957-127.29-18.767-232.431-79.646-312.212-180.371-88.664-111.94-121.433-240.139-99.62-385.616z" />
<glyph unicode="&#xe901;" horiz-adv-x="1071" d="M54.001 366.477c-21.138 143.512 11.63 271.711 100.295 383.651 79.781 100.726 184.922 161.605 312.212 180.371 142.335 20.985 273.035-12.651 383.508-103.957 140.696-116.285 203.578-268.833 177.010-450.896-38.737-265.453-275.376-448.655-541.779-416.589-195.592 23.543-332.644 131.249-405.758 315.852-11.347 28.649-16.693 59.676-25.488 91.568zM493.216 377.045c0 0-1.199-1.237-4.108-3.501-15.138-15.638-30.275-31.276-47.497-49.623-6.517-6.27-13.034-12.539-22.199-19.893-20.165-20.664-40.33-41.329-62.409-64.715-4.767-4.63-9.535-9.261-17.027-14.967-17.098-17.578-34.196-35.156-53.412-55.506-3.397-3.166-6.794-6.333-12.766-10.681-15.251-15.398-30.503-30.797-45.735-46.176 161.781-159.584 456.337-177.301 643.164 16.003 193.416 200.12 149.585 488.401 5.346 626.396-56.661-54.941-113.278-109.839-171.898-167.468-9.587-9.377-19.174-18.754-31.401-29.287-17.031-17.498-34.062-34.995-53.17-55.23-4.967-4.743-9.934-9.485-17.489-15.395-18.525-19.010-37.051-38.020-57.67-59.748-6.536-6.316-13.073-12.632-21.576-19.475-1.581-2.108-3.163-4.216-6.521-9.011-6.080-5.961-12.16-11.922-20.487-18.182-1.455-0.761-2.314-1.951-2.211-3.625 0 0 0.034-0.37-0.935 0.085zM457.349 388.087c0 0-0.712-0.977 2.256 1.469 31.315 31.739 62.63 63.477 97.020 96.279 4.189 4.859 8.378 9.717 15.274 15.85 25.278 25.754 50.555 51.508 78.782 78.569 8.838 9.388 17.677 18.776 29.227 29.44 57.003 56.719 114.006 113.437 173.154 172.291-127.777 109.386-271.643 148.812-430.725 105.427-177.884-48.513-292.038-167.261-331.848-348.107-33.559-152.449 8.712-287.734 114.173-407.397 13.331 16.326 24.48 29.98 38.474 44.797 3.774 2.991 7.548 5.982 14.040 10.238 18.934 19.42 37.868 38.839 59.863 59.322 4.17 4.831 8.339 9.662 15.251 15.732 41.798 42.129 83.596 84.258 125.060 126.090z" />
<glyph unicode="&#xe902;" horiz-adv-x="1071" d="M647.731 578.948c-25.278-25.754-50.555-51.508-78.41-76.23-85.383 1.219-168.198 2.262-250.989 1.289-54.246-0.638-104.545-39.561-115.433-92.715-6.635-32.394-3.208-66.74-5.864-100.084-4.093-51.377 6.421-97.585 43.256-135.665-11.149-13.654-22.298-27.308-35.629-43.635-105.46 119.663-147.732 254.948-114.173 407.397 39.81 180.846 153.964 299.594 331.848 348.107 159.081 43.385 302.948 3.959 430.725-105.427-59.149-58.854-116.151-115.572-175.322-171.472-52.719 33.54-106.686 44.272-167.197 35.86-49.736-6.914-90.483-28.306-128.083-58.454-11.706-9.386-24.523-22.034-10.979-38.809 12.334-15.278 25.445-6.171 35.552 3.391 47.505 44.942 103.381 65.857 167.97 54.371 25.104-4.464 48.535-18.337 72.729-27.924z" />
<glyph unicode="&#xe903;" horiz-adv-x="1071" d="M706.678 589.643c56.617 54.898 113.234 109.796 169.895 164.737 144.239-137.995 188.070-426.275-5.346-626.396-186.827-193.303-481.382-175.587-643.164-16.003 15.232 15.379 30.484 30.777 48.077 45.472 16.687-3.827 31.019-9.601 45.377-9.666 148.48-0.671 296.967-0.883 445.447-0.224 69.745 0.309 124.21 55.525 125.408 125.287 0.577 33.594 0.331 67.208 0.085 100.81-0.56 76.639-54.843 130.298-131.996 130.73-46.094 0.258-92.187 0.496-138.281 0.743 17.031 17.498 34.062 34.995 53.601 52.013 6.812-3.35 10.774-7.623 15.497-8.774 7.82-1.905 21.142-5.075 23.229-1.883 4.929 7.54 6.615 18.719 5.65 28.014-0.567 5.454-8.732 10.12-13.479 15.14z" />
<glyph unicode="&#xe904;" horiz-adv-x="1071" d="M288.683 171.611c17.098 17.578 34.196 35.156 54.055 52.173 25.691-0.936 49.255-4.88 71.414-0.931 43.88 7.82 43.56 9.622 43.559 53.704 0 12.444 1.298 25.097-0.649 37.229-0.782 4.871-8.698 8.597-13.367 12.844 15.138 15.638 30.275 31.276 47.258 47.226 1.845 0.312 3.424 1.259 3.58-1.081 0.156-51.265 0.156-100.191 0.156-149.031 10.116 0 17.547 0 26.374 0 0 12.799 0 24.391 0 35.982 0 12.228 0 24.456 0 35.717 22.424 2.396 42.894 2.377 62.18 7.144 31.628 7.817 48.024 32.983 47.054 66.477-0.906 31.284-17.309 50.117-50.913 57.192-10.573 2.226-21.551 2.53-32.344 3.714 18.525 19.010 37.051 38.020 58.45 56.409 55.319-0.696 107.77-0.285 160.207-0.974 60.482-0.795 106.686-46.886 107.85-107.17 0.605-31.3 0.184-62.62 0.12-93.931-0.152-73.981-44.235-118.075-118.264-118.112-138.552-0.068-277.104-0.207-415.655 0.22-17.027 0.052-34.044 3.385-51.065 5.197zM685.514 423.507c-9.389-11.917-22.983-22.491-27.307-36.027-9.514-29.78 6.364-55.983 37.202-65.543 19.283-5.977 39.588-8.571 59.224-13.52 14.668-3.697 25.308-11.705 25.972-28.854 0.681-17.589-8.526-28.124-23.865-33.383-8.692-2.98-18.715-5.807-27.408-4.348-24.887 4.178-49.4 10.58-78.679 17.143 5.071-9.826 7.662-24.504 15.266-27.874 29.575-13.11 61.062-18.449 93.416-8.941 29.759 8.745 48.729 31.477 48.58 58.593-0.153 27.827-15.741 45.238-49.196 53.785-15.864 4.053-32.090 6.666-48.039 10.411-17.044 4.002-31.058 15.2-27.148 32.21 2.68 11.657 15.84 25.504 27.342 29.37 14.379 4.833 32.251 2.436 47.889-0.59 13.633-2.638 26.26-10.48 39.331-16.022 1.731 1.056 3.462 2.112 5.193 3.168-4.75 9.855-7.118 25.43-14.664 28.573-32.18 13.401-65.977 19.331-103.108 1.85z" />
<glyph unicode="&#xe905;" horiz-adv-x="1071" d="M553.549 484.772c-31.315-31.739-62.63-63.477-95.517-94.277 4.048 19.731-3.166 30.462-22.079 34.436-11.364 2.388-22.431 6.401-33.866 8.2-45.115 7.097-87.371-11.223-106.921-45.699-22.276-39.283-18.799-104.031 7.602-135.059 2.749-3.23 7.425-4.821 11.207-7.172-18.934-19.42-37.868-38.839-58.357-57.246-21.783 25.020-39.474 50.197-39.474 83.5 0.001 36.655-0.838 73.334 0.222 109.958 1.634 56.438 47.027 102.894 103.262 103.688 77.956 1.101 155.944-0.109 233.919-0.329z" />
<glyph unicode="&#xe906;" horiz-adv-x="1071" d="M287.624 170.225c18.081-0.427 35.098-3.759 52.124-3.812 138.55-0.427 277.103-0.289 415.655-0.22 74.029 0.037 118.112 44.131 118.264 118.112 0.064 31.311 0.485 62.632-0.12 93.931-1.164 60.285-47.368 106.376-107.85 107.17-52.437 0.689-104.888 0.278-158.913 1.557 3.386 5.947 8.354 10.689 14.359 16.801 47.132 1.122 93.226 0.884 139.32 0.626 77.153-0.432 131.437-54.090 131.996-130.73 0.245-33.602 0.492-67.216-0.085-100.81-1.198-69.762-55.663-124.978-125.408-125.287-148.48-0.659-296.967-0.447-445.447 0.224-14.358 0.065-28.691 5.839-44.090 10.257 2.342 4.461 5.739 7.628 10.196 12.179z" />
<glyph unicode="&#xe907;" horiz-adv-x="1071" d="M649.206 579.601c-25.668 8.934-49.099 22.807-74.203 27.271-64.589 11.486-120.465-9.429-167.97-54.371-10.107-9.562-23.218-18.669-35.552-3.391-13.543 16.775-0.727 29.423 10.979 38.809 37.6 30.148 78.346 51.54 128.083 58.454 60.511 8.412 114.478-2.32 165.841-36.498-8.027-10.846-16.865-20.234-27.178-30.275z" />
<glyph unicode="&#xe908;" horiz-adv-x="1071" d="M457.684 388.383c-41.798-42.129-83.596-84.258-127.487-125.542-26.108 30.178-27.734 63.581-17.936 98.031 8.9 31.292 33.578 51.725 65.771 48.569 26.979-2.645 53.133-13.717 79.652-21.058z" />
<glyph unicode="&#xe909;" horiz-adv-x="1071" d="M555.087 485.304c-79.512-0.311-157.501 0.898-235.457-0.203-56.235-0.794-101.629-47.25-103.262-103.688-1.060-36.624-0.222-73.304-0.222-109.958-0.001-33.303 17.69-58.48 38.115-84.132-3.578-4.636-7.352-7.627-12.548-11.199-38.258 37.499-48.771 83.707-44.678 135.084 2.656 33.344-0.771 67.69 5.864 100.084 10.887 53.154 61.187 92.077 115.433 92.715 82.792 0.973 165.607-0.070 249.637-1.926-2.965-6.528-7.154-11.386-12.881-16.777z" />
<glyph unicode="&#xe90a;" horiz-adv-x="1071" d="M545.992 428.612c11.84 0.175 22.818-0.129 33.391-2.355 33.604-7.075 50.007-25.908 50.913-57.192 0.97-33.494-15.425-58.66-47.054-66.477-19.286-4.767-39.756-4.748-62.18-7.144 0-11.261 0-23.489 0-35.717 0-11.592 0-23.183 0-35.982-8.826 0-16.258 0-26.374 0 0 48.84 0 97.766-0.001 149.426-0.001 2.734-0.505 3.42-0.505 3.42s-0.034 0.37 1.059 0.011c1.85 1.188 2.607 2.735 3.365 4.282 6.080 5.961 12.16 11.922 20.248 17.625 2.008-25.676 2.008-51.094 2.008-77.932 17.043 0.788 31.148 0.143 44.792 2.347 26.442 4.272 39.396 20.134 38.472 44.438-0.849 22.312-15.605 35.775-42.153 38.187-12.196 1.108-24.425 1.849-36.638 2.756 6.536 6.316 13.073 12.632 20.656 20.308z" />
<glyph unicode="&#xe90b;" horiz-adv-x="1071" d="M457.516 388.235c-26.352 7.489-52.505 18.561-79.484 21.206-32.194 3.157-56.871-17.277-65.771-48.569-9.799-34.449-8.172-67.852 16.564-98.65-3.448-6.296-7.618-11.127-13.318-16.489-5.312 1.82-9.989 3.41-12.737 6.64-26.401 31.028-29.878 95.776-7.602 135.059 19.55 34.476 61.806 52.796 106.921 45.699 11.434-1.799 22.502-5.812 33.866-8.2 18.913-3.974 26.127-14.705 20.595-35.66 0.088-2.163 0.8-1.185 0.968-1.037z" />
<glyph unicode="&#xe90c;" horiz-adv-x="1071" d="M524.353 408.041c13.198-0.644 25.427-1.385 37.622-2.493 26.548-2.411 41.304-15.875 42.153-38.187 0.924-24.304-12.030-40.166-38.472-44.438-13.644-2.204-27.749-1.559-44.792-2.347 0 26.838 0 52.255-1.119 79.275 0.462 3.71 2.043 5.818 4.608 8.19z" />
<glyph unicode="&#xe90d;" horiz-adv-x="1071" d="M442.653 325.275c5.711-2.892 13.627-6.618 14.409-11.489 1.947-12.132 0.649-24.785 0.649-37.229 0.001-44.083 0.322-45.885-43.559-53.704-22.158-3.949-45.723-0.005-70.051 1.469 3.368 5.73 8.136 10.36 15.853 16.702 19.909 2.381 37.037 1.881 53.745 4.292 6.746 0.974 18.282 9.024 17.833 12.635-1.964 15.793 11.32 35.329-9.472 47.16 6.517 6.27 13.034 12.539 20.593 20.164z" />
<glyph unicode="&#xe90e;" horiz-adv-x="1071" d="M420.736 304.57c22.116-11.289 8.832-30.825 10.796-46.618 0.449-3.61-11.087-11.661-17.833-12.635-16.708-2.411-33.836-1.911-52.788-2.931 18.172 20.313 38.337 40.978 59.825 62.184z" />
<glyph unicode="&#xe90f;" horiz-adv-x="1071" d="M705.677 588.278c5.749-3.655 13.914-8.32 14.481-13.775 0.965-9.296-0.721-20.474-5.65-28.014-2.087-3.192-15.409-0.021-23.229 1.883-4.723 1.15-8.685 5.423-14.177 9.351 8.399 10.435 17.986 19.812 28.575 30.555z" />
<glyph unicode="&#xe910;" horiz-adv-x="1071" d="M497.484 380.734c0.366-1.398-0.391-2.945-2.425-4.106-1.012 2.006-0.153 3.196 2.425 4.106z" />
<glyph unicode="&#xe911;" horiz-adv-x="1071" d="M493.7 376.817c0.484-0.227 0.988-0.913 0.833-1.308s-1.735-1.341-2.125-0.521c-0.39 0.82 0.808 2.057 1.292 1.829z" />
<glyph unicode="&#xe912;" horiz-adv-x="1071" d="M687.197 424.213c35.449 16.776 69.246 10.846 101.426-2.555 7.546-3.142 9.914-18.717 14.664-28.573-1.731-1.056-3.462-2.112-5.193-3.168-13.071 5.543-25.698 13.385-39.331 16.022-15.639 3.026-33.51 5.423-47.889 0.59-11.501-3.866-24.662-17.713-27.342-29.37-3.91-17.009 10.104-28.208 27.148-32.21 15.949-3.745 32.176-6.358 48.039-10.411 33.454-8.548 49.042-25.958 49.196-53.785 0.149-27.116-18.82-49.848-48.58-58.593-32.354-9.507-63.842-4.168-93.416 8.941-7.604 3.37-10.195 18.049-15.266 27.874 29.28-6.563 53.793-12.965 78.679-17.143 8.693-1.459 18.716 1.368 27.408 4.348 15.339 5.259 24.545 15.794 23.865 33.383-0.664 17.149-11.304 25.157-25.972 28.854-19.636 4.949-39.941 7.543-59.224 13.52-30.839 9.56-46.717 35.762-37.202 65.543 4.324 13.535 17.918 24.109 28.99 36.732z" />
<glyph unicode="&#xe913;" horiz-adv-x="1071" d="M601.248-68.697c-200.416 0-398.483 0-596.55 0 0 341.333 0 682.667 0 1024 356.991 0 713.982 0 1070.972 0 0-341.333 0-682.666 0-1024-157.358 0-314.716 0-474.422 0zM992.795 289.415c26.319 76.179 33.921 154.172 18.963 233.408-47.787 253.137-266.071 416.098-522.563 391.022-277.053-27.086-471.494-299.456-412.78-571.963 40.134-186.274 229.787-382.491 455.627-363.915 38.042 3.129 77.887-4.194 114.39 4.212 168.807 38.872 283.272 142.1 346.364 307.236z" />
<glyph unicode="&#xe914;" horiz-adv-x="1071" d="M992.239 287.654c-62.537-163.374-177.001-266.603-345.809-305.475-36.502-8.406-76.348-1.083-114.39-4.212-225.84-18.576-415.492 177.641-455.627 363.915-58.714 272.507 135.727 544.877 412.78 571.963 256.493 25.076 474.776-137.885 522.563-391.022 14.958-79.236 7.356-157.229-19.519-235.17zM664.661 147.327c34.442 0.014 68.894-0.519 103.322 0.157 68.659 1.348 123.080 55.748 124.381 124.386 0.682 35.994 0.692 72.023-0.003 108.016-1.326 68.636-55.819 123.928-124.405 124.27-148.722 0.741-297.452 0.743-446.174-0.001-68.563-0.343-123.086-55.742-124.408-124.298-0.634-32.864-0.22-65.75-0.12-98.626 0.245-80.241 53.727-133.784 133.948-133.873 109.587-0.121 219.175-0.031 333.459-0.031zM682.018 710.766c-58.826 19.859-118.173 30.421-180.832 19.534-68.359-11.877-127.277-40.675-177.552-87.976-10.499-9.878-22.386-19.995-6.634-34.441 13.496-12.377 25.599-7.537 37.361 4.155 89.111 88.585 230.179 104.762 339.503 45.382 25.276-13.729 47.029-33.919 70.515-50.983 10.067-7.314 20.821-8.483 29.222 1.699 8.968 10.869 5.112 20.28-4.318 30.329-29.478 31.414-65.62 52.506-107.267 72.301zM643.5 628.863c-28.682 7.041-57.115 18.587-86.096 20.186-60.451 3.335-115.995-13.125-163.652-53.267-26.11-21.993-34.912-35.592-22.149-46.667 22.561-19.577 33.74 3.52 47.501 15.060 37.726 31.635 82.827 48.181 130.31 46.809 53.545-1.548 101.016-25.184 141.615-61.611 5.127-4.6 16.988-1.697 25.729-2.27 0.367 10.311 5.19 25.976 0.338 30.014-22.038 18.339-46.802 33.401-73.596 51.747z" />
<glyph unicode="&#xe915;" horiz-adv-x="1071" d="M662.312 147.327c-111.936 0-221.523-0.091-331.111 0.031-80.221 0.089-133.702 53.632-133.948 133.873-0.1 32.876-0.514 65.762 0.12 98.626 1.322 68.556 55.846 123.955 124.408 124.298 148.722 0.745 297.452 0.743 446.174 0.001 68.586-0.342 123.079-55.634 124.405-124.27 0.695-35.994 0.685-72.022 0.003-108.016-1.301-68.638-55.722-123.038-124.381-124.386-34.428-0.676-68.881-0.143-105.671-0.157zM368.775 166.181c130.586 0.001 261.173-0.164 391.759 0.071 67.376 0.121 112.735 45.978 113.104 113.691 0.179 32.841 0.547 65.694-0.096 98.524-1.159 59.195-46.848 106.465-105.64 106.775-148.567 0.785-297.144 0.749-445.711 0.025-57.945-0.282-104.202-46.517-105.834-104.128-1.040-36.722-0.916-73.515-0.024-110.244 1.173-48.284 33.133-89.407 80.327-100.115 21.711-4.926 44.915-3.271 72.114-4.599z" />
<glyph unicode="&#xe916;" horiz-adv-x="1071" d="M683.667 709.907c39.997-18.936 76.139-40.028 105.617-71.442 9.43-10.049 13.285-19.46 4.318-30.329-8.401-10.182-19.155-9.012-29.222-1.699-23.486 17.063-45.239 37.254-70.515 50.983-109.325 59.38-250.392 43.203-339.503-45.382-11.762-11.692-23.865-16.532-37.361-4.155-15.752 14.446-3.865 24.563 6.634 34.441 50.274 47.301 109.193 76.099 177.552 87.976 62.658 10.887 122.006 0.326 182.481-20.393z" />
<glyph unicode="&#xe917;" horiz-adv-x="1071" d="M645.005 627.811c25.288-17.293 50.053-32.356 72.090-50.695 4.853-4.038 0.030-19.703-0.338-30.014-8.741 0.573-20.601-2.331-25.729 2.27-40.6 36.427-88.071 60.063-141.615 61.611-47.484 1.373-92.584-15.174-130.31-46.809-13.761-11.54-24.94-34.636-47.501-15.060-12.763 11.075-3.961 24.674 22.149 46.667 47.658 40.143 103.201 56.602 163.652 53.267 28.982-1.599 57.415-13.145 87.602-21.238z" />
<glyph unicode="&#xe918;" horiz-adv-x="1071" d="M366.439 166.181c-24.863 1.329-48.067-0.327-69.778 4.599-47.194 10.708-79.155 51.831-80.327 100.115-0.892 36.73-1.016 73.522 0.024 110.244 1.632 57.611 47.889 103.846 105.834 104.128 148.568 0.724 297.144 0.76 445.711-0.025 58.792-0.31 104.481-47.581 105.64-106.775 0.642-32.83 0.275-65.683 0.096-98.524-0.369-67.713-45.728-113.57-113.104-113.691-130.586-0.235-261.173-0.070-394.095-0.071zM410.844 302.353c6.827-0.309 13.654-0.619 22.056-1 0-14.41 0.614-27.571-0.338-40.618-0.327-4.485-3.472-10.549-7.185-12.728-40.471-23.743-102.254-0.921-113.308 44.194-5.174 21.115-4.564 45.116-0.526 66.677 6.082 32.478 33.028 52.991 66.314 50.82 26.181-1.708 51.959-9.592 78.275-14.804 5.308 16.108-3.216 24.293-20.19 29.897-58.040 19.164-113.328 6.091-138.535-34.017-26.323-41.883-21.286-111.849 11.512-144.489 36.008-35.836 89.26-35.018 139.289-12.143 3.876 1.772 8.115 7.772 8.234 11.92 0.748 26.179 0.379 52.389 0.379 78.263-27.606 0-52.162 0-77.875 0 0.878-8.232 1.576-14.768 2.345-21.973 9.523 0 17.283 0 29.554 0zM657.369 386.793c-1.997-41.811 9.834-57.724 50.995-67.96 17.323-4.308 35.697-5.977 51.802-12.971 8.886-3.859 18.649-15.769 19.638-24.952 1.019-9.461-5.876-22.55-13.498-29.368-7.288-6.519-20.319-10.495-30.202-9.485-26.452 2.705-52.568 8.684-81.127 13.773 1.527-5.9 0.893-18.391 6.62-23.030 27.401-22.194 96.867-19.471 124.106 3.414 16.705 14.035 24.667 31.973 20.79 54.121-3.782 21.604-17.421 34.603-37.705 40.392-17.18 4.903-34.768 8.413-52.239 12.252-20.136 4.424-36.857 13.551-34.112 36.974 2.673 22.812 21.442 31.392 41.201 29.732 24.914-2.094 49.415-9.105 74.859-14.146 5.42 15.393 0.070 27.113-21.212 30.435-11.497 1.795-22.617 6.101-34.125 7.704-38.083 5.303-68.182-10.241-85.791-46.885zM621.648 398.813c-33.585 44.783-81.323 26.053-124.295 30.444 0-70.19 0-137.675 0-205.577 8.016 0 14.624 0 23.448 0 0 24.832 0 48.61 0 72.033 97.387 10.277 124.705 37.339 100.847 103.1z" />
<glyph unicode="&#xe919;" horiz-adv-x="1071" d="M408.589 302.353c-10.016 0-17.776 0-27.299 0-0.769 7.204-1.466 13.74-2.345 21.973 25.713 0 50.269 0 77.875 0 0-25.874 0.369-52.085-0.379-78.263-0.118-4.148-4.358-10.148-8.234-11.92-50.029-22.875-103.28-23.693-139.289 12.143-32.798 32.641-37.836 102.606-11.512 144.489 25.207 40.108 80.495 53.181 138.535 34.017 16.974-5.605 25.498-13.789 20.19-29.897-26.315 5.212-52.093 13.096-78.275 14.804-33.286 2.171-60.232-18.342-66.314-50.82-4.038-21.56-4.648-45.561 0.526-66.677 11.054-45.115 72.837-67.938 113.308-44.194 3.714 2.179 6.858 8.243 7.185 12.728 0.952 13.047 0.338 26.208 0.338 40.618-8.402 0.381-15.229 0.69-24.311 1z" />
<glyph unicode="&#xe91a;" horiz-adv-x="1071" d="M657.702 388.693c17.275 34.745 47.374 50.289 85.457 44.986 11.509-1.603 22.628-5.909 34.125-7.704 21.282-3.322 26.632-15.042 21.212-30.435-25.444 5.041-49.944 12.052-74.859 14.146-19.759 1.66-38.528-6.92-41.201-29.732-2.745-23.423 13.976-32.549 34.112-36.974 17.471-3.839 35.059-7.348 52.239-12.252 20.284-5.789 33.923-18.788 37.705-40.392 3.877-22.148-4.085-40.086-20.79-54.121-27.239-22.885-96.705-25.608-124.106-3.414-5.727 4.639-5.093 17.13-6.62 23.030 28.558-5.089 54.675-11.068 81.127-13.773 9.883-1.011 22.914 2.966 30.202 9.485 7.622 6.818 14.516 19.906 13.498 29.368-0.989 9.183-10.752 21.093-19.638 24.952-16.105 6.994-34.478 8.663-51.802 12.971-41.16 10.236-52.992 26.149-50.661 69.859z" />
<glyph unicode="&#xe91b;" horiz-adv-x="1071" d="M622.778 397.345c22.728-64.292-4.59-91.354-101.976-101.631 0-23.423 0-47.201 0-72.033-8.824 0-15.432 0-23.448 0 0 67.902 0 135.386 0 205.577 42.971-4.391 90.71 14.339 125.424-31.912zM604.49 372.905c-12.204 31.237-39.004 40.681-82.929 29.447 0-26.401 0-52.698 0-78.832 58.152-8.154 79.432 3.716 82.929 49.386z" />
<glyph unicode="&#xe91c;" horiz-adv-x="1071" d="M604.637 371.092c-3.644-43.857-24.924-55.727-83.076-47.573 0 26.134 0 52.432 0 78.832 43.925 11.234 70.725 1.79 83.076-31.26z" />
<glyph unicode="&#xe91d;" horiz-adv-x="1071" d="M634.128-68.697c-211.376 0-420.404 0-629.431 0 0 341.333 0 682.667 0 1024 356.991 0 713.982 0 1070.972 0 0-341.333 0-682.666 0-1024-146.398 0-292.795 0-441.541 0zM1018.959 458.531c-2.949 21.188-6.17 42.343-8.797 63.572-7.842 63.369-29.651 122.3-64.221 175.103-52.965 80.9-122.179 144.268-212.401 183.329-93.652 40.546-190.908 50.996-289.73 30.777-107.563-22.007-197.921-76.162-268.048-162.18-91.023-111.65-127.203-239.557-104.177-380.846 18.831-115.543 74.43-213.335 166.396-288.16 104.879-85.331 223.578-123.823 359.421-107.232 127.561 15.579 230.911 75.57 312.898 171.565 75.519 88.421 105.49 194.946 108.657 314.073z" />
<glyph unicode="&#xe91e;" horiz-adv-x="1071" d="M1019.106 456.382c-3.315-116.979-33.286-223.503-108.805-311.924-81.987-95.995-185.338-155.986-312.898-171.565-135.842-16.591-254.542 21.901-359.421 107.232-91.966 74.825-147.566 172.617-166.396 288.16-23.027 141.289 13.153 269.197 104.177 380.846 70.127 86.018 160.485 140.173 268.048 162.18 98.822 20.219 196.077 9.769 289.73-30.777 90.221-39.061 159.436-102.428 212.401-183.329 34.569-52.803 56.378-111.734 64.221-175.103 2.627-21.228 5.847-42.383 8.944-65.72zM799.743 152.021c62.703 22.243 92.613 64.375 92.766 130.838 0.074 32.063 0.444 64.135-0.102 96.189-1.189 69.756-55.905 124.893-125.817 125.173-147.803 0.59-295.611 0.59-443.413 0-69.904-0.279-124.673-55.467-125.831-125.172-0.533-32.055-0.164-64.126-0.096-96.189 0.174-82.015 53.086-135.436 134.513-135.5 141.549-0.11 283.097-0.132 424.645 0.139 13.163 0.025 26.322 2.415 43.334 4.522zM845.943 669.217c19.664 10.476 16.044 24.67 4.691 38.181-6.827 8.124-16.424 13.898-24.667 20.858-102.658 86.687-220.311 118.998-352.495 95.284-83.844-15.042-156.91-52.061-217.902-112.387-11.64-11.513-17.353-25.465-7.901-36.833 10.802-12.99 25.375-4.53 36.919 4.494 1.834 1.434 3.342 3.283 5.018 4.923 60.514 59.235 134.53 92.844 217.163 101.47 109.754 11.457 209.174-18.078 293.803-91.941 11.899-10.386 27.653-16.356 45.371-24.049zM775.039 652.364c-78.335 64.668-166.752 92.678-268.706 78.131-71.31-10.174-131.594-40.482-183.638-89.055-10.127-9.451-20.415-19.409-6.217-33.024 13.592-13.034 25.731-7.147 37.973 3.565 13.894 12.158 27.903 24.545 43.376 34.475 61.476 39.454 128.107 52.37 200.921 41.953 56.244-8.047 104.338-30.4 146.366-67.287 13.962-12.254 29.686-30.189 46.735-14.515 19.369 17.807-2.919 30.777-16.81 45.756zM399.999 546.8c4.109 3.525 8.218 7.050 12.327 10.576 55.468 47.602 118.517 67.82 188.788 42.195 32.254-11.762 60.401-34.606 90.859-51.624 5.929-3.313 16.294-6.3 20.4-3.423 5.732 4.015 9.759 13.546 10.223 20.983 0.345 5.545-4.97 12.755-9.708 17.108-71.283 65.488-154.002 84.582-245.127 52.948-31.757-11.024-60.431-32.244-88.491-51.721-7.438-5.163-7.376-21.133-10.757-32.141 9.337-1.91 18.674-3.821 31.487-4.902z" />
<glyph unicode="&#xe91f;" horiz-adv-x="1071" d="M797.817 151.614c-15.087-1.699-28.245-4.090-41.408-4.115-141.548-0.271-283.097-0.249-424.645-0.139-81.427 0.063-134.339 53.485-134.513 135.5-0.068 32.063-0.437 64.134 0.096 96.189 1.159 69.705 55.927 124.893 125.831 125.172 147.803 0.59 295.611 0.59 443.413 0 69.912-0.279 124.629-55.417 125.817-125.173 0.546-32.054 0.176-64.126 0.102-96.189-0.153-66.463-30.063-108.596-94.692-131.246zM462.679 166.18c100.986 0.005 201.975-0.427 302.958 0.18 60.49 0.363 106.842 46.898 107.908 107.238 0.608 34.434 0.52 68.894 0.025 103.332-0.887 61.658-47.25 108.284-109.092 108.475-146.39 0.453-292.783 0.452-439.173 0.001-61.838-0.191-108.207-46.807-109.117-108.458-0.496-33.655-0.422-67.327-0.021-100.984 0.751-63.060 47.040-109.14 110.297-109.701 43.836-0.389 87.678-0.079 136.214-0.082z" />
<glyph unicode="&#xe920;" horiz-adv-x="1071" d="M844.068 669.056c-15.844 7.853-31.597 13.823-43.497 24.209-84.628 73.863-184.049 103.398-293.803 91.941-82.633-8.626-156.65-42.235-217.163-101.47-1.675-1.64-3.184-3.489-5.018-4.923-11.544-9.024-26.117-17.485-36.919-4.494-9.453 11.368-3.739 25.32 7.901 36.833 60.992 60.327 134.058 97.345 217.902 112.387 132.184 23.715 249.838-8.597 352.495-95.284 8.242-6.96 17.84-12.734 24.667-20.858 11.353-13.51 14.973-27.705-6.565-38.341z" />
<glyph unicode="&#xe921;" horiz-adv-x="1071" d="M776.248 651.155c12.682-13.769 34.97-26.74 15.6-44.547-17.049-15.674-32.774 2.26-46.735 14.515-42.028 36.887-90.122 59.24-146.366 67.287-72.815 10.418-139.446-2.499-200.921-41.953-15.472-9.93-29.482-22.317-43.376-34.475-12.242-10.712-24.38-16.599-37.973-3.565-14.197 13.615-3.909 23.572 6.217 33.024 52.044 48.573 112.328 78.88 183.638 89.055 101.954 14.546 190.371-13.463 269.916-79.34z" />
<glyph unicode="&#xe922;" horiz-adv-x="1071" d="M398.261 546.385c-11.075 1.496-20.412 3.406-29.749 5.317 3.381 11.008 3.319 26.978 10.757 32.141 28.060 19.476 56.734 40.696 88.491 51.721 91.125 31.634 173.844 12.54 245.127-52.948 4.738-4.353 10.054-11.563 9.708-17.108-0.463-7.438-4.491-16.968-10.223-20.983-4.106-2.876-14.471 0.111-20.4 3.423-30.457 17.017-58.605 39.862-90.859 51.624-70.271 25.626-133.319 5.407-188.788-42.195-4.109-3.526-8.218-7.051-14.065-10.991z" />
<glyph unicode="&#xe923;" horiz-adv-x="1071" d="M460.33 166.18c-46.188 0.003-90.030-0.307-133.865 0.082-63.258 0.561-109.546 46.641-110.297 109.701-0.401 33.657-0.475 67.329 0.021 100.984 0.909 61.651 47.278 108.267 109.117 108.458 146.39 0.451 292.783 0.452 439.173-0.001 61.841-0.191 108.205-46.817 109.092-108.475 0.495-34.438 0.584-68.898-0.025-103.332-1.066-60.34-47.418-106.875-107.908-107.238-100.983-0.607-201.972-0.174-305.307-0.18zM340.633 225.826c35.799-14.349 70.394-7.23 104.144 6.899 5.113 2.141 11.149 9.453 11.386 14.62 1.171 25.462 0.532 51.008 0.532 76.842-27.198 0-51.657 0-75.875 0 0-7.697 0-13.674 0-22.485 17.769 0 34.459 0 52.007 0 0-14.544 1.262-26.438-0.504-37.863-0.961-6.217-5.759-14.609-11.061-16.943-38.518-16.957-84.093-3.123-102.989 30.044-21.968 38.559-13.994 97.141 18.296 119.752 10.837 7.589 26.101 13.677 38.802 12.783 26.576-1.871 52.794-8.84 80.39-13.943 4.744 12.517 0.763 23.549-16.791 27.935-10.55 2.636-21.136 5.176-31.792 7.328-55.339 11.175-102.859-12.441-119.261-60.624-15.491-45.51-9.434-119.357 52.716-144.345zM661.318 397.547c-12.57-40.998 1.507-66.808 42.796-77.559 18.777-4.889 38.636-6.857 56.313-14.213 8.794-3.66 18.328-16.050 19.211-25.287 0.905-9.46-6.123-22.435-13.802-29.166-7.362-6.452-20.389-10.329-30.272-9.265-26.437 2.848-52.522 8.954-81.688 14.305 2.368-7.142 2.569-19.328 8.532-23.757 27.572-20.48 90.308-19.552 118.496 0.039 18.721 13.012 28.751 30.903 26.118 54.048-2.676 23.529-16.679 38.243-39.23 44.283-19.539 5.233-39.435 9.122-59.019 14.2-15.932 4.132-26.398 14.267-26.752 31.326-0.367 17.68 11.667 26.503 26.824 31.211 6.559 2.037 14.138 3.582 20.689 2.35 22.963-4.317 45.681-9.94 71.626-15.771-2.892 8.827-3.314 22.748-8.993 25.396-36.951 17.233-99.421 26.774-130.849-22.141zM623.879 335.751c14.226 41.402 3.962 76.291-30.808 85.39-30.58 8.002-63.426 7.345-95.358 10.52 0-73.371 0-140.308 0-207.64 8.016 0 14.555 0 23.827 0 0 25.128 0 48.859 0 72.994 39.077 1.297 77.422-2.354 102.339 38.736z" />
<glyph unicode="&#xe924;" horiz-adv-x="1071" d="M338.867 226.395c-60.385 24.419-66.442 98.266-50.95 143.776 16.401 48.183 63.922 71.799 119.261 60.624 10.657-2.152 21.243-4.692 31.792-7.328 17.554-4.386 21.535-15.418 16.791-27.935-27.596 5.103-53.814 12.071-80.39 13.943-12.701 0.894-27.964-5.194-38.802-12.783-32.29-22.611-40.264-81.194-18.296-119.752 18.897-33.168 64.471-47.001 102.989-30.044 5.302 2.334 10.1 10.726 11.061 16.943 1.766 11.425 0.504 23.319 0.504 37.863-17.548 0-34.239 0-52.007 0 0 8.811 0 14.788 0 22.485 24.218 0 48.676 0 75.875 0 0-25.834 0.639-51.38-0.532-76.842-0.238-5.167-6.273-12.479-11.386-14.62-33.75-14.129-68.344-21.248-105.909-6.329z" />
<glyph unicode="&#xe925;" horiz-adv-x="1071" d="M662.091 399.241c30.656 47.221 93.125 37.68 130.076 20.448 5.679-2.648 6.101-16.569 8.993-25.396-25.945 5.831-48.663 11.454-71.626 15.771-6.551 1.232-14.13-0.312-20.689-2.35-15.157-4.708-27.191-13.531-26.824-31.211 0.354-17.060 10.82-27.195 26.752-31.326 19.584-5.079 39.48-8.967 59.019-14.2 22.551-6.040 36.554-20.754 39.23-44.283 2.633-23.145-7.397-41.036-26.118-54.048-28.188-19.592-90.924-20.519-118.496-0.039-5.963 4.429-6.164 16.614-8.532 23.757 29.166-5.351 55.252-11.457 81.688-14.305 9.883-1.065 22.911 2.812 30.272 9.265 7.68 6.731 14.707 19.706 13.802 29.166-0.883 9.236-10.418 21.627-19.211 25.287-17.677 7.356-37.536 9.324-56.313 14.213-41.289 10.751-55.366 36.561-42.024 79.253z" />
<glyph unicode="&#xe926;" horiz-adv-x="1071" d="M622.875 334.208c-23.913-39.547-62.258-35.895-101.335-37.193 0-24.135 0-47.866 0-72.994-9.272 0-15.811 0-23.827 0 0 67.332 0 134.269 0 207.64 31.933-3.176 64.779-2.518 95.358-10.52 34.77-9.099 45.034-43.987 29.804-86.933zM571.737 404.573c-16.744 0-33.488 0-49.651 0 0-28.983 0-55.24 0-81.277 50.406-6.214 72.301 1.84 80.559 28.949 7.077 23.233-1.362 39.302-30.908 52.328z" />
<glyph unicode="&#xe927;" horiz-adv-x="1071" d="M573.663 404.168c27.62-12.621 36.059-28.689 28.982-51.922-8.258-27.108-30.152-35.162-80.559-28.949 0 26.037 0 52.294 0 81.277 16.163 0 32.907 0 51.576-0.406z" />
</font></defs></svg>

Before

Width:  |  Height:  |  Size: 28 KiB

File diff suppressed because one or more lines are too long

View File

@ -1,224 +0,0 @@
@font-face {
font-family: 'icomoon';
src: url('fonts/icomoon.eot?eq8f84');
src: url('fonts/icomoon.eot?eq8f84#iefix') format('embedded-opentype'),
url('fonts/icomoon.ttf?eq8f84') format('truetype'),
url('fonts/icomoon.woff?eq8f84') format('woff'),
url('fonts/icomoon.svg?eq8f84#icomoon') format('svg');
font-weight: normal;
font-style: normal;
font-display: block;
}
[class^="icon-"], [class*=" icon-"] {
/* use !important to prevent issues with browser extensions that change fonts */
font-family: 'icomoon' !important;
speak: never;
font-style: normal;
font-weight: normal;
font-variant: normal;
text-transform: none;
line-height: 1;
/* Better Font Rendering =========== */
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
.icon-gps_signal_low .path1:before {
content: "\e900";
color: rgb(255, 253, 253);
}
.icon-gps_signal_low .path2:before {
content: "\e901";
margin-left: -1.0458984375em;
color: rgb(255, 37, 4);
}
.icon-gps_signal_low .path3:before {
content: "\e902";
margin-left: -1.0458984375em;
color: rgb(255, 253, 253);
}
.icon-gps_signal_low .path4:before {
content: "\e903";
margin-left: -1.0458984375em;
color: rgb(255, 252, 252);
}
.icon-gps_signal_low .path5:before {
content: "\e904";
margin-left: -1.0458984375em;
color: rgb(251, 251, 251);
}
.icon-gps_signal_low .path6:before {
content: "\e905";
margin-left: -1.0458984375em;
color: rgb(252, 250, 250);
}
.icon-gps_signal_low .path7:before {
content: "\e906";
margin-left: -1.0458984375em;
color: rgb(5, 5, 5);
}
.icon-gps_signal_low .path8:before {
content: "\e907";
margin-left: -1.0458984375em;
color: rgb(1, 1, 1);
}
.icon-gps_signal_low .path9:before {
content: "\e908";
margin-left: -1.0458984375em;
color: rgb(250, 248, 248);
}
.icon-gps_signal_low .path10:before {
content: "\e909";
margin-left: -1.0458984375em;
color: rgb(6, 6, 6);
}
.icon-gps_signal_low .path11:before {
content: "\e90a";
margin-left: -1.0458984375em;
color: rgb(10, 10, 10);
}
.icon-gps_signal_low .path12:before {
content: "\e90b";
margin-left: -1.0458984375em;
color: rgb(12, 12, 12);
}
.icon-gps_signal_low .path13:before {
content: "\e90c";
margin-left: -1.0458984375em;
color: rgb(251, 251, 251);
}
.icon-gps_signal_low .path14:before {
content: "\e90d";
margin-left: -1.0458984375em;
color: rgb(10, 10, 10);
}
.icon-gps_signal_low .path15:before {
content: "\e90e";
margin-left: -1.0458984375em;
color: rgb(250, 238, 238);
}
.icon-gps_signal_low .path16:before {
content: "\e90f";
margin-left: -1.0458984375em;
color: rgb(1, 1, 1);
}
.icon-gps_signal_low .path17:before {
content: "\e910";
margin-left: -1.0458984375em;
color: rgb(113, 106, 106);
}
.icon-gps_signal_low .path18:before {
content: "\e911";
margin-left: -1.0458984375em;
color: rgb(113, 106, 106);
}
.icon-gps_signal_low .path19:before {
content: "\e912";
margin-left: -1.0458984375em;
color: rgb(12, 12, 12);
}
.icon-gps_signal_middle .path1:before {
content: "\e913";
color: rgb(255, 255, 254);
}
.icon-gps_signal_middle .path2:before {
content: "\e914";
margin-left: -1.0458984375em;
color: rgb(255, 255, 1);
}
.icon-gps_signal_middle .path3:before {
content: "\e915";
margin-left: -1.0458984375em;
color: rgb(6, 6, 0);
}
.icon-gps_signal_middle .path4:before {
content: "\e916";
margin-left: -1.0458984375em;
color: rgb(2, 2, 2);
}
.icon-gps_signal_middle .path5:before {
content: "\e917";
margin-left: -1.0458984375em;
color: rgb(1, 1, 1);
}
.icon-gps_signal_middle .path6:before {
content: "\e918";
margin-left: -1.0458984375em;
color: rgb(251, 251, 0);
}
.icon-gps_signal_middle .path7:before {
content: "\e919";
margin-left: -1.0458984375em;
color: rgb(11, 11, 4);
}
.icon-gps_signal_middle .path8:before {
content: "\e91a";
margin-left: -1.0458984375em;
color: rgb(13, 13, 4);
}
.icon-gps_signal_middle .path9:before {
content: "\e91b";
margin-left: -1.0458984375em;
color: rgb(11, 11, 4);
}
.icon-gps_signal_middle .path10:before {
content: "\e91c";
margin-left: -1.0458984375em;
color: rgb(251, 251, 0);
}
.icon-gps_signal_high .path1:before {
content: "\e91d";
color: rgb(254, 255, 255);
}
.icon-gps_signal_high .path2:before {
content: "\e91e";
margin-left: -1.0458984375em;
color: rgb(70, 248, 5);
}
.icon-gps_signal_high .path3:before {
content: "\e91f";
margin-left: -1.0458984375em;
color: rgb(2, 5, 0);
}
.icon-gps_signal_high .path4:before {
content: "\e920";
margin-left: -1.0458984375em;
color: rgb(1, 1, 1);
}
.icon-gps_signal_high .path5:before {
content: "\e921";
margin-left: -1.0458984375em;
color: rgb(2, 2, 2);
}
.icon-gps_signal_high .path6:before {
content: "\e922";
margin-left: -1.0458984375em;
color: rgb(1, 1, 1);
}
.icon-gps_signal_high .path7:before {
content: "\e923";
margin-left: -1.0458984375em;
color: rgb(69, 244, 5);
}
.icon-gps_signal_high .path8:before {
content: "\e924";
margin-left: -1.0458984375em;
color: rgb(6, 11, 4);
}
.icon-gps_signal_high .path9:before {
content: "\e925";
margin-left: -1.0458984375em;
color: rgb(6, 12, 4);
}
.icon-gps_signal_high .path10:before {
content: "\e926";
margin-left: -1.0458984375em;
color: rgb(5, 11, 4);
}
.icon-gps_signal_high .path11:before {
content: "\e927";
margin-left: -1.0458984375em;
color: rgb(69, 244, 5);
}

Binary file not shown.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 71 KiB

View File

@ -21,6 +21,6 @@
<key>CFBundleVersion</key>
<string>1.0</string>
<key>MinimumOSVersion</key>
<string>12.0</string>
<string>11.0</string>
</dict>
</plist>

View File

@ -1,5 +1,5 @@
# Uncomment this line to define a global platform for your project
platform :ios, '12.0'
# platform :ios, '11.0'
# CocoaPods analytics sends network stats synchronously affecting flutter build latency.
ENV['COCOAPODS_DISABLE_STATS'] = 'true'

View File

@ -4,124 +4,175 @@ PODS:
- connectivity_plus (0.0.1):
- Flutter
- ReachabilitySwift
- device_info_plus (0.0.1):
- DKImagePickerController/Core (4.3.4):
- DKImagePickerController/ImageDataManager
- DKImagePickerController/Resource
- DKImagePickerController/ImageDataManager (4.3.4)
- DKImagePickerController/PhotoGallery (4.3.4):
- DKImagePickerController/Core
- DKPhotoGallery
- DKImagePickerController/Resource (4.3.4)
- DKPhotoGallery (0.0.17):
- DKPhotoGallery/Core (= 0.0.17)
- DKPhotoGallery/Model (= 0.0.17)
- DKPhotoGallery/Preview (= 0.0.17)
- DKPhotoGallery/Resource (= 0.0.17)
- SDWebImage
- SwiftyGif
- DKPhotoGallery/Core (0.0.17):
- DKPhotoGallery/Model
- DKPhotoGallery/Preview
- SDWebImage
- SwiftyGif
- DKPhotoGallery/Model (0.0.17):
- SDWebImage
- SwiftyGif
- DKPhotoGallery/Preview (0.0.17):
- DKPhotoGallery/Model
- DKPhotoGallery/Resource
- SDWebImage
- SwiftyGif
- DKPhotoGallery/Resource (0.0.17):
- SDWebImage
- SwiftyGif
- file_picker (0.0.1):
- DKImagePickerController/PhotoGallery
- Flutter
- Flutter (1.0.0)
- flutter_compass (0.0.1):
- Flutter
- flutter_keyboard_visibility (0.0.1):
- Flutter
- flutter_local_notifications (0.0.1):
- Flutter
- FMDB (2.7.5):
- FMDB/standard (= 2.7.5)
- FMDB/standard (2.7.5)
- geolocator_apple (1.2.0):
- Flutter
- image_gallery_saver (2.0.2):
- google_maps_flutter_ios (0.0.1):
- Flutter
- GoogleMaps
- GoogleMaps (4.1.0):
- GoogleMaps/Maps (= 4.1.0)
- GoogleMaps/Base (4.1.0)
- GoogleMaps/Maps (4.1.0):
- GoogleMaps/Base
- image_picker_ios (0.0.1):
- Flutter
- isar_flutter_libs (1.0.0):
- move_to_background (0.0.1):
- Flutter
- package_info_plus (0.4.5):
- path_provider_ios (0.0.1):
- Flutter
- path_provider_foundation (0.0.1):
- Flutter
- FlutterMacOS
- permission_handler_apple (9.3.0):
- Flutter
- pointer_interceptor_ios (0.0.1):
- permission_handler_apple (9.0.4):
- Flutter
- ReachabilitySwift (5.0.0)
- SDWebImage (5.15.5):
- SDWebImage/Core (= 5.15.5)
- SDWebImage/Core (5.15.5)
- share_plus (0.0.1):
- Flutter
- shared_preferences_foundation (0.0.1):
- Flutter
- FlutterMacOS
- sqflite (0.0.3):
- sqflite (0.0.2):
- Flutter
- FMDB (>= 2.7.5)
- SwiftyGif (5.4.4)
- url_launcher_ios (0.0.1):
- Flutter
DEPENDENCIES:
- camera_avfoundation (from `.symlinks/plugins/camera_avfoundation/ios`)
- connectivity_plus (from `.symlinks/plugins/connectivity_plus/ios`)
- device_info_plus (from `.symlinks/plugins/device_info_plus/ios`)
- file_picker (from `.symlinks/plugins/file_picker/ios`)
- Flutter (from `Flutter`)
- flutter_compass (from `.symlinks/plugins/flutter_compass/ios`)
- flutter_keyboard_visibility (from `.symlinks/plugins/flutter_keyboard_visibility/ios`)
- flutter_local_notifications (from `.symlinks/plugins/flutter_local_notifications/ios`)
- geolocator_apple (from `.symlinks/plugins/geolocator_apple/ios`)
- image_gallery_saver (from `.symlinks/plugins/image_gallery_saver/ios`)
- google_maps_flutter_ios (from `.symlinks/plugins/google_maps_flutter_ios/ios`)
- image_picker_ios (from `.symlinks/plugins/image_picker_ios/ios`)
- isar_flutter_libs (from `.symlinks/plugins/isar_flutter_libs/ios`)
- package_info_plus (from `.symlinks/plugins/package_info_plus/ios`)
- path_provider_foundation (from `.symlinks/plugins/path_provider_foundation/darwin`)
- move_to_background (from `.symlinks/plugins/move_to_background/ios`)
- path_provider_ios (from `.symlinks/plugins/path_provider_ios/ios`)
- permission_handler_apple (from `.symlinks/plugins/permission_handler_apple/ios`)
- pointer_interceptor_ios (from `.symlinks/plugins/pointer_interceptor_ios/ios`)
- shared_preferences_foundation (from `.symlinks/plugins/shared_preferences_foundation/darwin`)
- share_plus (from `.symlinks/plugins/share_plus/ios`)
- shared_preferences_foundation (from `.symlinks/plugins/shared_preferences_foundation/ios`)
- sqflite (from `.symlinks/plugins/sqflite/ios`)
- url_launcher_ios (from `.symlinks/plugins/url_launcher_ios/ios`)
SPEC REPOS:
trunk:
- DKImagePickerController
- DKPhotoGallery
- FMDB
- GoogleMaps
- ReachabilitySwift
- SDWebImage
- SwiftyGif
EXTERNAL SOURCES:
camera_avfoundation:
:path: ".symlinks/plugins/camera_avfoundation/ios"
connectivity_plus:
:path: ".symlinks/plugins/connectivity_plus/ios"
device_info_plus:
:path: ".symlinks/plugins/device_info_plus/ios"
file_picker:
:path: ".symlinks/plugins/file_picker/ios"
Flutter:
:path: Flutter
flutter_compass:
:path: ".symlinks/plugins/flutter_compass/ios"
flutter_keyboard_visibility:
:path: ".symlinks/plugins/flutter_keyboard_visibility/ios"
flutter_local_notifications:
:path: ".symlinks/plugins/flutter_local_notifications/ios"
geolocator_apple:
:path: ".symlinks/plugins/geolocator_apple/ios"
image_gallery_saver:
:path: ".symlinks/plugins/image_gallery_saver/ios"
google_maps_flutter_ios:
:path: ".symlinks/plugins/google_maps_flutter_ios/ios"
image_picker_ios:
:path: ".symlinks/plugins/image_picker_ios/ios"
isar_flutter_libs:
:path: ".symlinks/plugins/isar_flutter_libs/ios"
package_info_plus:
:path: ".symlinks/plugins/package_info_plus/ios"
path_provider_foundation:
:path: ".symlinks/plugins/path_provider_foundation/darwin"
move_to_background:
:path: ".symlinks/plugins/move_to_background/ios"
path_provider_ios:
:path: ".symlinks/plugins/path_provider_ios/ios"
permission_handler_apple:
:path: ".symlinks/plugins/permission_handler_apple/ios"
pointer_interceptor_ios:
:path: ".symlinks/plugins/pointer_interceptor_ios/ios"
share_plus:
:path: ".symlinks/plugins/share_plus/ios"
shared_preferences_foundation:
:path: ".symlinks/plugins/shared_preferences_foundation/darwin"
:path: ".symlinks/plugins/shared_preferences_foundation/ios"
sqflite:
:path: ".symlinks/plugins/sqflite/ios"
url_launcher_ios:
:path: ".symlinks/plugins/url_launcher_ios/ios"
SPEC CHECKSUMS:
camera_avfoundation: 759172d1a77ae7be0de08fc104cfb79738b8a59e
connectivity_plus: bf0076dd84a130856aa636df1c71ccaff908fa1d
device_info_plus: 97af1d7e84681a90d0693e63169a5d50e0839a0d
Flutter: e0871f40cf51350855a761d2e70bf5af5b9b5de7
camera_avfoundation: 07c77549ea54ad95d8581be86617c094a46280d9
connectivity_plus: 413a8857dd5d9f1c399a39130850d02fe0feaf7e
DKImagePickerController: b512c28220a2b8ac7419f21c491fc8534b7601ac
DKPhotoGallery: fdfad5125a9fdda9cc57df834d49df790dbb4179
file_picker: ce3938a0df3cc1ef404671531facef740d03f920
Flutter: f04841e97a9d0b0a8025694d0796dd46242b2854
flutter_compass: cbbd285cea1584c7ac9c4e0c3e1f17cbea55e855
flutter_keyboard_visibility: 0339d06371254c3eb25eeb90ba8d17dca8f9c069
flutter_local_notifications: 0c0b1ae97e741e1521e4c1629a459d04b9aec743
FMDB: 2ce00b547f966261cd18927a3ddb07cb6f3db82a
geolocator_apple: 9157311f654584b9bb72686c55fc02a97b73f461
image_gallery_saver: cb43cc43141711190510e92c460eb1655cd343cb
image_picker_ios: 99dfe1854b4fa34d0364e74a78448a0151025425
isar_flutter_libs: b69f437aeab9c521821c3f376198c4371fa21073
package_info_plus: 58f0028419748fad15bf008b270aaa8e54380b1c
path_provider_foundation: 3784922295ac71e43754bd15e0653ccfd36a147c
permission_handler_apple: 9878588469a2b0d0fc1e048d9f43605f92e6cec2
pointer_interceptor_ios: 9280618c0b2eeb80081a343924aa8ad756c21375
geolocator_apple: cc556e6844d508c95df1e87e3ea6fa4e58c50401
google_maps_flutter_ios: 66201f392bf62d500f07670a30488a247b9bb5b9
GoogleMaps: 008e2c80e38605b56b560e8deb73d4194ff30bef
image_picker_ios: b786a5dcf033a8336a657191401bfdf12017dabb
move_to_background: 39a5b79b26d577b0372cbe8a8c55e7aa9fcd3a2d
path_provider_ios: 14f3d2fd28c4fdb42f44e0f751d12861c43cee02
permission_handler_apple: 44366e37eaf29454a1e7b1b7d736c2cceaeb17ce
ReachabilitySwift: 985039c6f7b23a1da463388634119492ff86c825
shared_preferences_foundation: b4c3b4cddf1c21f02770737f147a3f5da9d39695
sqflite: 50a33e1d72bd59ee092a519a35d107502757ebed
url_launcher_ios: bbd758c6e7f9fd7b5b1d4cde34d2b95fcce5e812
SDWebImage: fd7e1a22f00303e058058278639bf6196ee431fe
share_plus: 056a1e8ac890df3e33cb503afffaf1e9b4fbae68
shared_preferences_foundation: 986fc17f3d3251412d18b0265f9c64113a8c2472
sqflite: 6d358c025f5b867b29ed92fc697fd34924e11904
SwiftyGif: 93a1cc87bf3a51916001cf8f3d63835fb64c819f
url_launcher_ios: 839c58cdb4279282219f5e248c3321761ff3c4de
PODFILE CHECKSUM: 7a34d5e980f9e05ecf4e24c79da64ca020615638
PODFILE CHECKSUM: a1c2f8dde3796ecc1697a15e7c75eb5205d8a740
COCOAPODS: 1.15.2
COCOAPODS: 1.12.0

View File

@ -7,13 +7,13 @@
objects = {
/* Begin PBXBuildFile section */
084EA8A81CF8B34528999293 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D7C4F924DD034151EFC15038 /* Pods_Runner.framework */; };
1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; };
3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; };
74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; };
97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; };
97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; };
97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; };
EAFC0FFB27C8DC9071E67D5D /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 853FC5087A11FEE54BE443C8 /* Pods_Runner.framework */; };
/* End PBXBuildFile section */
/* Begin PBXCopyFilesBuildPhase section */
@ -30,14 +30,14 @@
/* End PBXCopyFilesBuildPhase section */
/* Begin PBXFileReference section */
13E5CD9612AF4CC8B90A74C3 /* 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>"; };
1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = "<group>"; };
1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = "<group>"; };
37AC108B2188F1C5AA1C2C9E /* 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>"; };
3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = "<group>"; };
4310B59AA1289CC3AE4DBA82 /* 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>"; };
74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = "<group>"; };
74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = "<group>"; };
853FC5087A11FEE54BE443C8 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; };
9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = "<group>"; };
9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = "<group>"; };
97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; };
@ -45,8 +45,8 @@
97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
D464128FC0D5DAEBC1011C26 /* 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>"; };
D7C4F924DD034151EFC15038 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; };
BEC4F75C6B655CA90D5B5E18 /* 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>"; };
F1D3FD8F51C2EAF6C3A7EE25 /* 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>"; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
@ -54,7 +54,7 @@
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
084EA8A81CF8B34528999293 /* Pods_Runner.framework in Frameworks */,
EAFC0FFB27C8DC9071E67D5D /* Pods_Runner.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@ -64,9 +64,9 @@
6C3C11D7BE49E5BED7989712 /* Pods */ = {
isa = PBXGroup;
children = (
4310B59AA1289CC3AE4DBA82 /* Pods-Runner.debug.xcconfig */,
37AC108B2188F1C5AA1C2C9E /* Pods-Runner.release.xcconfig */,
D464128FC0D5DAEBC1011C26 /* Pods-Runner.profile.xcconfig */,
BEC4F75C6B655CA90D5B5E18 /* Pods-Runner.debug.xcconfig */,
13E5CD9612AF4CC8B90A74C3 /* Pods-Runner.release.xcconfig */,
F1D3FD8F51C2EAF6C3A7EE25 /* Pods-Runner.profile.xcconfig */,
);
path = Pods;
sourceTree = "<group>";
@ -89,7 +89,7 @@
97C146F01CF9000F007C117D /* Runner */,
97C146EF1CF9000F007C117D /* Products */,
6C3C11D7BE49E5BED7989712 /* Pods */,
D3D7A1CBA3FB0154A6C84903 /* Frameworks */,
E6F2437A5B5AAF08D2998197 /* Frameworks */,
);
sourceTree = "<group>";
};
@ -116,10 +116,10 @@
path = Runner;
sourceTree = "<group>";
};
D3D7A1CBA3FB0154A6C84903 /* Frameworks */ = {
E6F2437A5B5AAF08D2998197 /* Frameworks */ = {
isa = PBXGroup;
children = (
D7C4F924DD034151EFC15038 /* Pods_Runner.framework */,
853FC5087A11FEE54BE443C8 /* Pods_Runner.framework */,
);
name = Frameworks;
sourceTree = "<group>";
@ -131,15 +131,15 @@
isa = PBXNativeTarget;
buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */;
buildPhases = (
9ACF47601C5E8A391157E87A /* [CP] Check Pods Manifest.lock */,
6B25D2836FC6A82461E36025 /* [CP] Check Pods Manifest.lock */,
9740EEB61CF901F6004384FC /* Run Script */,
97C146EA1CF9000F007C117D /* Sources */,
97C146EB1CF9000F007C117D /* Frameworks */,
97C146EC1CF9000F007C117D /* Resources */,
9705A1C41CF9048500538489 /* Embed Frameworks */,
3B06AD1E1E4923F5004D2608 /* Thin Binary */,
CD1CB185AC38B6B245F9A672 /* [CP] Embed Pods Frameworks */,
4D62FB08D65E9D3D4D84B418 /* [CP] Copy Pods Resources */,
ED4E40E6FE1C0A73CAC736F8 /* [CP] Embed Pods Frameworks */,
FE7C2E909403F98AB3140FE6 /* [CP] Copy Pods Resources */,
);
buildRules = (
);
@ -156,7 +156,7 @@
97C146E61CF9000F007C117D /* Project object */ = {
isa = PBXProject;
attributes = {
LastUpgradeCheck = 1430;
LastUpgradeCheck = 1300;
ORGANIZATIONNAME = "";
TargetAttributes = {
97C146ED1CF9000F007C117D = {
@ -214,39 +214,7 @@
shellPath = /bin/sh;
shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin";
};
4D62FB08D65E9D3D4D84B418 /* [CP] Copy Pods Resources */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-input-files.xcfilelist",
);
name = "[CP] Copy Pods Resources";
outputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-output-files.xcfilelist",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n";
showEnvVarsInLog = 0;
};
9740EEB61CF901F6004384FC /* Run Script */ = {
isa = PBXShellScriptBuildPhase;
alwaysOutOfDate = 1;
buildActionMask = 2147483647;
files = (
);
inputPaths = (
);
name = "Run Script";
outputPaths = (
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build";
};
9ACF47601C5E8A391157E87A /* [CP] Check Pods Manifest.lock */ = {
6B25D2836FC6A82461E36025 /* [CP] Check Pods Manifest.lock */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
@ -268,7 +236,22 @@
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";
showEnvVarsInLog = 0;
};
CD1CB185AC38B6B245F9A672 /* [CP] Embed Pods Frameworks */ = {
9740EEB61CF901F6004384FC /* Run Script */ = {
isa = PBXShellScriptBuildPhase;
alwaysOutOfDate = 1;
buildActionMask = 2147483647;
files = (
);
inputPaths = (
);
name = "Run Script";
outputPaths = (
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build";
};
ED4E40E6FE1C0A73CAC736F8 /* [CP] Embed Pods Frameworks */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
@ -285,6 +268,23 @@
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n";
showEnvVarsInLog = 0;
};
FE7C2E909403F98AB3140FE6 /* [CP] Copy Pods Resources */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-input-files.xcfilelist",
);
name = "[CP] Copy Pods Resources";
outputFileListPaths = (
"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-output-files.xcfilelist",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n";
showEnvVarsInLog = 0;
};
/* End PBXShellScriptBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
@ -360,9 +360,8 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 12.0;
IPHONEOS_DEPLOYMENT_TARGET = 11.0;
MTL_ENABLE_DEBUG_INFO = NO;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = iphoneos;
SUPPORTED_PLATFORMS = iphoneos;
TARGETED_DEVICE_FAMILY = "1,2";
@ -376,25 +375,16 @@
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 453;
DEVELOPMENT_TEAM = UMNEWT25JR;
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
DEVELOPMENT_TEAM = D5SL68ATB9;
ENABLE_BITCODE = NO;
FLUTTER_BUILD_NAME = 4.5.0;
FLUTTER_BUILD_NUMBER = 453;
INFOPLIST_FILE = Runner/Info.plist;
INFOPLIST_KEY_CFBundleDisplayName = "岐阜ナビ";
INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.healthcare-fitness";
IPHONEOS_DEPLOYMENT_TARGET = 12.0;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
);
MARKETING_VERSION = 4.5.0;
PRODUCT_BUNDLE_IDENTIFIER = com.dvox.gifunavi;
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = "";
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
SWIFT_VERSION = 5.0;
VERSIONING_SYSTEM = "apple-generic";
@ -448,7 +438,7 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 12.0;
IPHONEOS_DEPLOYMENT_TARGET = 11.0;
MTL_ENABLE_DEBUG_INFO = YES;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = iphoneos;
@ -497,9 +487,8 @@
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
IPHONEOS_DEPLOYMENT_TARGET = 12.0;
IPHONEOS_DEPLOYMENT_TARGET = 11.0;
MTL_ENABLE_DEBUG_INFO = NO;
ONLY_ACTIVE_ARCH = YES;
SDKROOT = iphoneos;
SUPPORTED_PLATFORMS = iphoneos;
SWIFT_COMPILATION_MODE = wholemodule;
@ -515,25 +504,16 @@
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 453;
DEVELOPMENT_TEAM = UMNEWT25JR;
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
DEVELOPMENT_TEAM = D5SL68ATB9;
ENABLE_BITCODE = NO;
FLUTTER_BUILD_NAME = 4.5.0;
FLUTTER_BUILD_NUMBER = 453;
INFOPLIST_FILE = Runner/Info.plist;
INFOPLIST_KEY_CFBundleDisplayName = "岐阜ナビ";
INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.healthcare-fitness";
IPHONEOS_DEPLOYMENT_TARGET = 12.0;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
);
MARKETING_VERSION = 4.5.0;
PRODUCT_BUNDLE_IDENTIFIER = com.dvox.gifunavi;
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = "";
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
SWIFT_VERSION = 5.0;
@ -547,25 +527,16 @@
buildSettings = {
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
CLANG_ENABLE_MODULES = YES;
CODE_SIGN_IDENTITY = "Apple Development";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 453;
DEVELOPMENT_TEAM = UMNEWT25JR;
CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)";
DEVELOPMENT_TEAM = D5SL68ATB9;
ENABLE_BITCODE = NO;
FLUTTER_BUILD_NAME = 4.5.0;
FLUTTER_BUILD_NUMBER = 453;
INFOPLIST_FILE = Runner/Info.plist;
INFOPLIST_KEY_CFBundleDisplayName = "岐阜ナビ";
INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.healthcare-fitness";
IPHONEOS_DEPLOYMENT_TARGET = 12.0;
LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)",
"@executable_path/Frameworks",
);
MARKETING_VERSION = 4.5.0;
PRODUCT_BUNDLE_IDENTIFIER = com.dvox.gifunavi;
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = "";
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
SWIFT_VERSION = 5.0;
VERSIONING_SYSTEM = "apple-generic";

View File

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "1430"
LastUpgradeVersion = "1300"
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"

View File

@ -1,5 +1,6 @@
import UIKit
import Flutter
import GoogleMaps
@UIApplicationMain
@objc class AppDelegate: FlutterAppDelegate {
@ -7,6 +8,7 @@ import Flutter
_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
) -> Bool {
GMSServices.provideAPIKey("AIzaSyAUBI1ablMKuJwGj2-kSuEhvYxvB1A-mOE")
GeneratedPluginRegistrant.register(with: self)
return super.application(application, didFinishLaunchingWithOptions: launchOptions)
}

View File

@ -27,25 +27,25 @@
<key>LSRequiresIPhoneOS</key>
<true/>
<key>NSCameraUsageDescription</key>
<string>「岐阜ナビは旅のさまざまなチェックポイントで写真撮影して共有するためカメラへのアクセスが必要です。これにより、訪問を確認し、体験を向上させることができます。」</string>
<string>写真撮影ためカメラアクセスします</string>
<key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
<string>「岐阜ナビはアプリが閉じられているときでも位置情報へのアクセスが必要です。これにより、チェックポイントでの自動チェックインを提供し、旅の間のナビゲーション体験を向上させます。</string>
<string>このアプリでは、位置情報の収集を行います。</string>
<key>NSLocationAlwaysUsageDescription</key>
<string>「自動チェックインを有効にし、ナビゲーションを改善するために、岐阜ナビはアプリが使用されていないときでも継続的に位置情報へのアクセスを必要とします。</string>
<string>このアプリでは、バックグラウンドで位置情報を収集します。</string>
<key>NSLocationWhenInUseUsageDescription</key>
<string>「岐阜ナビにアプリ使用中の位置情報へのアクセスを許可することで、チェックポイントでのチェックインを有効にし、位置に基づいた情報とガイダンスを提供します。</string>
<string>このアプリでは、開始時点で位置情報を収集します。</string>
<key>NSMicrophoneUsageDescription</key>
<string>「岐阜ナビは、ナビゲーション体験を向上させるために、音声コマンドやオーディオフィードバックなどの機能にマイクへのアクセスが必要です。」</string>
<string>プロフィールに動画を投稿してください。</string>
<key>NSPhotoLibraryUsageDescription</key>
<string>「岐阜ナビはチェックポイントで撮影した写真を保存・管理し、他人と旅の様子を共有するために、写真ライブラリへのアクセスが必要です。」</string>
<key>NSPhotoLibraryUsageDescription</key>
<string>Need to save image in phone Album</string>
<string>写真ライブラリへのアクセス警告</string>
<key>UILaunchStoryboardName</key>
<string>LaunchScreen</string>
<key>UIMainStoryboardFile</key>
<string>Main</string>
<key>NSCameraUsageDescription</key>
<string>「岐阜ナビはチェックポイントで撮影した写真を写真ライブラリに保存し、あなたの旅行の記録を保持し、友人と共有することができます。</string>
<string>ロゲイニングのゴールでは写真撮影が必要です。</string>
<key>NSMicrophoneUsageDescription</key>
<string> 収録音声の保存が必要です。</string>
<key>UISupportedInterfaceOrientations</key>
<array>
<string>UIInterfaceOrientationPortrait</string>
@ -65,7 +65,5 @@
<true/>
<key>UIApplicationSupportsIndirectInputEvents</key>
<true/>
<key>FLTEnableImpeller</key>
<false/>
</dict>
</plist>

View File

@ -1,12 +0,0 @@
import Flutter
import UIKit
import XCTest
class RunnerTests: XCTestCase {
func testExample() {
// If you add code to the Runner application, consider adding tests here.
// See https://developer.apple.com/documentation/xctest for more information about using XCTest.
}
}

View File

@ -0,0 +1,12 @@
import 'package:get/get.dart';
import 'package:rogapp/common/state/game/game_controller.dart';
import 'package:rogapp/screens/auth/controller/auth_controller.dart';
class GameBinding extends Bindings{
@override
void dependencies() {
Get.lazyPut<AuthController>(() => AuthController());
Get.put<GameController>(GameController());
}
}

View File

@ -0,0 +1,25 @@
import 'package:get/get.dart';
import 'package:rogapp/model/user.dart';
import 'package:rogapp/routes/app_pages.dart';
import 'package:rogapp/screens/auth/controller/auth_controller.dart';
class GameController extends GetxController{
AuthController authController = Get.find<AuthController>();
@override
void onInit() {
ever(authController.authList, changeInAuth);
super.onInit();
}
void changeInAuth(List<AuthResponse> change){
if(change.isNotEmpty){
Get.toNamed(AppPages.S_HOME);
}
else{
Get.toNamed(AppPages.S_LOGIN);
}
}
}

View File

@ -0,0 +1,16 @@
import 'package:flutter/material.dart';
import 'package:rogapp/theme/theme.dart';
class UIs{
static AppBar appBar(){
return AppBar(
title: const Icon(
Icons.access_alarm,
size:30,
color: Pallete.WHITE_COLOR,
),
automaticallyImplyLeading:false,
centerTitle: true,
);
}
}

View File

@ -1,5 +1,4 @@
// ignore: non_constant_identifier_names
// 不要
String location_line_date = """
{
"type": "FeatureCollection",

View File

@ -1,225 +1,45 @@
import 'dart:async';
//import 'dart:convert';
//import 'dart:developer';
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_map_tile_caching/flutter_map_tile_caching.dart';
import 'package:get/get.dart';
//import 'package:vm_service/vm_service.dart';
//import 'package:dart_vm_info/dart_vm_info.dart';
import 'package:rogapp/pages/destination/destination_controller.dart';
import 'package:google_fonts/google_fonts.dart';
import 'package:permission_handler/permission_handler.dart';
import 'package:rogapp/common/state/game/game_binding.dart';
import 'package:rogapp/pages/index/index_binding.dart';
import 'package:rogapp/routes/app_pages.dart';
import 'package:rogapp/utils/location_controller.dart';
import 'package:rogapp/theme/theme.dart';
import 'package:rogapp/utils/string_values.dart';
import 'package:shared_preferences/shared_preferences.dart';
// import 'package:is_lock_screen/is_lock_screen.dart';
import 'package:rogapp/services/device_info_service.dart';
import 'package:rogapp/services/error_service.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
//import 'dart:async';
//import 'package:get/get.dart';
Map<String, dynamic> deviceInfo = {};
void saveGameState() async {
DestinationController destinationController =
Get.find<DestinationController>();
SharedPreferences pref = await SharedPreferences.getInstance();
pref.setBool("is_in_rog", destinationController.isInRog.value);
pref.setBool(
"rogaining_counted", destinationController.rogainingCounted.value);
pref.setBool("ready_for_goal", DestinationController.ready_for_goal);
}
void restoreGame() async {
SharedPreferences pref = await SharedPreferences.getInstance();
DestinationController destinationController =
Get.find<DestinationController>();
destinationController.skipGps = false;
destinationController.isInRog.value = pref.getBool("is_in_rog") ?? false;
destinationController.rogainingCounted.value =
pref.getBool("rogaining_counted") ?? false;
DestinationController.ready_for_goal =
pref.getBool("ready_for_goal") ?? false;
//print(
// "--restored -- destinationController.isInRog.value ${pref.getBool("is_in_rog")} -- ${pref.getBool("rogaining_counted")}");
}
import 'package:path/path.dart' as p;
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await FlutterMapTileCaching.initialise();
FlutterMapTileCaching.initialise(await RootDirectory.normalCache);
final StoreDirectory instanceA = FMTC.instance('OpenStreetMap (A)');
await instanceA.manage.createAsync();
await instanceA.metadata.addAsync(
key: 'sourceURL',
value: 'https://cyberjapandata.gsi.go.jp/xyz/std/{z}/{x}/{y}.png',
);
await instanceA.metadata.addAsync(
key: 'validDuration',
value: '14',
);
await instanceA.metadata.addAsync(
key: 'behaviour',
value: 'cacheFirst',
);
deviceInfo = await DeviceInfoService.getDeviceInfo();
FlutterError.onError = (FlutterErrorDetails details) {
FlutterError.presentError(details);
Get.log('Flutter error: ${details.exception}');
Get.log('Stack trace: ${details.stack}');
ErrorService.reportError(details.exception, details.stack ?? StackTrace.current, deviceInfo);
};
//Get.put(LocationController());
// startMemoryMonitoring(); // 2024-4-8 Akira: メモリ使用量のチェックを開始 See #2810
runZonedGuarded(() {
runApp(const ProviderScope(child: MyApp()));
}, (error, stackTrace) {
ErrorService.reportError(error, stackTrace, deviceInfo);
});
//runApp(const MyApp());
}
// メモリ使用量の解説https://qiita.com/hukusuke1007/items/e4e987836412e9bc73b9
/*
// 2024-4-8 Akira: メモリ使用量のチェックのため追加 See #2810
// startMemoryMonitoring関数が5分ごとに呼び出され、メモリ使用量をチェックします。
// メモリ使用量が閾値ここでは500MBを超えた場合、エラーメッセージとスタックトレースをレポートします。
//
void startMemoryMonitoring() {
const threshold = 500 * 1024 * 1024; // 500MB
// メモリ使用量情報を取得
final memoryUsage = MemoryUsage.fromJson(DartVMInfo.getAllocationProfile());
if (memoryUsage.heapUsage > threshold) {
final now = DateTime.now().toIso8601String();
final message = 'High memory usage detected at $now: ${memoryUsage.heapUsage} bytes';
print(message);
reportError(message, StackTrace.current);
showMemoryWarningDialog();
}
Timer(const Duration(minutes: 5), startMemoryMonitoring);
}
class MemoryUsage {
final int heapUsage;
MemoryUsage({required this.heapUsage});
factory MemoryUsage.fromJson(Map<String, dynamic> json) {
return MemoryUsage(
heapUsage: json['heapUsage'] as int,
await instanceA.manage.createAsync();
await instanceA.metadata.addAsync(
key: 'sourceURL',
value: 'https://cyberjapandata.gsi.go.jp/xyz/std/{z}/{x}/{y}.png',
);
}
}
*/
// 2024-4-8 Akira: メモリ使用量のチェックのため追加 See #2810
// reportError関数でエラーレポートを送信します。具体的な実装は、利用するエラー報告サービスによって異なります。
void reportError(String message, StackTrace stackTrace) async {
// エラーレポートの送信処理を実装
// 例: SentryやFirebase Crashlyticsなどのエラー報告サービスを利用
print("ReportError : ${message} . stacktrace : ${stackTrace}");
}
// 2024-4-8 Akira: メモリ使用量のチェックのため追加 See #2810
// showMemoryWarningDialog関数で、メモリ使用量が高い場合にユーザーに警告ダイアログを表示します。
//
void showMemoryWarningDialog() {
if (Get.context != null) {
showDialog(
context: Get.context!,
builder: (context) => AlertDialog(
title: const Text('メモリ使用量の警告'),
content: const Text('アプリのメモリ使用量が高くなっています。アプリを再起動することをお勧めします。'),
actions: [
TextButton(
onPressed: () => Navigator.of(context).pop(),
child: const Text('OK'),
),
],
),
await instanceA.metadata.addAsync(
key: 'validDuration',
value: '14',
);
}
await instanceA.metadata.addAsync(
key: 'behaviour',
value: 'cacheFirst',
);
runApp(MyApp());
}
class MyApp extends StatefulWidget {
const MyApp({Key? key}) : super(key: key);
@override
State<MyApp> createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> with WidgetsBindingObserver {
class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);
// This widget is the root of your application.
@override
void initState() {
super.initState();
if (context.mounted) {
restoreGame();
}
WidgetsBinding.instance.addObserver(this);
}
@override
void dispose() {
WidgetsBinding.instance.removeObserver(this);
super.dispose();
}
// void saveGameState() async {
// DestinationController destinationController = Get.find<DestinationController>();
// SharedPreferences pref = await SharedPreferences.getInstance();
// pref.setBool("is_in_rog", destinationController.is_in_rog.value);
// pref.setBool("rogaining_counted", destinationController.rogaining_counted.value);
// }
@override
void didChangeAppLifecycleState(AppLifecycleState state) {
LocationController locationController = Get.find<LocationController>();
//DestinationController destinationController =
// Get.find<DestinationController>();
switch (state) {
case AppLifecycleState.resumed:
locationController.resumePositionStream();
//print("RESUMED");
restoreGame();
break;
case AppLifecycleState.inactive:
locationController.resumePositionStream();
//print("INACTIVE");
break;
case AppLifecycleState.paused:
locationController.resumePositionStream();
//print("PAUSED");
saveGameState();
break;
case AppLifecycleState.detached:
locationController.resumePositionStream();
//print("DETACHED");
saveGameState();
break;
case AppLifecycleState.hidden:
locationController.resumePositionStream();
//print("DETACHED");
saveGameState();
break;
}
}
@override
Widget build(BuildContext context) {
return GetMaterialApp(
@ -228,20 +48,64 @@ class _MyAppState extends State<MyApp> with WidgetsBindingObserver {
//locale: const Locale('en', 'US'),
fallbackLocale: const Locale('en', 'US'),
title: 'ROGAINING',
theme: ThemeData(
colorScheme: ColorScheme.fromSeed(
seedColor: const Color.fromARGB(255, 36, 135, 221)),
useMaterial3: true,
),
theme: AppTheme.theme,
debugShowCheckedModeBanner: false,
defaultTransition: Transition.cupertino,
opaqueRoute: Get.isOpaqueRouteDefault,
popGesture: Get.isPopGestureEnable,
transitionDuration: const Duration(milliseconds: 230),
initialBinding: IndexBinding(), //HomeBinding(),
initialRoute: AppPages.PERMISSION,
initialBinding: GameBinding(),
initialRoute: AppPages.S_LOGIN,
getPages: AppPages.routes,
enableLog: true,
);
}
}
// class MyApp extends StatelessWidget {
// MyApp({Key? key}) : super(key: key);
// // This widget is the root of your application.
// @override
// Widget build(BuildContext context) {
// return MaterialApp(
// title: 'Flutter Demo',
// theme: ThemeData(
// primaryColor: Color(0xfff00B074),
// textTheme: const TextTheme(
// bodyText1: TextStyle(
// fontSize: 18.0,
// fontFamily: 'Barlow-Medium',
// color: Color(0xff464255)),
// ),
// ),
// home: PermissionHandlerScreen(),
// );
// }
// }
// class SplashScreen extends StatelessWidget {
// const SplashScreen({Key? key}) : super(key: key);
// @override
// Widget build(BuildContext context) {
// return WillPopScope(
// onWillPop: () async {
// SystemNavigator.pop();
// return true;
// },
// child: Scaffold(
// body: Center(
// child: Text(
// "Splash Screen",
// ),
// ),
// ),
// );
// }
// }

View File

@ -1,61 +0,0 @@
import 'package:flutter/material.dart';
import 'package:flutter_map_tile_caching/flutter_map_tile_caching.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:rogapp/nrog/pages/permission_page.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await FlutterMapTileCaching.initialise();
final StoreDirectory instanceA = FMTC.instance('OpenStreetMap (A)');
await instanceA.manage.createAsync();
await instanceA.metadata.addAsync(
key: 'sourceURL',
value: 'https://cyberjapandata.gsi.go.jp/xyz/std/{z}/{x}/{y}.png',
);
await instanceA.metadata.addAsync(
key: 'validDuration',
value: '14',
);
await instanceA.metadata.addAsync(
key: 'behaviour',
value: 'cacheFirst',
);
runApp(
const ProviderScope(child: MyApp()),
);
}
class MyApp extends StatefulWidget {
const MyApp({super.key});
@override
State<MyApp> createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> with WidgetsBindingObserver {
@override
void initState() {
super.initState();
WidgetsBinding.instance.addObserver(this);
}
@override
void dispose() {
WidgetsBinding.instance.removeObserver(this);
super.dispose();
}
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
title: 'Flutter Demo',
theme: ThemeData(
colorScheme: ColorScheme.fromSeed(
seedColor: const Color.fromARGB(255, 124, 156, 9)),
useMaterial3: true,
),
home: const PermissionPage());
}
}

View File

@ -1,27 +0,0 @@
// プロパティの型がString?やint?などのオプショナル型になっています。
// これらのプロパティが常に値を持つことが保証されている場合は、非オプショナル型を使用することで、不要なnullチェックを回避できます。
//
class AuthUser {
AuthUser();
//AuthUser.from({required this.id, required this.email, required this.is_rogaining, required this.group, required this.zekken_number, required this.event_code, required this.team_name});
AuthUser.fromMap(Map<String, dynamic> map)
: id = int.parse(map["id"].toString()),
email = map["email"].toString(),
is_rogaining = bool.parse(map["is_rogaining"].toString()),
group = map["group"].toString(),
zekken_number = map["zekken_number"].toString(),
event_code = map["event_code"].toString(),
team_name = map["team_name"].toString(),
auth_token = map["token"];
int? id;
String? email;
bool? is_rogaining;
String? group;
String? zekken_number;
String? event_code;
String? team_name;
String? auth_token;
}

View File

@ -1,133 +1,113 @@
// プロパティの型がString?やint?などのオプショナル型になっています。
// これらのプロパティが常に値を持つことが保証されている場合は、非オプショナル型を使用することで、不要なnullチェックを回避できます。
//
class Destination {
String? name;
String? address;
String? phone;
String? email;
String? webcontents;
String? videos;
String? category;
int? series;
double? lat;
double? lon;
String? sub_loc_id;
int? location_id;
int? list_order;
String? photos;
double? checkin_radious;
int? auto_checkin;
bool? selected = false;
bool? checkedin = false;
double? cp;
double? checkin_point;
double? buy_point;
int? hidden_location;
String? checkin_image;
String? buypoint_image;
bool forced_checkin = false;
int recipt_times = 0;
String? tags;
String? name;
String? address;
String? phone;
String? email;
String? webcontents;
String? videos;
String? category;
int? series;
double? lat;
double? lon;
String? sub_loc_id;
int? location_id;
int? list_order;
String? photos;
double? checkin_radious;
int? auto_checkin;
bool? selected = false;
bool? checkedin = false;
double? cp;
double? checkin_point;
double? buy_point;
int? hidden_location;
Destination(
{this.name,
this.address,
this.phone,
this.email,
this.webcontents,
this.videos,
this.category,
this.series,
this.lat,
this.lon,
this.sub_loc_id,
this.location_id,
this.list_order,
this.photos,
this.checkin_radious,
this.auto_checkin,
this.selected,
this.checkedin,
this.cp,
this.checkin_point,
this.buy_point,
this.hidden_location,
this.checkin_image,
this.buypoint_image,
this.forced_checkin = false,
this.recipt_times = 0,
this.tags});
Destination({
this.name,
this.address,
this.phone,
this.email,
this.webcontents,
this.videos,
this.category,
this.series,
this.lat,
this.lon,
this.sub_loc_id,
this.location_id,
this.list_order,
this.photos,
this.checkin_radious,
this.auto_checkin,
this.selected,
this.checkedin,
this.cp,
this.checkin_point,
this.buy_point,
this.hidden_location
});
factory Destination.fromMap(Map<String, dynamic> json) {
bool selec = json['selected'] == 0 ? false : true;
bool checkin = json['checkedin'] == 0 ? false : true;
bool forcedCheckin = json['forced_checkin'] == 0 ? false : true;
factory Destination.fromMap(Map<String, dynamic> json) {
//print("-----tags model----- ${json}");
bool selec = json['selected'] == 0 ? false : true;
bool checkin = json['checkedin'] == 0 ? false : true;
return Destination(
name: json['name'],
address: json['address'],
phone: json['phone'],
email: json['email'],
webcontents: json['webcontents'],
videos: json['videos'],
category: json['category'],
series: json['series'],
lat: json['lat'],
lon: json['lon'],
sub_loc_id: json['sub_loc_id'],
location_id: json['location_id'],
list_order: json['list_order'],
photos: json['photos'],
checkin_radious: json['checkin_radious'],
auto_checkin: json['auto_checkin'],
selected: selec,
checkedin: checkin,
cp: json['cp'],
checkin_point: json['checkin_point'],
buy_point: json['buy_point'],
hidden_location: json['hidden_location'],
checkin_image: json['checkin_image'],
buypoint_image: json["buypoint_image"],
forced_checkin: forcedCheckin,
recipt_times: json["recipt_times"],
tags: json["tags"]);
}
return Destination(
name: json['name'],
address: json['address'],
phone: json['phone'],
email: json['email'],
webcontents: json['webcontents'],
videos: json['videos'],
category: json['category'],
series: json['series'],
lat: json['lat'],
lon: json['lon'],
sub_loc_id : json['sub_loc_id'],
location_id: json['location_id'],
list_order: json['list_order'],
photos: json['photos'],
checkin_radious: json['checkin_radious'],
auto_checkin:json['auto_checkin'],
selected: selec,
checkedin: checkin,
cp: json['cp'],
checkin_point: json['checkin_point'],
buy_point: json['buy_point'],
hidden_location: json['hidden_location']
);
}
Map<String, dynamic> toMap() {
int sel = selected == false ? 0 : 1;
int check = checkedin == false ? 0 : 1;
int forcedCheckin = forced_checkin == false ? 0 : 1;
return {
'name': name,
'address': address,
'phone': phone,
'email': email,
'webcontents': webcontents,
'videos': videos,
'category': category,
'series': series,
'lat': lat,
'lon': lon,
'sub_loc_id': sub_loc_id,
'location_id': location_id,
'list_order': list_order,
'photos': photos,
'checkin_radious': checkin_radious,
'auto_checkin': auto_checkin,
'selected': sel,
'checkedin': check,
'cp': cp,
'checkin_point': checkin_point,
'buy_point': buy_point,
'hidden_location': hidden_location,
'checkin_image': checkin_image,
'buypoint_image': buypoint_image,
'forced_checkin': forcedCheckin,
'recipt_times': recipt_times,
'tags': tags
};
}
}
Map<String, dynamic> toMap(){
int sel = selected == false ? 0 : 1;
int check = checkedin == false ? 0 : 1;
return {
'name':name,
'address': address,
'phone': phone,
'email': email,
'webcontents': webcontents,
'videos': videos,
'category':category,
'series':series,
'lat':lat,
'lon':lon,
'sub_loc_id': sub_loc_id,
'location_id':location_id,
'list_order':list_order,
'photos':photos,
'checkin_radious': checkin_radious,
'auto_checkin': auto_checkin,
'selected': sel,
'checkedin': check,
'cp' : cp,
'checkin_point' : checkin_point,
'buy_point' : buy_point,
'hidden_location' : hidden_location
};
}
}

View File

@ -1,8 +0,0 @@
enum LocationState { noGps, notInCheckin, withinCheckin }
enum GameState { notStarted, startedNotCounted, startedCounted, nodeGoal }
class GameInsStatetance {
LocationState locationState = LocationState.noGps;
GameState gameState = GameState.notStarted;
}

View File

@ -1,47 +0,0 @@
class GpsData {
int id;
String team_name;
String event_code;
double lat;
double lon;
int is_checkin;
int created_at;
int is_synced;
GpsData({
required this.id,
required this.team_name,
required this.event_code,
required this.lat,
required this.lon,
required this.created_at,
this.is_checkin = 0,
this.is_synced = 0,
});
factory GpsData.fromMap(Map<String, dynamic> json) {
return GpsData(
id: json["id"],
team_name: json["team_name"],
event_code: json["event_code"],
lat: json["lat"],
lon: json["lon"],
is_checkin: json["is_checkin"],
created_at: json["created_at"],
is_synced: json["is_synced"] ?? 0,
);
}
Map<String, dynamic> toMap() {
return {
'id': id,
'team_name': team_name,
'event_code': event_code,
'lat': lat,
'lon': lon,
'is_checkin': is_checkin,
'created_at': created_at,
'is_synced': is_synced,
};
}
}

View File

@ -0,0 +1,591 @@
// ignore_for_file: public_member_api_docs, sort_constructors_first
import 'dart:convert';
import 'package:flutter/foundation.dart';
import 'package:unicode/unicode.dart';
class LocationResponse {
List<Feature>? features;
String? type;
LocationResponse({
this.features,
this.type,
});
LocationResponse copyWith({
List<Feature>? features,
String? type,
}) {
return LocationResponse(
features: features ?? this.features,
type: type ?? this.type,
);
}
Map<String, dynamic> toMap() {
return {
'features': features?.map((x) => x.toMap()).toList(),
'type': type,
};
}
factory LocationResponse.fromMap(Map<String, dynamic> map) {
return LocationResponse(
features: List<Feature>.from(map['features']?.map((x) => Feature.fromMap(x)) ?? const []),
type: map['type'],
);
}
String toJson() => json.encode(toMap());
factory LocationResponse.fromJson(String source) =>
LocationResponse.fromMap(json.decode(source));
@override
String toString() => 'LocationResponse(features: $features, type: $type)';
@override
bool operator ==(Object other) {
if (identical(this, other)) return true;
return other is LocationResponse &&
listEquals(other.features, features) &&
other.type == type;
}
@override
int get hashCode => features.hashCode ^ type.hashCode;
}
class Feature {
Geometry? geometry;
int? id;
Properties? properties;
String? type;
int? location_id;
double? latitude;
double? longitude;
Feature({
this.geometry,
this.id,
this.properties,
this.type,
this.location_id,
this.latitude,
this.longitude
});
Map<String, dynamic> toMap() {
return <String, dynamic>{
'id': id,
'geometry': geometry?.toJson(),
'properties': properties?.toJson(),
'type': type,
// Use the first coordinate as latitude and longitude.
// You may need to adjust this based on your actual data structure.
'location_id': properties?.location_id,
'latitude': geometry?.coordinates?.first?.last,
'longitude': geometry?.coordinates?.first?.first,
};
}
// factory Feature.fromMap(Map<String, dynamic> map) {
// return Feature(
// geometry: Geometry.fromMap(map['geometry']),
// id: map['id'],
// properties: Properties.fromMap(map['properties']),
// type: map['type'],
// );
// }
factory Feature.fromMap(Map<String, dynamic> map) {
Geometry? geometry = map['geometry'] != null
? Geometry.fromMap(map['geometry'])
: null;
double? latitude = geometry?.coordinates?.isNotEmpty ?? false ? geometry!.coordinates![0][0] : null;
double? longitude = geometry?.coordinates?.isNotEmpty ?? false ? geometry!.coordinates![0][1] : null;
return Feature(
id: map['id'] as int?,
geometry: Geometry.fromMap(map['geometry']),
properties: Properties.fromMap(map['properties']),
type: map['type'],
location_id: Properties.fromMap(map['properties']).location_id,
latitude: latitude,
longitude: longitude,
);
}
String toJson() => json.encode(toMap());
factory Feature.fromJson(String source) =>
Feature.fromMap(json.decode(source));
@override
String toString() {
return 'Feature(geometry: $geometry, id: $id, properties: $properties, type: $type)';
}
@override
bool operator ==(Object other) {
if (identical(this, other)) return true;
return other is Feature &&
other.geometry == geometry &&
other.id == id &&
other.properties == properties &&
other.type == type;
}
@override
int get hashCode {
return geometry.hashCode ^ id.hashCode ^ properties.hashCode ^ type.hashCode;
}
}
class Geometry {
List<List<double>>? coordinates;
String? type;
Geometry({
this.coordinates,
this.type,
});
Geometry copyWith({
List<List<double>>? coordinates,
String? type,
}) {
return Geometry(
coordinates: coordinates ?? this.coordinates,
type: type ?? this.type,
);
}
Map<String, dynamic> toMap() {
return {
'coordinates': coordinates,
'type': type,
};
}
factory Geometry.fromMap(Map<String, dynamic> map) {
return Geometry(
coordinates: map['coordinates'] != null
? List<List<double>>.from(
map['coordinates'].map((x) => List<double>.from(x.map((x) => x.toDouble()))))
: null,
type: map['type'],
);
}
String toJson() => json.encode(toMap());
factory Geometry.fromJson(String source) =>
Geometry.fromMap(json.decode(source) as Map<String, dynamic>);
@override
String toString() => 'Geometry(coordinates: $coordinates, type: $type)';
@override
bool operator ==(covariant Geometry other) {
if (identical(this, other)) return true;
return listEquals(other.coordinates, coordinates) && other.type == type;
}
@override
int get hashCode => coordinates.hashCode ^ type.hashCode;
}
class Properties {
final int location_id;
final String? sub_loc_id;
final double? cp;
final String? location_name;
final String? category;
final String? subcategory;
final String? zip;
final String? address;
final String? prefecture;
final String? area;
final String? city;
final double? latitude;
final double? longitude;
final String? photos;
final String? videos;
final String? webcontents;
final String? status;
final String? portal;
final String? group;
final String? phone;
final String? fax;
final String? email;
final String? facility;
final String? remark;
final String? tags;
final dynamic? event_name;
final bool? event_active;
final bool? hidden_location;
final bool? auto_checkin;
final double? checkin_radius;
final double? checkin_point;
final double? buy_point;
final String? evaluation_value;
final bool? shop_closed;
final bool? shop_shutdown;
final String? opening_hours_mon;
final String? opening_hours_tue;
final String? opening_hours_wed;
final String? opening_hours_thu;
final String? opening_hours_fri;
final String? opening_hours_sat;
final String? opening_hours_sun;
final String? parammeters;
Properties({
required this.location_id,
this.sub_loc_id,
this.cp,
this.location_name,
this.category,
this.subcategory,
this.zip,
this.address,
this.prefecture,
this.area,
this.city,
this.latitude,
this.longitude,
this.photos,
this.videos,
this.webcontents,
this.status,
this.portal,
this.group,
this.phone,
this.fax,
this.email,
this.facility,
this.remark,
this.tags,
this.event_name,
this.event_active,
this.hidden_location,
this.auto_checkin,
this.checkin_radius,
this.checkin_point,
this.buy_point,
this.evaluation_value,
this.shop_closed,
this.shop_shutdown,
this.opening_hours_mon,
this.opening_hours_tue,
this.opening_hours_wed,
this.opening_hours_thu,
this.opening_hours_fri,
this.opening_hours_sat,
this.opening_hours_sun,
this.parammeters,
});
String toJson() => json.encode(toMap());
Properties copyWith({
int? location_id,
String? sub_loc_id,
double? cp,
String? location_name,
String? category,
String? subcategory,
String? zip,
String? address,
String? prefecture,
String? area,
String? city,
double? latitude,
double? longitude,
String? photos,
String? videos,
String? webcontents,
String? status,
String? portal,
String? group,
String? phone,
String? fax,
String? email,
String? facility,
String? remark,
String? tags,
dynamic? event_name,
bool? event_active,
bool? hidden_location,
bool? auto_checkin,
double? checkin_radius,
double? checkin_point,
double? buy_point,
String? evaluation_value,
bool? shop_closed,
bool? shop_shutdown,
String? opening_hours_mon,
String? opening_hours_tue,
String? opening_hours_wed,
String? opening_hours_thu,
String? opening_hours_fri,
String? opening_hours_sat,
String? opening_hours_sun,
String? parammeters,
}) {
return Properties(
location_id: location_id ?? this.location_id,
sub_loc_id: sub_loc_id ?? this.sub_loc_id,
cp: cp ?? this.cp,
location_name: location_name ?? this.location_name,
category: category ?? this.category,
subcategory: subcategory ?? this.subcategory,
zip: zip ?? this.zip,
address: address ?? this.address,
prefecture: prefecture ?? this.prefecture,
area: area ?? this.area,
city: city ?? this.city,
latitude: latitude ?? this.latitude,
longitude: longitude ?? this.longitude,
photos: photos ?? this.photos,
videos: videos ?? this.videos,
webcontents: webcontents ?? this.webcontents,
status: status ?? this.status,
portal: portal ?? this.portal,
group: group ?? this.group,
phone: phone ?? this.phone,
fax: fax ?? this.fax,
email: email ?? this.email,
facility: facility ?? this.facility,
remark: remark ?? this.remark,
tags: tags ?? this.tags,
event_name: event_name ?? this.event_name,
event_active: event_active ?? this.event_active,
hidden_location: hidden_location ?? this.hidden_location,
auto_checkin: auto_checkin ?? this.auto_checkin,
checkin_radius: checkin_radius ?? this.checkin_radius,
checkin_point: checkin_point ?? this.checkin_point,
buy_point: buy_point ?? this.buy_point,
evaluation_value: evaluation_value ?? this.evaluation_value,
shop_closed: shop_closed ?? this.shop_closed,
shop_shutdown: shop_shutdown ?? this.shop_shutdown,
opening_hours_mon: opening_hours_mon ?? this.opening_hours_mon,
opening_hours_tue: opening_hours_tue ?? this.opening_hours_tue,
opening_hours_wed: opening_hours_wed ?? this.opening_hours_wed,
opening_hours_thu: opening_hours_thu ?? this.opening_hours_thu,
opening_hours_fri: opening_hours_fri ?? this.opening_hours_fri,
opening_hours_sat: opening_hours_sat ?? this.opening_hours_sat,
opening_hours_sun: opening_hours_sun ?? this.opening_hours_sun,
parammeters: parammeters ?? this.parammeters,
);
}
Map<String, dynamic> toMap() {
return <String, dynamic>{
'location_id': location_id,
'sub_loc_id': sub_loc_id,
'cp': cp,
'location_name': location_name,
'category': category,
'subcategory': subcategory,
'zip': zip,
'address': address,
'prefecture': prefecture,
'area': area,
'city': city,
'latitude': latitude,
'longitude': longitude,
'photos': photos,
'videos': videos,
'webcontents': webcontents,
'status': status,
'portal': portal,
'group': group,
'phone': phone,
'fax': fax,
'email': email,
'facility': facility,
'remark': remark,
'tags': tags,
'event_name': event_name,
'event_active': event_active,
'hidden_location': hidden_location,
'auto_checkin': auto_checkin,
'checkin_radius': checkin_radius,
'checkin_point': checkin_point,
'buy_point': buy_point,
'evaluation_value': evaluation_value,
'shop_closed': shop_closed,
'shop_shutdown': shop_shutdown,
'opening_hours_mon': opening_hours_mon,
'opening_hours_tue': opening_hours_tue,
'opening_hours_wed': opening_hours_wed,
'opening_hours_thu': opening_hours_thu,
'opening_hours_fri': opening_hours_fri,
'opening_hours_sat': opening_hours_sat,
'opening_hours_sun': opening_hours_sun,
'parammeters': parammeters,
};
}
factory Properties.fromMap(Map<String, dynamic> map) {
return Properties(
location_id: map['location_id'] as int,
sub_loc_id: map['sub_loc_id'] != null ? map['sub_loc_id'] as String : null,
cp: map['cp'] != null ? map['cp'] as double : null,
location_name: map['location_name'] != null ? map['location_name'] as String : null,
category: map['category'] != null ? map['category'] as String : null,
subcategory: map['subcategory'] != null ? map['subcategory'] as String : null,
zip: map['zip'] != null ? map['zip'] as String : null,
address: map['address'] != null ? map['address'] as String : null,
prefecture: map['prefecture'] != null ? map['prefecture'] as String : null,
area: map['area'] != null ? map['area'] as String : null,
city: map['city'] != null ? map['city'] as String : null,
latitude: map['latitude'] != null ? map['latitude'] as double : null,
longitude: map['longitude'] != null ? map['longitude'] as double : null,
photos: map['photos'] != null ? map['photos'] as String : null,
videos: map['videos'] != null ? map['videos'] as String : null,
webcontents: map['webcontents'] != null ? map['webcontents'] as String : null,
status: map['status'] != null ? map['status'] as String : null,
portal: map['portal'] != null ? map['portal'] as String : null,
group: map['group'] != null ? map['group'] as String : null,
phone: map['phone'] != null ? map['phone'] as String : null,
fax: map['fax'] != null ? map['fax'] as String : null,
email: map['email'] != null ? map['email'] as String : null,
facility: map['facility'] != null ? map['facility'] as String : null,
remark: map['remark'] != null ? map['remark'] as String : null,
tags: map['tags'] != null ? map['tags'] as String : null,
event_name: map['event_name'] != null ? map['event_name'] as dynamic : null,
event_active: map['event_active'] != null ? map['event_active'] as bool : null,
hidden_location: map['hidden_location'] != null ? map['hidden_location'] as bool : null,
auto_checkin: map['auto_checkin'] != null ? map['auto_checkin'] as bool : null,
checkin_radius: map['checkin_radius'] != null ? map['checkin_radius'] as double : null,
checkin_point: map['checkin_point'] != null ? map['checkin_point'] as double : null,
buy_point: map['buy_point'] != null ? map['buy_point'] as double : null,
evaluation_value: map['evaluation_value'] != null ? map['evaluation_value'] as String : null,
shop_closed: map['shop_closed'] != null ? map['shop_closed'] as bool : null,
shop_shutdown: map['shop_shutdown'] != null ? map['shop_shutdown'] as bool : null,
opening_hours_mon: map['opening_hours_mon'] != null ? map['opening_hours_mon'] as String : null,
opening_hours_tue: map['opening_hours_tue'] != null ? map['opening_hours_tue'] as String : null,
opening_hours_wed: map['opening_hours_wed'] != null ? map['opening_hours_wed'] as String : null,
opening_hours_thu: map['opening_hours_thu'] != null ? map['opening_hours_thu'] as String : null,
opening_hours_fri: map['opening_hours_fri'] != null ? map['opening_hours_fri'] as String : null,
opening_hours_sat: map['opening_hours_sat'] != null ? map['opening_hours_sat'] as String : null,
opening_hours_sun: map['opening_hours_sun'] != null ? map['opening_hours_sun'] as String : null,
parammeters: map['parammeters'] != null ? map['parammeters'] as String : null,
);
}
factory Properties.fromJson(String source) => Properties.fromMap(json.decode(source) as Map<String, dynamic>);
@override
String toString() {
return 'Properties(location_id: $location_id, sub_loc_id: $sub_loc_id, cp: $cp, location_name: $location_name, category: $category, subcategory: $subcategory, zip: $zip, address: $address, prefecture: $prefecture, area: $area, city: $city, latitude: $latitude, longitude: $longitude, photos: $photos, videos: $videos, webcontents: $webcontents, status: $status, portal: $portal, group: $group, phone: $phone, fax: $fax, email: $email, facility: $facility, remark: $remark, tags: $tags, event_name: $event_name, event_active: $event_active, hidden_location: $hidden_location, auto_checkin: $auto_checkin, checkin_radius: $checkin_radius, checkin_point: $checkin_point, buy_point: $buy_point, evaluation_value: $evaluation_value, shop_closed: $shop_closed, shop_shutdown: $shop_shutdown, opening_hours_mon: $opening_hours_mon, opening_hours_tue: $opening_hours_tue, opening_hours_wed: $opening_hours_wed, opening_hours_thu: $opening_hours_thu, opening_hours_fri: $opening_hours_fri, opening_hours_sat: $opening_hours_sat, opening_hours_sun: $opening_hours_sun, parammeters: $parammeters)';
}
@override
bool operator ==(covariant Properties other) {
if (identical(this, other)) return true;
return
other.location_id == location_id &&
other.sub_loc_id == sub_loc_id &&
other.cp == cp &&
other.location_name == location_name &&
other.category == category &&
other.subcategory == subcategory &&
other.zip == zip &&
other.address == address &&
other.prefecture == prefecture &&
other.area == area &&
other.city == city &&
other.latitude == latitude &&
other.longitude == longitude &&
other.photos == photos &&
other.videos == videos &&
other.webcontents == webcontents &&
other.status == status &&
other.portal == portal &&
other.group == group &&
other.phone == phone &&
other.fax == fax &&
other.email == email &&
other.facility == facility &&
other.remark == remark &&
other.tags == tags &&
other.event_name == event_name &&
other.event_active == event_active &&
other.hidden_location == hidden_location &&
other.auto_checkin == auto_checkin &&
other.checkin_radius == checkin_radius &&
other.checkin_point == checkin_point &&
other.buy_point == buy_point &&
other.evaluation_value == evaluation_value &&
other.shop_closed == shop_closed &&
other.shop_shutdown == shop_shutdown &&
other.opening_hours_mon == opening_hours_mon &&
other.opening_hours_tue == opening_hours_tue &&
other.opening_hours_wed == opening_hours_wed &&
other.opening_hours_thu == opening_hours_thu &&
other.opening_hours_fri == opening_hours_fri &&
other.opening_hours_sat == opening_hours_sat &&
other.opening_hours_sun == opening_hours_sun &&
other.parammeters == parammeters;
}
@override
int get hashCode {
return location_id.hashCode ^
sub_loc_id.hashCode ^
cp.hashCode ^
location_name.hashCode ^
category.hashCode ^
subcategory.hashCode ^
zip.hashCode ^
address.hashCode ^
prefecture.hashCode ^
area.hashCode ^
city.hashCode ^
latitude.hashCode ^
longitude.hashCode ^
photos.hashCode ^
videos.hashCode ^
webcontents.hashCode ^
status.hashCode ^
portal.hashCode ^
group.hashCode ^
phone.hashCode ^
fax.hashCode ^
email.hashCode ^
facility.hashCode ^
remark.hashCode ^
tags.hashCode ^
event_name.hashCode ^
event_active.hashCode ^
hidden_location.hashCode ^
auto_checkin.hashCode ^
checkin_radius.hashCode ^
checkin_point.hashCode ^
buy_point.hashCode ^
evaluation_value.hashCode ^
shop_closed.hashCode ^
shop_shutdown.hashCode ^
opening_hours_mon.hashCode ^
opening_hours_tue.hashCode ^
opening_hours_wed.hashCode ^
opening_hours_thu.hashCode ^
opening_hours_fri.hashCode ^
opening_hours_sat.hashCode ^
opening_hours_sun.hashCode ^
parammeters.hashCode;
}
}

View File

@ -1,6 +0,0 @@
import 'package:flutter_map/flutter_map.dart';
class MapStateInstance {
MapController? mapController;
LatLngBounds? currentBounds;
}

45
lib/model/user.dart Normal file
View File

@ -0,0 +1,45 @@
class AuthResponse {
final User user;
final String token;
AuthResponse({required this.user, required this.token});
factory AuthResponse.fromJson(Map<String, dynamic> json) {
return AuthResponse(
user: User.fromJson(json['user']),
token: json['token'],
);
}
}
class User {
final int id;
final String email;
final bool isRogaining;
final String group;
final String zekkenNumber;
final String eventCode;
final String teamName;
User({
required this.id,
required this.email,
required this.isRogaining,
required this.group,
required this.zekkenNumber,
required this.eventCode,
required this.teamName,
});
factory User.fromJson(Map<String, dynamic> json) {
return User(
id: json['id'],
email: json['email'],
isRogaining: json['is_rogaining'],
group: json['group'],
zekkenNumber: json['zekken_number'],
eventCode: json['event_code'],
teamName: json['team_name'],
);
}
}

View File

@ -1,229 +0,0 @@
import 'package:flutter/material.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:google_fonts/google_fonts.dart';
import 'package:keyboard_dismisser/keyboard_dismisser.dart';
import 'package:rogapp/model/auth_user.dart';
import 'package:rogapp/nrog/pages/home_page.dart';
import 'package:rogapp/provider/auth_provider.dart';
import 'package:rogapp/services/auth_service.dart';
import 'package:rogapp/widgets/c_form_text_field.dart';
import 'package:rogapp/widgets/c_password_text_filed.dart';
class AuthPage extends ConsumerStatefulWidget {
const AuthPage({super.key});
@override
ConsumerState<AuthPage> createState() => _AuthPageState();
}
class _AuthPageState extends ConsumerState<AuthPage> {
final _formkey = GlobalKey<FormState>();
final FocusNode focusEmail = FocusNode();
final FocusNode focusPwd = FocusNode();
var _authMode = 'login';
bool _isLoginProgress = false;
final TextEditingController _emailTextEditingController =
TextEditingController();
final TextEditingController _passwordTextEditingController =
TextEditingController();
@override
void initState() {
super.initState();
_emailTextEditingController.addListener(() => setState(() {}));
WidgetsBinding.instance.addPostFrameCallback((_) {
checkUser();
});
}
void _submit() async {
setState(() {
_isLoginProgress = true;
});
if (_formkey.currentState!.validate()) {
AuthService authService = AuthService();
AuthUser? user = await authService.userLogin(
_emailTextEditingController.text,
_passwordTextEditingController.text);
if (user != null) {
setState(() {
ref.read(authUserStateProvider.notifier).addLogin(user);
});
}
}
setState(() {
_isLoginProgress = false;
});
}
Future<void> _submitToken(String token) async {
setState(() {
_isLoginProgress = true;
});
AuthService authService = AuthService();
AuthUser? user = await authService.userFromToken(token);
//////////////print("---user is ${user} ---");
if (user != null) {
setState(() {
_isLoginProgress = false;
ref.read(authUserStateProvider.notifier).addLogin(user);
});
} else {}
}
void checkUser() async {
String? token =
await ref.read(authUserStateProvider.notifier).tokenFromDevice();
//////////////print("--- red token is ${token} ---");
if (token != null) {
await _submitToken(token);
final id = ref.read(authUserStateProvider).id;
if (id != null) {
if (context.mounted) {
Navigator.of(context)
.push(MaterialPageRoute(builder: (ctx) => const HomePage()));
}
}
}
return;
}
@override
Widget build(BuildContext context) {
if (ref.read(authUserStateProvider).id != null) {
Navigator.of(context)
.push(MaterialPageRoute(builder: (ctx) => const HomePage()));
}
return Scaffold(
resizeToAvoidBottomInset: true,
body: KeyboardDismisser(
gestures: const [
GestureType.onTap,
//GestureType.onVerticalDragDown
],
child: Center(
child: SizedBox(
child: Stack(
clipBehavior: Clip.none,
children: [
buildAuthCard(),
buildLogo(),
],
),
)),
),
);
}
Positioned buildLogo() {
return Positioned(
top: -170,
left: MediaQuery.of(context).size.width / 2 - 100,
child: Center(
child: Container(
alignment: Alignment.center,
width: 200,
height: 200,
decoration: const BoxDecoration(
shape: BoxShape.circle,
image: DecorationImage(
image: AssetImage('assets/images/appicon.png'),
fit: BoxFit.fill),
),
),
),
);
}
Widget buildAuthCard() {
return Card(
child: Column(
mainAxisSize: MainAxisSize.min,
mainAxisAlignment: MainAxisAlignment.end,
children: [
Form(
key: _formkey,
child: Padding(
padding: const EdgeInsets.only(
top: 40, bottom: 10, left: 12, right: 12),
child: Column(
children: [
Padding(
padding: const EdgeInsets.all(10.0),
child: CFormTextField(
cFocus: focusEmail,
cController: _emailTextEditingController),
),
Padding(
padding: const EdgeInsets.all(10),
child: CPasswordTextField(
cController: _passwordTextEditingController,
cFocusNode: focusPwd,
),
),
const SizedBox(
height: 12,
),
buildControlls(),
// SizedBox(height: MediaQuery.of(context).viewInsets.bottom,)
],
),
),
),
],
),
);
}
Widget buildControlls() {
if (_isLoginProgress) {
return const Center(
child: CircularProgressIndicator(),
);
}
final usr = ref.read(authUserStateProvider);
return Column(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Row(
mainAxisAlignment: MainAxisAlignment.end,
children: [
Padding(
padding: const EdgeInsets.only(right: 12.0),
child: ElevatedButton(
onPressed: _submit,
child: Text(_authMode == "login" ? "Submit" : "Register",
style: GoogleFonts.lato(
color: Theme.of(context).colorScheme.secondary))),
)
],
),
TextButton(
onPressed: () {
setState(() {
if (_authMode == 'login') {
_authMode = 'register';
} else {
_authMode = 'login';
}
});
},
child: Text(
_authMode == "login"
? "${usr.id} Dont have account, please Register"
: "Already Registered, Login",
style: GoogleFonts.lato(
color: Theme.of(context).colorScheme.primary,
decoration: TextDecoration.underline,
fontSize: 16,
fontWeight: FontWeight.bold),
),
),
],
);
}
}

View File

@ -1,119 +0,0 @@
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:flutter_map/flutter_map.dart';
import 'package:flutter_map_location_marker/flutter_map_location_marker.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:latlong2/latlong.dart';
import 'package:rogapp/provider/map_state_provider.dart';
import 'package:rogapp/widgets/base_layer_widget.dart';
class HomePage extends ConsumerStatefulWidget {
const HomePage({super.key});
@override
ConsumerState<HomePage> createState() => _HomePageState();
}
class _HomePageState extends ConsumerState<HomePage> {
StreamSubscription? subscription;
@override
void initState() {
super.initState();
}
@override
Widget build(BuildContext context) {
final mapStateInstance = ref.watch(mapStateNotifierProvider);
return Scaffold(
//drawer: DrawerPage(),
appBar: AppBar(
title: const Text("Rogaining"),
actions: [
IconButton(
onPressed: () {
//Get.toNamed(AppPages.HISTORY);
},
icon: const Icon(Icons.history)),
IconButton(
onPressed: () {
// final tk = indexController.currentUser[0]["token"];
// if (tk != null) {
// destinationController.fixMapBound(tk);
// }
},
icon: const Icon(Icons.refresh)),
InkWell(
onTap: () {
//Get.toNamed(AppPages.SEARCH);
},
child: Container(
height: 32,
width: 75,
decoration: BoxDecoration(
color: Colors.blue,
borderRadius: BorderRadius.circular(25),
),
child: const Center(
child: Icon(Icons.search),
),
),
),
//CatWidget(indexController: indexController,),
],
),
body: Center(
child: FlutterMap(
mapController: mapStateInstance.mapController,
options: MapOptions(
maxZoom: 18.4,
onMapReady: () {
// indexController.is_mapController_loaded.value = true;
subscription = mapStateInstance.mapController?.mapEventStream
.listen((MapEvent mapEvent) {
if (mapEvent is MapEventMoveStart) {
//print(DateTime.now().toString() + ' [MapEventMoveStart] START');
// do something
}
// if (mapEvent is MapEventMoveEnd &&
// indexController.currentUser.isEmpty) {
//print(DateTime.now().toString() + ' [MapEventMoveStart] END');
// indexController.loadLocationsBound();
//indexController.rogMapController!.move(c.center, c.zoom);
// }
});
},
center: LatLng(37.15319600454702, 139.58765950528198),
//bounds:
zoom: 18,
interactiveFlags: InteractiveFlag.pinchZoom | InteractiveFlag.drag,
onPositionChanged: (MapPosition pos, isvalue) {
//indexController.currentBound = [pos.bounds!];
},
// onTap: (_, __) => popupController
// .hideAllPopups(), // Hide popup when the map is tapped.
),
children: [
const BaseLayer(),
CurrentLocationLayer(
followOnLocationUpdate: FollowOnLocationUpdate.once,
turnOnHeadingUpdate: TurnOnHeadingUpdate.never,
style: const LocationMarkerStyle(
marker: DefaultLocationMarker(
child: Icon(
Icons.navigation,
color: Colors.yellowAccent,
),
),
markerSize: Size(27, 27),
markerDirection: MarkerDirection.heading,
),
),
const MarkerLayer(markers: [])
],
),
),
);
}
}

View File

@ -1,126 +0,0 @@
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:permission_handler/permission_handler.dart';
import 'package:rogapp/nrog/pages/auth_page.dart';
class PermissionPage extends StatefulWidget {
const PermissionPage({super.key});
@override
State<PermissionPage> createState() => _PermissionPageState();
}
class _PermissionPageState extends State<PermissionPage> {
bool hasNavigated = false;
@override
void initState() {
super.initState();
WidgetsBinding.instance.addPostFrameCallback((_) {
_checkPermissionStatus();
});
}
_checkPermissionStatus() async {
PermissionStatus status = await Permission.location.status;
if (status.isGranted == false) {
if (context.mounted) {
showAlert(context);
}
} else if (status.isPermanentlyDenied) {
await requestPermission();
} else {
if (mounted) {
Navigator.of(context)
.push(MaterialPageRoute(builder: (_) => const AuthPage()));
}
}
}
@override
Widget build(BuildContext context) {
return const Scaffold(
body: Text(""),
);
}
void showAlert(BuildContext context) {
showDialog(
context: context,
builder: (_) => AlertDialog(
title: const Text('ロケーション許可'),
content: const SingleChildScrollView(
child: ListBody(
children: <Widget>[
Text('このアプリでは、位置情報の収集を行います。'),
Text(
'岐阜ナビアプリではチェックポイントの自動チェックインの機能を可能にするために、現在地のデータが収集されます。アプリを閉じている時や、使用していないときにも収集されます。位置情報は、個人を特定できない統計的な情報として、ユーザーの個人情報とは一切結びつかない形で送信されます。お知らせの配信、位置情報の利用を許可しない場合は、この後表示されるダイアログで「許可しない」を選択してください。'),
],
),
),
actions: <Widget>[
ElevatedButton(
child: const Text('OK'),
onPressed: () {
requestPermission();
},
),
],
));
}
Future<void> requestPermission() async {
PermissionStatus permission = await Permission.location.status;
if (permission == PermissionStatus.permanentlyDenied) {
showPermanentAlert();
} else {
PermissionStatus newPermission = await Permission.location.request();
if (newPermission != PermissionStatus.granted) {
exit(0);
} else {
if (context.mounted) {
Navigator.of(context)
.push(MaterialPageRoute(builder: (_) => const AuthPage()));
}
}
}
}
void showPermanentAlert() {
showDialog(
context: context,
builder: (_) => AlertDialog(
title: const Text('無効'),
content: const SingleChildScrollView(
child: ListBody(
children: <Widget>[
Text('位置情報が無効になっています'),
Text(
'このアプリケーションへの位置情報アクセスが無効になっています。続行するには設定>プライバシーとセキュリティ>位置情報サービス>岐阜ナビ で有効にしてください。'),
],
),
),
actions: <Widget>[
ElevatedButton(
child: const Text('OK'),
onPressed: () async {
await openAppSettings().then(
(value) async {
if (value) {
if (await Permission
.location.status.isPermanentlyDenied ==
true &&
await Permission.location.status.isGranted ==
false) {
requestPermission(); /* opens app settings until permission is granted */
}
}
},
);
},
),
],
));
}
}

View File

@ -4,285 +4,124 @@ import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:intl/intl.dart';
import 'package:rogapp/model/destination.dart';
import 'package:rogapp/model/location_response.dart';
import 'package:rogapp/pages/destination/destination_controller.dart';
import 'package:rogapp/pages/index/index_controller.dart';
import 'package:rogapp/services/external_service.dart';
import 'package:rogapp/utils/const.dart';
String getTagText(bool isRecept, String? tags) {
if (tags == null || tags.isEmpty) {
return "";
}
List<String> tts = tags.split(" ");
List<String> ttt = tags.split(" ");
if (isRecept) {
if (ttt.length > tts.length && ttt.length > 1) {
return ttt[1];
}
}
if (!isRecept) {
if (ttt.length > tts.length && ttt.length > 1) {
return ttt[0];
}
}
if (!isRecept) {
return tts[0];
}
return "";
}
// 要修正:画像の読み込みエラーが発生した場合のエラーハンドリングが不十分です。エラーメッセージを表示するなどの処理を追加してください。
//
Image getDisplayImage(Destination destination) {
String serverUrl = ConstValues.currentServer();
Image img = Image.asset("assets/images/empty_image.png");
if (destination.phone == null) {
return img;
}
if (destination.photos!.contains('http')) {
return Image(
image: NetworkImage(
destination.phone!,
),
errorBuilder:
(BuildContext context, Object exception, StackTrace? stackTrace) {
return Image.asset("assets/images/empty_image.png");
},
);
} else {
return Image(
image: NetworkImage(
'$serverUrl/media/compressed/${destination.photos}',
),
errorBuilder:
(BuildContext context, Object exception, StackTrace? stackTrace) {
return Image.asset("assets/images/empty_image.png");
},
);
}
}
ImageProvider getFinishImage() {
DestinationController destinationController =
Get.find<DestinationController>();
if (destinationController.photos.isNotEmpty) {
return FileImage(destinationController.photos[0]);
} else {
return const AssetImage('assets/images/empty_image.png');
}
}
ImageProvider getReceiptImage() {
DestinationController destinationController =
Get.find<DestinationController>();
if (destinationController.photos.isNotEmpty) {
return FileImage(destinationController.photos[0]);
} else {
return const AssetImage('assets/images/money.png');
}
}
class CameraPage extends StatelessWidget {
bool? manulaCheckin = false;
bool? buyPointPhoto = false;
Destination destination;
Destination? dbDest;
String? initImage;
CameraPage(
{Key? key,
required this.destination,
this.dbDest,
this.manulaCheckin,
this.buyPointPhoto,
this.initImage})
: super(key: key);
DestinationController destinationController =
Get.find<DestinationController>();
Feature? destination;
CameraPage({Key? key, this.destination}) : super(key: key);
DestinationController destinationController = Get.find<DestinationController>();
IndexController indexController = Get.find<IndexController>();
var settingGoal = false.obs;
Timer? timer;
// 要修正:エラーハンドリングが不十分です。例外が発生した場合の処理を追加することをお勧めします。
//
Widget getAction(BuildContext context) {
//print("----cccheckin is --- ${dbDest?.checkedin} ----");
if (manulaCheckin == true) {
return Row(
mainAxisSize: MainAxisSize.min,
mainAxisAlignment: MainAxisAlignment.spaceAround,
children: [
ElevatedButton(
onPressed: () {
destinationController.openCamera(context, destination);
},
child: const Text("撮影")),
Obx(() => destinationController.photos.isNotEmpty
? ElevatedButton(
style: ElevatedButton.styleFrom(backgroundColor: Colors.red),
onPressed: () async {
await destinationController.makeCheckin(destination, true,
destinationController.photos[0].path);
Get.back();
destinationController.rogainingCounted.value = true;
destinationController.skipGps = false;
destinationController.isPhotoShoot.value = false;
Get.snackbar("チェックインしました。",
"${destination.sub_loc_id} : ${destination.name}");
},
child: const Text("チェックイン"))
: Container())
],
);
ImageProvider getFinishImage(){
if(destinationController.photos.isNotEmpty){
return FileImage(destinationController.photos[0]);
}
else{
return AssetImage('assets/images/empty_image.png');
}
}
if (destinationController.isAtGoal.value &&
destinationController.isInRog.value &&
destination.cp == -1) {
//goal
Widget getAction(BuildContext context){
if(destinationController.is_at_goal.value && destinationController.is_in_rog.value){
return Row(
mainAxisAlignment: MainAxisAlignment.spaceAround,
children: [
ElevatedButton(
onPressed: () {
if (settingGoal.value == false) {
destinationController.openCamera(context, destination);
}
},
child: Text("take_photo of the clock".tr)),
Obx(() => destinationController.photos.isNotEmpty
? settingGoal.value == false
? ElevatedButton(
style:
ElevatedButton.styleFrom(backgroundColor: Colors.red),
onPressed: () async {
// print(
// "----- user isss ${indexController.currentUser[0]} -----");
settingGoal.value = true;
try {
int userId =
indexController.currentUser[0]["user"]["id"];
//print("--- Pressed -----");
String team = indexController.currentUser[0]["user"]
['team_name'];
//print("--- _team : ${_team}-----");
String eventCode = indexController.currentUser[0]
["user"]["event_code"];
//print("--- _event_code : ${_event_code}-----");
String token =
indexController.currentUser[0]["token"];
//print("--- _token : ${_token}-----");
DateTime now = DateTime.now();
String formattedDate =
DateFormat('yyyy-MM-dd HH:mm:ss').format(now);
await ExternalService()
.makeGoal(
userId,
token,
team,
destinationController.photos[0].path,
formattedDate,
eventCode)
.then((value) {
// print(
// "---called ext api ${value['status']} ------");
if (value['status'] == 'OK') {
Get.back();
destinationController.skipGps = false;
Get.snackbar("目標が保存されました", "目標が正常に追加されました");
destinationController.resetRogaining(
isgoal: true);
} else {
//print("---- status ${value['status']} ---- ");
Get.snackbar("目標が追加されていません", "please_try_again");
}
});
} on Exception catch (_) {
settingGoal.value = false;
} finally {
settingGoal.value = false;
}
},
child: Text("finish_goal".tr))
: const Center(
child: CircularProgressIndicator(),
)
: Container())
],
);
} else if (destinationController.isInRog.value &&
dbDest?.checkedin != null &&
destination.cp != -1 &&
dbDest?.checkedin == true) {
//make buypoint image
mainAxisAlignment: MainAxisAlignment.spaceAround,
children: [
ElevatedButton(
onPressed: (){
destinationController.openCamera(context);
},
child: Text("take_photo of the clock".tr)
),
Obx(() =>
destinationController.photos.isNotEmpty ?
ElevatedButton(
style: ElevatedButton.styleFrom(
primary: Colors.red
),
onPressed: (){
int user_id = indexController.currentUser[0]["user"]["id"];
//print("--- Pressed -----");
String _team = indexController.currentUser[0]["user"]['team_name'];
//print("--- _team : ${_team}-----");
String _event_code = indexController.currentUser[0]["user"]["event_code"];
//print("--- _event_code : ${_event_code}-----");
String _token = indexController.currentUser[0]["token"];
//print("--- _token : ${_token}-----");
DateTime now = DateTime.now();
String formattedDate = DateFormat('yyyy-MM-dd HH:mm:ss').format(now);
ExternalService().makeGoal(user_id, _token, _team, destinationController.photos[0].path, formattedDate, _event_code).then((value){
print("---called ext api ${value['status']} ------");
if(value['status'] == 'OK'){
Get.back();
destinationController.skip_gps = false;
Get.snackbar("目標が保存されました", "目標が正常に追加されました");
destinationController.resetRogaining();
}
else{
print("---- status ${value['status']} ---- ");
Get.snackbar("目標が追加されていません", "please_try_again");
}
});
},
child: Text("finish_goal".tr)
):
Container()
)
],
);
}
else{
return Row(
mainAxisAlignment: MainAxisAlignment.spaceAround,
children: [
Obx(() => ElevatedButton(
onPressed: () {
destinationController.openCamera(context, destination);
},
child: destinationController.photos.isNotEmpty
? const Text("撮影")
: const Text("撮影"))),
Obx(() => destinationController.photos.isNotEmpty
? ElevatedButton(
style: ElevatedButton.styleFrom(backgroundColor: Colors.red),
onPressed: () async {
// print(
// "##### current destination ${indexController.currentDestinationFeature[0].sub_loc_id} #######");
await destinationController.makeBuyPoint(
destination, destinationController.photos[0].path);
Get.back();
destinationController.rogainingCounted.value = true;
destinationController.skipGps = false;
destinationController.isPhotoShoot.value = false;
Get.snackbar("お買い物加点を行いました。",
"${destination.sub_loc_id} : ${destination.name}");
},
child: const Text("レシートの写真を撮る"))
: Container())
],
);
} else {
return Row(
mainAxisAlignment: MainAxisAlignment.spaceAround,
children: [
Obx(() => ElevatedButton(
onPressed: () {
destinationController.openCamera(context, destination);
},
child: destinationController.photos.isNotEmpty
? const Text("再撮影")
: const Text("撮影"))),
Obx(() => destinationController.photos.isNotEmpty
? ElevatedButton(
style: ElevatedButton.styleFrom(backgroundColor: Colors.red),
onPressed: () async {
// print(
// "##### current destination ${indexController.currentDestinationFeature[0].sub_loc_id} #######");
await destinationController.makeCheckin(
indexController.currentDestinationFeature[0],
true,
destinationController.photos[0].path);
Get.back();
destinationController.rogainingCounted.value = true;
destinationController.skipGps = false;
destinationController.isPhotoShoot.value = false;
Get.snackbar(
"チェックインしました",
indexController.currentDestinationFeature[0].name ??
"");
},
child: const Text("チェックイン"))
: Container())
],
);
mainAxisAlignment: MainAxisAlignment.spaceAround,
children: [
Obx(() =>
ElevatedButton(
onPressed: (){
destinationController.openCamera(context);
},
child: destinationController.photos.length > 0 ? Text("再撮影") : Text("撮影")
)
),
Obx(() =>
destinationController.photos.isNotEmpty ?
ElevatedButton(
style: ElevatedButton.styleFrom(
primary: Colors.red
),
onPressed: (){
print("##### current destination ${indexController.currentDestinationFeature[0].sub_loc_id} #######");
destinationController.makeCheckin(indexController.currentDestinationFeature[0], true, destinationController.photos[0].path);
Get.back();
destinationController.rogaining_counted.value = true;
destinationController.skip_gps = false;
destinationController.is_photo_shoot.value = false;
Get.snackbar("チェックインした", "正常にチェックインしました");
// ExternalService().makeGoal(user_id, _token, _team, destinationController.photos[0].path, formattedDate, _event_code).then((value){
// print("---called ext api ${value['status']} ------");
// if(value['status'] == 'OK'){
// Get.back();
// destinationController.skip_gps = false;
// Get.snackbar("Checked in", "Checked in successfuly");
// }
// else{
// print("---- status ${value['status']} ---- ");
// Get.snackbar("Checkin not added", "please_try_again");
// }
// });
},
child: Text("チェックイン")
):
Container()
)
],
);
}
}
@ -292,232 +131,127 @@ class CameraPage extends StatelessWidget {
@override
Widget build(BuildContext context) {
//print("---- photos ${destination.photos} ----");
if (buyPointPhoto == true) {
//print("--- buy point camera ${destination.toString()}");
return BuyPointCamera(destination: destination);
} else if (destinationController.isInRog.value) {
//print("-----tags camera page----- ${destination.tags}");
//print("--- in normal camera ${destination.toString()}");
if(destinationController.is_in_rog.value){
return Scaffold(
appBar: destinationController.isInRog.value &&
destinationController.rogainingCounted.value == true
? AppBar(
automaticallyImplyLeading: false,
title: destination.cp == -1
? Text("finishing_rogaining".tr)
: Text("${destination.sub_loc_id} : ${destination.name}"),
leading: IconButton(
icon: Text("cancel".tr),
onPressed: () {
Navigator.of(context).pop();
destinationController.skip_10s = true;
timer =
Timer.periodic(const Duration(seconds: 10), (Timer t) {
destinationController.skip_10s = false;
});
},
),
centerTitle: true,
)
: AppBar(
automaticallyImplyLeading: false,
title: Text("${destination.sub_loc_id} : ${destination.name}"),
),
body: SingleChildScrollView(
child: Column(
mainAxisAlignment: MainAxisAlignment.spaceAround,
children: [
Padding(
padding: const EdgeInsets.all(8.0),
child: Center(
child: Obx(
() => Container(
width: MediaQuery.of(context).size.width,
height: 370,
decoration: BoxDecoration(
image: DecorationImage(
image: destinationController.photos.isEmpty
? getDisplayImage(destination).image
: getFinishImage(),
fit: BoxFit.cover)),
),
),
appBar:
destinationController.is_in_rog.value && destinationController.rogaining_counted.value == true ?
AppBar(
title: destination!.properties!.cp == -1 ?
Text("finishing_rogaining".tr)
:
Text("cp_pls_take_photo".tr)
,
leading: IconButton(
icon: Text("cancel".tr),
onPressed: (){
Navigator.of(context).pop();
destinationController.skip_10s = true;
timer = Timer.periodic(Duration(seconds: 10), (Timer t){
destinationController.skip_10s = false;
});
},
),
centerTitle: true,
)
:
AppBar(
title: Text("チェックポイント"),
),
body: Column(
mainAxisAlignment: MainAxisAlignment.spaceAround,
children: [
Padding(
padding: EdgeInsets.all(8.0),
child: Center(
child: Obx(() =>
Container(
width: MediaQuery.of(context).size.width,
height: 370,
decoration: BoxDecoration(
image:
DecorationImage(
image: getFinishImage(),
fit: BoxFit.cover
)
),
),
Padding(
padding: const EdgeInsets.symmetric(vertical: 8.0),
child: Text(getTagText(
false,
destination.tags,
))
// child: Obx(() => destinationController.photos.isEmpty == true
// ? const Text("撮影してチェックインしてください。")
// : const Text("チェックインをタップしてください。")),
),
getAction(context),
],
),
),
),
),
);
} else {
getAction(context),
],
),
);
}
else {
return StartRogaining();
}
}
}
class StartRogaining extends StatelessWidget {
StartRogaining({Key? key}) : super(key: key);
DestinationController destinationController =
Get.find<DestinationController>();
DestinationController destinationController = Get.find<DestinationController>();
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
automaticallyImplyLeading: false,
title: Text(
"Not started yet".tr,
),
title: Text("Not started yet".tr,),
),
body: Center(
body: Container(
child: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text("You have not started rogaining yet.".tr,
style: const TextStyle(fontSize: 24)),
const SizedBox(
height: 40.0,
),
Text("You have not started rogaining yet.".tr, style: TextStyle(fontSize: 24)),
SizedBox(height: 40.0,),
ElevatedButton(
onPressed: () {
onPressed: (){
Get.back();
destinationController.skipGps = false;
destinationController.skip_gps = false;
},
child: const Text("Back"),
child: Text("Back"),
),
],
),
),
),
);
}
}
class BuyPointCamera extends StatelessWidget {
BuyPointCamera({Key? key, required this.destination}) : super(key: key);
class NotAtGoal extends StatelessWidget {
NotAtGoal({Key? key}) : super(key: key);
Destination destination;
DestinationController destinationController =
Get.find<DestinationController>();
DestinationController destinationController = Get.find<DestinationController>();
@override
Widget build(BuildContext context) {
//print("in camera purchase 1 ${destinationController.isInRog.value}");
return Scaffold(
appBar: AppBar(
automaticallyImplyLeading: false,
title: Text(
"${destination.sub_loc_id} : ${destination.name}",
title: Text("Not reached the goal yet".tr,),
),
body: Container(
child: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text("You have not reached the goal yet.".tr, style: TextStyle(fontSize: 24)),
SizedBox(height: 40.0,),
ElevatedButton(
onPressed: (){
Get.back();
destinationController.skip_gps = false;
},
child: Text("Back"),
),
],
),
),
body: Column(
mainAxisAlignment: MainAxisAlignment.spaceAround,
children: [
Padding(
padding: const EdgeInsets.all(8.0),
child: Center(
child: Obx(
() => Container(
width: MediaQuery.of(context).size.width,
height: 370,
decoration: BoxDecoration(
image: DecorationImage(
// 要修正getReceiptImage関数の戻り値がnullの場合のエラーハンドリングが不十分です。適切なデフォルト画像を表示するなどの処理を追加してください。
//
image: getReceiptImage(), fit: BoxFit.cover)),
),
),
),
),
Padding(
padding: const EdgeInsets.all(8.0),
child: Text(getTagText(true, destination.tags)),
),
Row(
mainAxisAlignment: MainAxisAlignment.spaceAround,
mainAxisSize: MainAxisSize.min,
children: [
Obx(() => Row(
mainAxisSize: MainAxisSize.min,
children: [
ElevatedButton(
onPressed: () {
// print(
// "in camera purchase 2 ${destinationController.isInRog.value}");
destinationController.openCamera(
context, destination);
},
child: destinationController.photos.isNotEmpty
? const Text("再撮影")
: const Text("撮影")),
const SizedBox(
width: 10,
),
ElevatedButton(
onPressed: () async {
await destinationController
.cancelBuyPoint(destination);
Navigator.of(Get.context!).pop();
//Get.back();
destinationController.rogainingCounted.value = true;
destinationController.skipGps = false;
destinationController.isPhotoShoot.value = false;
},
child: const Text("買い物なし"))
],
)),
Obx(() => destinationController.photos.isNotEmpty
? Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
// ElevatedButton(
// style: ElevatedButton.styleFrom(
// backgroundColor: Colors.red),
// onPressed: () async {},
// child: const Text("買物なし")),
// const SizedBox(
// width: 10,
// ),
ElevatedButton(
style: ElevatedButton.styleFrom(
backgroundColor: Colors.red),
onPressed: () async {
// print(
// "in camera purchase 3 ${destinationController.isInRog.value}");
await destinationController.makeBuyPoint(
destination,
destinationController.photos[0].path);
Get.back();
// print(
// "in camera purchase 4 ${destinationController.isInRog.value}");
destinationController.rogainingCounted.value =
true;
destinationController.skipGps = false;
destinationController.isPhotoShoot.value = false;
Get.snackbar("お買い物加点を行いました",
"${destination.sub_loc_id} : ${destination.name}");
},
child: const Text("完了"))
],
)
: Container())
],
),
],
),
),
);
}
}
}

View File

@ -1,6 +1,7 @@
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:rogapp/pages/index/index_controller.dart';
import 'package:rogapp/routes/app_pages.dart';
class ChangePasswordPage extends StatelessWidget {
ChangePasswordPage({Key? key}) : super(key: key);
@ -13,170 +14,150 @@ class ChangePasswordPage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
resizeToAvoidBottomInset: false,
resizeToAvoidBottomInset: false,
backgroundColor: Colors.white,
appBar: AppBar(
elevation: 0,
backgroundColor: Colors.white,
leading: IconButton(
onPressed: () {
Navigator.pop(context);
},
icon: const Icon(
Icons.arrow_back_ios,
size: 20,
color: Colors.black,
)),
leading:
IconButton( onPressed: (){
Navigator.pop(context);
},icon:Icon(Icons.arrow_back_ios,size: 20,color: Colors.black,)),
),
body: SizedBox(
width: double.infinity,
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Column(
children: [
Column(
body:
Container(
width: double.infinity,
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Column(
children: [
Column(
children: [
Container(
child: Text("change_password".tr, style: TextStyle(fontSize: 24.0),),
),
SizedBox(height: 30,),
],
),
Padding(
padding: EdgeInsets.symmetric(
horizontal: 40
),
child: Column(
children: [
Text(
"change_password".tr,
style: const TextStyle(fontSize: 24.0),
),
const SizedBox(
height: 30,
),
makeInput(label: "old_password".tr, controller: oldPasswordController),
makeInput(label: "new_password".tr, controller: newPasswordController, obsureText: true),
],
),
Padding(
padding: const EdgeInsets.symmetric(horizontal: 40),
child: Column(
children: [
makeInput(
label: "old_password".tr,
controller: oldPasswordController),
makeInput(
label: "new_password".tr,
controller: newPasswordController,
obsureText: true),
],
),
Padding(
padding: EdgeInsets.symmetric(horizontal: 40),
child: Container(
padding: EdgeInsets.only(top: 3,left: 3),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(40),
),
child: Obx((() =>
indexController.is_loading == true ? MaterialButton(
minWidth: double.infinity,
height:60,
onPressed: (){
},
color: Colors.grey[400],
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(40)
),
child: CircularProgressIndicator(),
) :
Column(
children: [
MaterialButton(
minWidth: double.infinity,
height:60,
onPressed: (){
if(oldPasswordController.text.isEmpty || newPasswordController.text.isEmpty){
Get.snackbar(
"no_values".tr,
"values_required".tr,
icon: Icon(Icons.assistant_photo_outlined, size: 40.0, color: Colors.blue),
snackPosition: SnackPosition.TOP,
duration: Duration(milliseconds: 800),
backgroundColor: Colors.yellow,
//icon:Image(image:AssetImage("assets/images/dora.png"))
);
return;
}
indexController.is_loading.value = true;
indexController.changePassword(oldPasswordController.text, newPasswordController.text, context);
//indexController.login(oldPasswordController.text, newPasswordController.text, context);
},
color: Colors.indigoAccent[400],
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(40)
),
child: Text("ログイン",style: TextStyle(
fontWeight: FontWeight.w600,fontSize: 16,color: Colors.white70
),
),
),
SizedBox(height: 10.0,),
],
)
),
),
Padding(
padding: const EdgeInsets.symmetric(horizontal: 40),
child: Container(
padding: const EdgeInsets.only(top: 3, left: 3),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(40),
),
child: Obx(
(() => indexController.isLoading.value == true
? MaterialButton(
minWidth: double.infinity,
height: 60,
onPressed: () {},
color: Colors.grey[400],
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(40)),
child: const CircularProgressIndicator(),
)
: Column(
children: [
MaterialButton(
minWidth: double.infinity,
height: 60,
onPressed: () {
if (oldPasswordController
.text.isEmpty ||
newPasswordController
.text.isEmpty) {
Get.snackbar(
"no_values".tr,
"values_required".tr,
icon: const Icon(
Icons.assistant_photo_outlined,
size: 40.0,
color: Colors.blue),
snackPosition: SnackPosition.TOP,
duration: const Duration(
milliseconds: 800),
backgroundColor: Colors.yellow,
//icon:Image(image:AssetImage("assets/images/dora.png"))
);
return;
}
indexController.isLoading.value = true;
indexController.changePassword(
oldPasswordController.text,
newPasswordController.text,
context);
//indexController.login(oldPasswordController.text, newPasswordController.text, context);
},
color: Colors.indigoAccent[400],
shape: RoundedRectangleBorder(
borderRadius:
BorderRadius.circular(40)),
child: const Text(
"ログイン",
style: TextStyle(
fontWeight: FontWeight.w600,
fontSize: 16,
color: Colors.white70),
),
),
const SizedBox(
height: 10.0,
),
],
)),
),
)),
const SizedBox(
height: 20,
),
const Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [],
)
],
),
],
),
));
}
)
),
SizedBox(height: 20,),
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
],
)
],
Widget makeInput(
{label, required TextEditingController controller, obsureText = false}) {
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
label,
style: const TextStyle(
fontSize: 15, fontWeight: FontWeight.w400, color: Colors.black87),
),
const SizedBox(
height: 5,
),
TextField(
controller: controller,
obscureText: obsureText,
decoration: InputDecoration(
contentPadding:
const EdgeInsets.symmetric(vertical: 0, horizontal: 10),
enabledBorder: OutlineInputBorder(
borderSide: BorderSide(
color: (Colors.grey[400])!,
),
),
border: OutlineInputBorder(
borderSide: BorderSide(color: (Colors.grey[400])!),
),
),
],
),
const SizedBox(
height: 30.0,
)
],
)
);
}
Widget makeInput({label, required TextEditingController controller, obsureText = false}){
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(label,style:TextStyle(
fontSize: 15,
fontWeight: FontWeight.w400,
color: Colors.black87
),),
SizedBox(height: 5,),
TextField(
controller: controller,
obscureText: obsureText,
decoration: InputDecoration(
contentPadding: EdgeInsets.symmetric(vertical: 0,horizontal: 10),
enabledBorder: OutlineInputBorder(
borderSide: BorderSide(
color: (Colors.grey[400])!,
),
),
border: OutlineInputBorder(
borderSide: BorderSide(color: (Colors.grey[400])!
),
),
),
),
SizedBox(height: 30.0,)
],
);
}
}

View File

@ -1,11 +1,10 @@
import 'package:get/get.dart';
import 'package:rogapp/main.dart';
import 'package:rogapp/pages/destination/destination_controller.dart';
import 'package:rogapp/pages/index/index_controller.dart';
class DestinationBinding extends Bindings {
@override
void dependencies() {
Get.put<DestinationController>(DestinationController());
restoreGame();
}
}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,217 @@
import 'dart:developer';
import 'dart:io';
import 'package:camera_camera/camera_camera.dart';
import 'package:flutter/material.dart';
import 'package:geolocator/geolocator.dart';
import 'package:get/get.dart';
import 'package:latlong2/latlong.dart';
import 'package:rogapp/pages/camera/camera_page.dart';
import 'package:rogapp/pages/destination/destination_controller.dart';
import 'package:rogapp/pages/destination_map/destination_map_page.dart';
import 'package:rogapp/pages/drawer/drawer_page.dart';
import 'package:rogapp/pages/index/index_controller.dart';
import 'package:rogapp/routes/app_pages.dart';
import 'package:rogapp/services/external_service.dart';
import 'package:rogapp/widgets/destination_widget.dart';
import 'package:timeline_tile/timeline_tile.dart';
class DestnationPage extends StatelessWidget {
DestnationPage({Key? key}) : super(key: key);
final DestinationController destinationController = Get.find<DestinationController>();
final IndexController indexController = Get.find<IndexController>();
final List<int> _items = List<int>.generate(50, (int index) => index);
Future<void> showCurrentPosition() async {
LocationPermission permission = await Geolocator.checkPermission();
if (permission != LocationPermission.whileInUse ||
permission != LocationPermission.always) {
permission = await Geolocator.requestPermission();
}
Position position = await Geolocator.getCurrentPosition(
desiredAccuracy: LocationAccuracy.high);
indexController.rogMapController?.move(LatLng(position.latitude, position.longitude), 14);
}
Image getImage(int index){
if(destinationController.destinations[index].photos == null || destinationController.destinations[index].photos == ""){
return Image(image: AssetImage('assets/images/empty_image.png'));
}
else{
return Image(image: NetworkImage(destinationController.destinations[index].photos!));
}
}
Widget getRoutingImage(int route){
switch (route) {
case 0:
return Image(image: AssetImage('assets/images/p4_9_man.png'), width: 35.0,);
case 1:
return Image(image: AssetImage('assets/images/p4_8_car.png'), width: 35.0,);
case 2:
return Image(image: AssetImage('assets/images/p4_10_train.png'), width: 35.0,);
default:
return Image(image: AssetImage('assets/images/p4_9_man.png'), width: 35.0,);
}
}
@override
Widget build(BuildContext context) {
final ColorScheme colorScheme = Theme.of(context).colorScheme;
final Color oddItemColor = colorScheme.primary.withOpacity(0.05);
final Color evenItemColor = colorScheme.primary.withOpacity(0.15);
return WillPopScope(
onWillPop: () async {
indexController.switchPage(AppPages.INITIAL);
return false;
},
child: Scaffold(
drawer: DrawerPage(),
bottomNavigationBar: BottomAppBar(
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: <Widget>[
Padding(
padding: const EdgeInsets.only(left:13.0),
child: InkWell(
child: Obx((() => getRoutingImage(destinationController.travelMode.value))),
onTap: (){
Get.bottomSheet(
Obx(() =>
ListView(
children: [
Padding(
padding: const EdgeInsets.only(top:30.0, bottom: 30),
child: Center(child: Text("select_travel_mode".tr, style: TextStyle(fontSize: 22.0, color:Colors.red, fontWeight:FontWeight.bold),),),
),
ListTile(
selected: destinationController.travelMode == 0 ? true : false,
selectedTileColor: Colors.amber.shade200,
leading: Image(image: AssetImage('assets/images/p4_9_man.png'),),
title: Text("walking".tr),
onTap:(){
destinationController.travelMode.value = 0;
destinationController.PopulateDestinations();
Get.back();
},
),
ListTile(
selected: destinationController.travelMode == 1 ? true : false,
selectedTileColor: Colors.amber.shade200,
leading: Image(image: AssetImage('assets/images/p4_8_car.png'),),
title: Text("driving".tr),
onTap:(){
destinationController.travelMode.value = 1;
destinationController.PopulateDestinations();
Get.back();
},
),
// ListTile(
// selected: destinationController.travelMode == 2 ? true : false,
// selectedTileColor: Colors.amber.shade200,
// leading: Image(image: AssetImage('assets/images/p4_10_train.png'),),
// title: Text("transit".tr),
// onTap:(){
// destinationController.travelMode.value = 2;
// destinationController.PopulateDestinations();
// Get.back();
// },
// ),
],
),
),
isScrollControlled:false,
backgroundColor: Colors.white,
);
//destinationController.PopulateDestinations();
}
),
)
,
IconButton(
icon: const Icon(Icons.travel_explore, size: 35,),
onPressed: (){
indexController.switchPage(AppPages.INITIAL);
}
),
],
),
),
floatingActionButton: FloatingActionButton(
onPressed: (){
//print("######");
indexController.toggleDestinationMode();
},
tooltip: 'Increment',
child: Obx(() =>
indexController.desination_mode == 1 ?
Image(image: AssetImage('assets/images/list2.png'))
:
Image(image: AssetImage('assets/images/map.png'))
),
elevation: 4.0,
),
floatingActionButtonLocation: FloatingActionButtonLocation.centerDocked,
appBar:AppBar(
automaticallyImplyLeading: true,
title: Text("app_title".tr),
actions: [
InkWell(
onTap: (){
Get.toNamed(AppPages.CAMERA_PAGE);
},
child: destinationController.is_in_rog == true ?
Image.asset("assets/images/basic-walking.gif",height: 10.0,)
:
destinationController.is_at_goal == true ?
IconButton(
onPressed:(){Get.toNamed(AppPages.CAMERA_PAGE);},
icon: Icon(Icons.assistant_photo),
)
:
IconButton(
onPressed:(){Get.toNamed(AppPages.CAMERA_PAGE);},
icon: Icon(Icons.accessibility),
),
),
// Obx(() =>
// Text(indexController.connectionStatusName.value)
// ),
Obx(() =>
ToggleButtons(
disabledColor: Colors.grey.shade200,
selectedColor: Colors.red,
children: <Widget>[
Icon(Icons.explore, size: 35.0,
)],
onPressed: (int index) {
destinationController.is_gps_selected.value = !destinationController.is_gps_selected.value;
if(destinationController.is_gps_selected.value){
destinationController.chekcs = 0;
destinationController.skip_gps = false;
//destinationController.resetRogaining();
}
},
isSelected: [destinationController.is_gps_selected.value],
),
),
// IconButton(onPressed: (){
// showCurrentPosition();
// },
// icon: Icon(Icons.location_on_outlined))
],
),
body: Obx(() =>
indexController.desination_mode.value == 0 ?
DestinationWidget():
DestinationMapPage()
)
),
);
}
}

View File

@ -1,180 +1,437 @@
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:flutter_map/flutter_map.dart';
import 'package:flutter_map/plugin_api.dart';
import 'package:flutter_map_location_marker/flutter_map_location_marker.dart';
//import 'package:flutter_map_marker_popup/flutter_map_marker_popup.dart';
import 'package:flutter_map_marker_popup/flutter_map_marker_popup.dart';
import 'package:flutter_map_tile_caching/flutter_map_tile_caching.dart';
import 'package:flutter_polyline_points/flutter_polyline_points.dart';
import 'package:geojson/geojson.dart';
import 'package:geolocator/geolocator.dart';
import 'package:get/get.dart';
import 'package:latlong2/latlong.dart';
import 'package:rogapp/model/destination.dart';
import 'package:rogapp/pages/destination/destination_controller.dart';
import 'package:rogapp/pages/index/index_controller.dart';
import 'package:rogapp/services/destination_service.dart';
import 'package:rogapp/utils/text_util.dart';
import 'package:rogapp/widgets/base_layer_widget.dart';
import 'package:rogapp/widgets/bottom_sheet_new.dart';
import 'package:rogapp/widgets/bottom_sheet_widget.dart';
import 'package:rogapp/widgets/bread_crum_widget.dart';
class DestinationMapPage extends StatelessWidget {
DestinationMapPage({Key? key}) : super(key: key);
final IndexController indexController = Get.find<IndexController>();
final DestinationController destinationController =
Get.find<DestinationController>();
final DestinationController destinationController = Get.find<DestinationController>();
StreamSubscription? subscription;
//final PopupController _popupLayerController = PopupController();
final PopupController _popupLayerController = PopupController();
List<LatLng>? getPoints() {
//print("##### --- route point ${indexController.routePoints.length}");
List<LatLng> pts = [];
for (PointLatLng p in indexController.routePoints) {
LatLng l = LatLng(p.latitude, p.longitude);
pts.add(l);
List<LatLng>? getPoints(){
print("##### --- route point ${indexController.routePoints.length}");
List<LatLng> pts = [];
for(PointLatLng p in indexController.routePoints){
LatLng l = LatLng(p.latitude, p.longitude);
pts.add(l);
}
return pts;
}
return pts;
}
// 要検討:マーカーのタップイベントを処理する際に、エラーハンドリングが不十分です。例外が発生した場合の処理を追加することをお勧めします。
//
List<Marker>? getMarkers() {
List<Marker> pts = [];
//int index = -1;
for (int i = 0; i < destinationController.destinations.length; i++) {
Destination d = destinationController.destinations[i];
//print("^^^^ $d ^^^^");
Marker m = Marker(
List<Marker>? getMarkers() {
List<Marker> pts = [];
int index = -1;
for (int i = 0; i < destinationController.destinations.length; i++) {
Destination d = destinationController.destinations[i];
print("^^^^ ${d} ^^^^");
Marker m = Marker(
point: LatLng(d.lat!, d.lon!),
alignment: Alignment.center,
child: InkWell(
onTap: () {
//print("-- Destination is --- ${d.name} ------");
if (indexController.currentDestinationFeature.isNotEmpty) {
indexController.currentDestinationFeature.clear();
}
indexController.currentDestinationFeature.add(d);
//indexController.getAction();
anchorPos: AnchorPos.align(AnchorAlign.center),
builder:(cts){
showModalBottomSheet(
context: Get.context!,
isScrollControlled: true,
constraints:
BoxConstraints.loose(Size(Get.width, Get.height * 0.85)),
builder: ((context) => BottomSheetNew(
destination: d,
))).whenComplete(() {
//print("---- set skip gps to false -----");
destinationController.skipGps = false;
});
},
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Container(
width: 20,
height: 20,
decoration: BoxDecoration(
color: Colors.red,
shape: BoxShape.circle,
border: Border.all(
color: Colors.white,
width: d.checkin_radious != null ? d.checkin_radious! : 1,
return InkWell(
onTap: (){
print("-- Destination is --- ${d.name} ------");
if(d != null){
if(indexController.currentDestinationFeature.length > 0) {
indexController.currentDestinationFeature.clear();
}
indexController.currentDestinationFeature.add(d);
//indexController.getAction();
showModalBottomSheet(context: Get.context!, isScrollControlled: true,
builder:((context) => BottomSheetNew())
).whenComplete((){
print("---- set skip gps to false -----");
destinationController.skip_gps = false;
});
}
},
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Container(
width:20,
height:20,
decoration: BoxDecoration(
color: Colors.red,
shape: BoxShape.circle,
border: new Border.all(
color: Colors.white,
width: d.checkin_radious != null ? d.checkin_radious! : 1,
),
),
child: new Center(
child: new Text(
(i + 1).toString(),
style: TextStyle(color: Colors.white),
),
),
),
child: Center(
child: Text(
(i + 1).toString(),
style: const TextStyle(color: Colors.white),
),
),
),
Container(
color: Colors.yellow,
child: Text(
TextUtils.getDisplayText(d),
style: const TextStyle(
fontSize: 15.0,
fontWeight: FontWeight.bold,
overflow: TextOverflow.visible),
)),
],
),
));
pts.add(m);
//Container( color: Colors.yellow, child: Text(TextUtils.getDisplayText(d), style: TextStyle(fontSize: 15.0, fontWeight: FontWeight.bold, overflow: TextOverflow.visible),)),
],
),
);
});
pts.add(m);
}
return pts;
}
return pts;
}
@override
Widget build(BuildContext context) {
return Obx((() => Stack(
children: [
// indexController.is_rog_mapcontroller_loaded.value == false ?
// Center(child: CircularProgressIndicator())
// :
// Padding(
// padding: const EdgeInsets.only(left:8.0),
// child: BreadCrumbWidget(mapController:indexController.rogMapController),
// ),
Padding(
padding: const EdgeInsets.only(top: 0.0),
//child: TravelMap(),
child: travelMap(),
),
],
)));
return Obx((() =>
Stack(
children: [
// indexController.is_rog_mapcontroller_loaded.value == false ?
// Center(child: CircularProgressIndicator())
// :
// Padding(
// padding: const EdgeInsets.only(left:8.0),
// child: BreadCrumbWidget(mapController:indexController.rogMapController),
// ),
Padding(
padding: const EdgeInsets.only(top:0.0),
//child: TravelMap(),
child:
TravelMap(),
),
],
)
));
}
// 要検討MapOptionsのboundsプロパティにハードコードされた座標が使用されています。これを動的に設定できるようにすることを検討してください。
//
FlutterMap travelMap() {
FlutterMap TravelMap() {
return FlutterMap(
mapController: indexController.rogMapController,
options: MapOptions(
onMapReady: () {
indexController.isRogMapcontrollerLoaded.value = true;
subscription = indexController.rogMapController.mapEventStream
.listen((MapEvent mapEvent) {
if (mapEvent is MapEventMoveStart) {}
options: MapOptions(
onMapReady: (){
indexController.is_rog_mapcontroller_loaded.value = true;
subscription = indexController.rogMapController!.mapEventStream.listen((MapEvent mapEvent) {
if (mapEvent is MapEventMoveStart) {
}
if (mapEvent is MapEventMoveEnd) {
//destinationController.is_gps_selected.value = true;
//indexController.mapController!.move(c.center, c.zoom);
LatLngBounds bounds = indexController.rogMapController.bounds!;
LatLngBounds bounds = indexController.rogMapController!.bounds!;
indexController.currentBound.clear();
indexController.currentBound.add(bounds);
if (indexController.currentUser.isEmpty) {
if(indexController.currentUser.length <= 0){
indexController.loadLocationsBound();
}
}
});
},
bounds: indexController.currentBound.isNotEmpty
? indexController.currentBound[0]
: LatLngBounds.fromPoints([
const LatLng(35.03999881162295, 136.40587119778962),
const LatLng(36.642756778706904, 137.95226720406063)
]),
initialZoom: 1,
maxZoom: 42,
interactiveFlags: InteractiveFlag.pinchZoom | InteractiveFlag.drag,
} ,
bounds: indexController.currentBound.length > 0 ? indexController.currentBound[0]: LatLngBounds.fromPoints([LatLng(35.03999881162295, 136.40587119778962), LatLng(36.642756778706904, 137.95226720406063)]),
zoom: 1,
maxZoom: 42,
interactiveFlags: InteractiveFlag.pinchZoom | InteractiveFlag.drag,
),
children: [
BaseLayer(),
Obx(() =>
indexController.routePointLenght > 0 ?
PolylineLayer(
polylines: [
Polyline(
points: getPoints()!,
strokeWidth: 6.0,
color: Colors.indigo
),
],
)
:
Container(),
),
children: [
const BaseLayer(),
Obx(
() => indexController.routePointLenght > 0
? PolylineLayer(
polylines: [
Polyline(
points: getPoints()!,
strokeWidth: 6.0,
color: Colors.indigo),
],
)
: Container(),
),
CurrentLocationLayer(),
MarkerLayer(markers: getMarkers()!),
],
);
CurrentLocationLayer(),
MarkerLayer(
markers: getMarkers()!
),
],
);
}
}
// class DestinationMapPage extends StatefulWidget {
// DestinationMapPage({ Key? key }) : super(key: key);
// @override
// State<DestinationMapPage> createState() => _DestinationMapPageState();
// }
//class _DestinationMapPageState extends State<DestinationMapPage> {
// final IndexController indexController = Get.find<IndexController>();
// final DestinationController destinationController = Get.find<DestinationController>();
// StreamSubscription? subscription;
// final PopupController _popupLayerController = PopupController();
// List<LatLng>? getPoints(List<PointLatLng> ptts){
// //print("##### --- route point ${indexController.routePoints.length}");
// List<LatLng> pts = [];
// for(PointLatLng p in ptts){
// LatLng l = LatLng(p.latitude, p.longitude);
// pts.add(l);
// }
// return pts;
// }
// String getDisplaytext(Destination dp){
// String txt = "";
// if(dp.cp! > 0){
// txt = "${dp.cp}";
// if(dp.checkin_point != null && dp.checkin_point! > 0){
// txt = txt + "{${dp.checkin_point}}";
// }
// if(dp.buy_point != null && dp.buy_point! > 0){
// txt = txt + "[${dp.buy_point}]";
// }
// }
// return txt;
// }
// List<Marker>? getMarkers() {
// List<Marker> pts = [];
// int index = -1;
// for (int i = 0; i < destinationController.destinations.length; i++) {
// Destination d = destinationController.destinations[i];
// //for(Destination d in destinationController.destinations){
// //print("-----lat ${lat}, ----- lon ${lan}");
// Marker m = Marker(
// point: LatLng(d.lat!, d.lon!),
// anchorPos: AnchorPos.align(AnchorAlign.center),
// builder:(cts){
// return InkWell(
// onTap: (){
// print("-- Destination is --- ${d.name} ------");
// if(d != null){
// if(indexController.currentDestinationFeature.length > 0) {
// indexController.currentDestinationFeature.clear();
// }
// indexController.currentDestinationFeature.add(d);
// //indexController.getAction();
// showModalBottomSheet(context: context, isScrollControlled: true,
// //builder:((context) => BottomSheetWidget())
// builder:((context) => BottomSheetNew())
// );
// }
// },
// child: Row(
// mainAxisAlignment: MainAxisAlignment.spaceBetween,
// children: [
// Container(
// width:20,
// height:20,
// decoration: BoxDecoration(
// color: Colors.red,
// shape: BoxShape.circle,
// border: new Border.all(
// color: Colors.white,
// width: d.checkin_radious != null ? d.checkin_radious! : 1,
// ),
// ),
// child: new Center(
// child: new Text(
// (i + 1).toString(),
// style: TextStyle(color: Colors.white),
// ),
// ),
// ),
// Container( color: Colors.yellow, child: Text(getDisplaytext(d), style: TextStyle(fontSize: 15.0, fontWeight: FontWeight.bold, overflow: TextOverflow.visible),)),
// ],
// ),
// );
// //return Icon(Icons.pin_drop);
// // return IconButton(
// // onPressed: ()async {
// // Destination? fs = await destinationController.getDEstinationForLatLong(d.lat!, d.lon!);
// // print("-- Destination is --- ${fs!.name} ------");
// // if(fs != null){
// // if(indexController.currentDestinationFeature.length > 0) {
// // indexController.currentDestinationFeature.clear();
// // }
// // indexController.currentDestinationFeature.add(fs);
// // //indexController.getAction();
// // showModalBottomSheet(context: context, isScrollControlled: true,
// // //builder:((context) => BottomSheetWidget())
// // builder:((context) => BottomSheetNew())
// // );
// // }
// // },
// // icon: Container(
// // width: 60,
// // height: 60,
// // decoration: BoxDecoration(
// // borderRadius: BorderRadius.circular(d.checkin_radious ?? 0),
// // color: Colors.transparent,
// // border: BoxBorder()
// // ),
// // child: Icon(Icons.pin_drop)
// // )
// // );
// });
// pts.add(m);
// }
// return pts;
// }
// @override
// void initState() {
// //indexController.routePoints.clear();
// DestinationService.getDestinationLine(destinationController.destinations)?.then((value){
// //print("---- loading destination points ------ ${value}");
// setState(() {
// indexController.routePoints = value;
// });
// });
// super.initState();
// }
// void reload(){
// setState(() {
// });
// }
// @override
// Widget build(BuildContext context) {
// return Obx((() =>
// Stack(
// children: [
// indexController.is_rog_mapcontroller_loaded.value == false ?
// Center(child: CircularProgressIndicator())
// :
// BreadCrumbWidget(mapController:indexController.rogMapController),
// Padding(
// padding: const EdgeInsets.only(top:50.0),
// //child: TravelMap(),
// child:
// TravelMap(indexController.routePoints),
// ),
// // Positioned(
// // bottom: 200,
// // left: 10,
// // child: Container(
// // color: Colors.white,
// // child: Row(
// // children: [
// // Text(destinationController.gps[0]),
// // Text(destinationController.locationPermission[0])
// // ],
// // ),
// // )
// // ),
// ],
// )
// ));
// }
// FlutterMap TravelMap(List<PointLatLng> ptts) {
// return FlutterMap(
// options: MapOptions(
// onMapCreated: (c){
// indexController.rogMapController = c;
// indexController.rogMapController!.onReady.then((_) {
// indexController.is_rog_mapcontroller_loaded.value = true;
// subscription = indexController.rogMapController!.mapEventStream.listen((MapEvent mapEvent) {
// if (mapEvent is MapEventMoveStart) {
// //print(DateTime.now().toString() + ' [MapEventMoveStart] START');
// // do something
// }
// if (mapEvent is MapEventMoveEnd) {
// destinationController.isSelected.value = false;
// //print(DateTime.now().toString() + ' [MapEventMoveStart] END');
// //indexController.loadLocationsBound();
// }
// });
// });
// } ,
// bounds: indexController.currentBound.length > 0 ? indexController.currentBound[0]: LatLngBounds.fromPoints([LatLng(35.03999881162295, 136.40587119778962), LatLng(36.642756778706904, 137.95226720406063)]),
// zoom: 1,
// maxZoom: 42,
// interactiveFlags: InteractiveFlag.pinchZoom | InteractiveFlag.drag,
// //plugins: [LocationMarkerPlugin(),]
// ),
// children: [
// TileLayerWidget(
// options: TileLayerOptions(
// urlTemplate: 'https://cyberjapandata.gsi.go.jp/xyz/std/{z}/{x}/{y}.png',
// subdomains: ['a', 'b', 'c'],
// ),
// ),
// //Obx(() =>
// indexController.routePoints.length > 0 ?
// PolylineLayerWidget(
// options: PolylineLayerOptions(
// polylines: [
// Polyline(
// points: getPoints(ptts)!,
// strokeWidth: 6.0,
// color: Colors.indigo
// ),
// ],
// ),
// )
// :
// Container(),
// //),
// // PopupMarkerLayerWidget(
// // options: PopupMarkerLayerOptions(
// // popupController: _popupLayerController,
// // markers: _markers,
// // markerRotateAlignment:
// // PopupMarkerLayerOptions.rotationAlignmentFor(AnchorAlign.top),
// // popupBuilder: (BuildContext context, Marker marker) =>
// // examplePopup(marker),
// // ),
// // ),
// LocationMarkerLayerWidget(),
// MarkerLayerWidget(
// options: MarkerLayerOptions(
// markers: getMarkers()!
// ),
// ),
// ],
// );
// }
//}

View File

View File

@ -1,3 +1,4 @@
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:rogapp/pages/destination/destination_controller.dart';
@ -7,14 +8,12 @@ import 'package:rogapp/services/auth_service.dart';
import 'package:url_launcher/url_launcher.dart';
class DrawerPage extends StatelessWidget {
DrawerPage({Key? key}) : super(key: key);
DrawerPage({ Key? key }) : super(key: key);
final IndexController indexController = Get.find<IndexController>();
// 要検討URLの起動に失敗した場合のエラーハンドリングが不十分です。適切なエラーメッセージを表示するなどの処理を追加してください。
//
void _launchURL(url) async {
if (!await launchUrl(url)) throw 'Could not launch $url';
if (!await launch(url)) throw 'Could not launch $url';
}
@override
@ -29,129 +28,71 @@ class DrawerPage extends StatelessWidget {
Container(
height: 100,
color: Colors.amber,
child: Obx(() => Center(
child: Padding(
padding: const EdgeInsets.all(8.0),
child: indexController.currentUser.isEmpty
? Flexible(
child: Text(
"drawer_title".tr,
style: const TextStyle(
color: Colors.black, fontSize: 20),
))
: Text(
indexController.currentUser[0]['user']['email'],
style: const TextStyle(
color: Colors.black, fontSize: 20),
),
),
)),
child: Obx(() =>
Center(
child: Padding(
padding: const EdgeInsets.all(8.0),
child:
indexController.currentUser.length == 0 ?
Flexible(child: Text("drawer_title".tr, style: TextStyle(color: Colors.black, fontSize: 20),))
:
Text(indexController.currentUser[0]['user']['email'], style: TextStyle(color: Colors.black, fontSize: 20),),
),
)
),
),
Obx(() => indexController.currentUser.isEmpty
? ListTile(
leading: const Icon(Icons.login),
title: Text("login".tr),
onTap: () {
Get.toNamed(AppPages.LOGIN);
},
)
: ListTile(
leading: const Icon(Icons.login),
title: Text("logout".tr),
onTap: () {
indexController.logout();
Get.toNamed(AppPages.LOGIN);
},
)),
indexController.currentUser.isNotEmpty
? ListTile(
leading: const Icon(Icons.password),
title: Text("change_password".tr),
onTap: () {
Get.toNamed(AppPages.CHANGE_PASSWORD);
},
)
: const SizedBox(
width: 0,
height: 0,
),
indexController.currentUser.isEmpty
? ListTile(
leading: const Icon(Icons.person),
title: Text("sign_up".tr),
onTap: () {
Get.toNamed(AppPages.REGISTER);
},
)
: const SizedBox(
width: 0,
height: 0,
),
indexController.currentUser.isNotEmpty
? ListTile(
leading: const Icon(Icons.password),
title: const Text("リセット"),
onTap: () {
// 要検討:リセット操作の確認メッセージをローカライズすることを検討してください。
//
Get.defaultDialog(
title: "よろしいですか、リセットしますか?",
middleText: "これにより、すべてのゲーム データが削除され、すべての状態が削除されます",
textConfirm: "確認する",
textCancel: "キャンセルする",
onCancel: () => Get.back(),
onConfirm: () {
DestinationController destinationController =
Get.find<DestinationController>();
destinationController.resetRogaining();
destinationController.deleteDBDestinations();
Get.back();
},
);
},
)
: const SizedBox(
width: 0,
height: 0,
),
indexController.currentUser.isNotEmpty
? ListTile(
leading: const Icon(Icons.delete_forever),
title: Text("delete_account".tr),
onTap: () {
String token = indexController.currentUser[0]['token'];
AuthService.deleteUser(token).then((value) {
if (value.isNotEmpty) {
indexController.logout();
Get.toNamed(AppPages.TRAVEL);
Get.snackbar("accounted_deleted".tr,
"account_deleted_message".tr);
}
});
},
)
: const SizedBox(
width: 0,
height: 0,
),
indexController.currentUser.isNotEmpty
? ListTile(
// 要検討:アカウント削除のリクエストが失敗した場合のエラーハンドリングを追加することをお勧めします。
//
leading: const Icon(Icons.delete_forever),
title: Text("ユーザーデータを削除する".tr),
onTap: () {
String token = indexController.currentUser[0]['token'];
AuthService.deleteUser(token).then((value) {
Get.snackbar("ユーザーデータを削除する",
"データを削除するためにユーザーの同意が設定されています アプリとサーバーでユーザーデータが削除されました");
});
},
)
: const SizedBox(
width: 0,
height: 0,
),
Obx(() =>
indexController.currentUser.length == 0 ?
ListTile(
leading: const Icon(Icons.login),
title: Text("login".tr),
onTap: (){
Get.toNamed(AppPages.LOGIN);
},
) :
ListTile(
leading: const Icon(Icons.login),
title: Text("logout".tr),
onTap: (){
indexController.logout();
Get.toNamed(AppPages.TRAVEL);
},
)
),
indexController.currentUser.length > 0 ?
ListTile(
leading: const Icon(Icons.password),
title: Text("change_password".tr),
onTap: (){
Get.toNamed(AppPages.CHANGE_PASSWORD);
},
) :
Container(width: 0, height: 0,),
indexController.currentUser.length == 0 ?
ListTile(
leading: const Icon(Icons.person),
title: Text("sign_up".tr),
onTap: (){
Get.toNamed(AppPages.REGISTER);
},
) :
Container(width: 0, height: 0,),
indexController.currentUser.length > 0 ?
ListTile(
leading: const Icon(Icons.delete_forever),
title: Text("delete_account".tr),
onTap: (){
String _token = indexController.currentUser[0]['token'];
AuthService.deleteUser(_token).then((value){
if(value.isNotEmpty){
indexController.logout();
Get.toNamed(AppPages.TRAVEL);
Get.snackbar("accounted_deleted".tr, "account_deleted_message".tr);
}
});
},
) :
Container(width: 0, height: 0,),
// ListTile(
// leading: const Icon(Icons.person),
// title: Text("profile".tr),
@ -167,22 +108,19 @@ class DrawerPage extends StatelessWidget {
// title: Text("point_rank".tr),
// onTap: (){},
// ),
indexController.currentUser.isNotEmpty
? ListTile(
leading: const Icon(Icons.featured_video),
title: Text("rog_web".tr),
onTap: () {
_launchURL("https://www.gifuai.net/?page_id=17397");
},
)
: const SizedBox(
width: 0,
height: 0,
),
indexController.currentUser.length > 0 ?
ListTile(
leading: const Icon(Icons.featured_video),
title: Text("rog_web".tr),
onTap: (){
_launchURL("https://www.gifuai.net/?page_id=17397");
},
) :
Container(width: 0, height: 0,),
ListTile(
leading: const Icon(Icons.privacy_tip),
title: Text("privacy".tr),
onTap: () {
onTap: (){
_launchURL("https://rogaining.sumasen.net/api/privacy/");
},
)
@ -201,4 +139,4 @@ class DrawerPage extends StatelessWidget {
),
);
}
}
}

View File

@ -1,156 +0,0 @@
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:flutter_map/flutter_map.dart';
import 'package:get/get.dart';
import 'package:latlong2/latlong.dart';
import 'package:rogapp/model/gps_data.dart';
import 'package:rogapp/pages/destination/destination_controller.dart';
import 'package:rogapp/pages/index/index_controller.dart';
import 'package:rogapp/utils/database_gps.dart';
import 'package:rogapp/widgets/base_layer_widget.dart';
class GpsPage extends StatefulWidget {
const GpsPage({super.key});
@override
State<GpsPage> createState() => _GpsPageState();
}
class _GpsPageState extends State<GpsPage> {
var gpsData = [].obs;
MapController? mapController;
StreamSubscription? subscription;
final IndexController indexController = Get.find<IndexController>();
final DestinationController destinationController =
Get.find<DestinationController>();
@override
void initState() {
super.initState();
loadGpsData();
}
// 要検討GPSデータの読み込みに失敗した場合のエラーハンドリングが不十分です。適切なエラーメッセージを表示するなどの処理を追加してください。
//
void loadGpsData() async {
final team_name = indexController.currentUser[0]["user"]['team_name'];
final event_code = indexController.currentUser[0]["user"]["event_code"];
GpsDatabaseHelper db = GpsDatabaseHelper.instance;
var data = await db.getGPSData(team_name, event_code);
gpsData.value = data;
//print("--- gps data ${data} ----");
}
// 要検討:マーカーの形状を決定する際に、マジックナンバーが使用されています。定数を使用するなどして、コードの可読性を向上させることを検討してください。
//
Widget getMarkerShape(GpsData i) {
return Row(
mainAxisAlignment: MainAxisAlignment.start,
children: [
InkWell(
onTap: () {},
child: Container(
height: 22,
width: 22,
decoration: BoxDecoration(
shape: BoxShape.circle,
color: Colors.transparent,
border: Border.all(
color:
i.is_checkin == 0 ? Colors.blueAccent : Colors.green,
width: i.is_checkin == 0 ? 0.4 : 2,
style: BorderStyle.solid)),
child: const Stack(
alignment: Alignment.center,
children: [
Icon(
Icons.circle,
size: 6.0,
),
],
)),
),
Container(
color: Colors.transparent,
child: i.is_checkin == 1
? Text(
DateTime.fromMicrosecondsSinceEpoch(i.created_at)
.hour
.toString() +
":" +
DateTime.fromMicrosecondsSinceEpoch(i.created_at)
.minute
.toString(),
// ":" +
// DateTime.fromMicrosecondsSinceEpoch(i.created_at)
// .second
// .toString(),
style: const TextStyle(
fontSize: 16,
fontWeight: FontWeight.bold,
color: Colors.black,
))
: Container()),
],
);
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("GPS way points"),
),
body: Container(
child: Obx(
() => FlutterMap(
mapController: mapController,
options: MapOptions(
maxZoom: 18.4,
onMapReady: () {},
//center: LatLng(37.15319600454702, 139.58765950528198),
bounds: indexController.currentBound.isNotEmpty
? indexController.currentBound[0]
: LatLngBounds.fromPoints([
LatLng(35.03999881162295, 136.40587119778962),
LatLng(36.642756778706904, 137.95226720406063)
]),
zoom: 1,
interactiveFlags: InteractiveFlag.pinchZoom | InteractiveFlag.drag,
onPositionChanged: (MapPosition pos, bool hasGesture) {
if (hasGesture) {
indexController.currentBound = [pos.bounds!];
}
},
onTap: (tapPos, cord) {}, // Hide popup when the map is tapped.
),
children: [
const BaseLayer(),
MarkerLayer(
markers: gpsData.map((i) {
return Marker(
width: 30.0, // Fixed width
height: 30.0, // Fixed height
point: LatLng(i.lat, i.lon),
child: getMarkerShape(i),
alignment: Alignment.center);
}).toList(),
),
// MarkerLayer(
// markers: gpsData.map((i) {
// return Marker(
// alignment: Alignment.center,
// height: 32.0,
// width: 120.0,
// point: LatLng(i.lat, i.lon),
// child: getMarkerShape(i));
// }).toList(),
// )
],
),
)),
);
}
}

View File

@ -1,153 +0,0 @@
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:rogapp/model/destination.dart';
import 'package:rogapp/utils/database_helper.dart';
class HistoryPage extends StatefulWidget {
const HistoryPage({super.key});
@override
State<HistoryPage> createState() => _HistoryPageState();
}
class _HistoryPageState extends State<HistoryPage> {
DatabaseHelper db = DatabaseHelper.instance;
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text("通過履歴"),
),
body: SingleChildScrollView(
child: Column(
children: [
FutureBuilder(
// 要検討:スナップショットのエラーハンドリングが行われていますが、具体的なエラーメッセージを表示するようにすることをお勧めします。
//
future: db.getDestinations(),
builder: (BuildContext context,
AsyncSnapshot<List<Destination>> snapshot) {
if (snapshot.connectionState == ConnectionState.done) {
if (snapshot.hasError) {
return Center(
child: Text(
'${snapshot.error} occurred',
style: const TextStyle(fontSize: 18),
),
);
} else if (snapshot.hasData) {
final dests = snapshot.data;
if (dests!.isNotEmpty) {
//print("----- history -----");
return SizedBox(
width: MediaQuery.of(context).size.width,
height: MediaQuery.of(context).size.height,
child: ListView.builder(
itemCount: dests.length,
itemBuilder: (ctx, index) {
//print("--- photo ${dests[index].checkin_image!} ----");
return Padding(
padding: const EdgeInsets.all(8.0),
child: CustomWidget(
// 要検討:画像のサイズがハードコードされています。画像のサイズを動的に設定できるようにすることを検討してください。
title: dests[index].name!,
subtitle:
"${dests[index].sub_loc_id} : ${dests[index].name}",
image1: dests[index].checkin_image != null
? Image.file(
File(dests[index].checkin_image!))
: null,
image2:
dests[index].buypoint_image != null
? Image.file(File(
dests[index].buypoint_image!))
: null,
),
);
}));
} else {
return const Center(child: Text("No checkin yet"));
}
}
} else if (snapshot.connectionState ==
ConnectionState.waiting) {
return const Center(
child: CircularProgressIndicator(),
);
}
return Container();
}),
],
),
),
);
}
}
class CustomWidget extends StatelessWidget {
final Image? image1;
final Image? image2;
final String title;
final String subtitle;
const CustomWidget({
super.key,
this.image1,
this.image2,
required this.title,
required this.subtitle,
});
@override
Widget build(BuildContext context) {
return Row(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
SizedBox(
width:
104, // 50 (width of each image) + 2 (space between images) + 2*1 (padding on both sides)
child: Row(
children: [
if (image1 != null)
SizedBox(
width: 50,
height: 100,
child: image1,
),
if (image1 != null && image2 != null) const SizedBox(width: 2),
if (image2 != null)
SizedBox(
width: 50,
height: 100,
child: image2,
),
],
),
),
const SizedBox(width: 10),
Expanded(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
title,
style:
const TextStyle(fontSize: 20, fontWeight: FontWeight.bold),
maxLines:
null, // Allows the text to wrap onto an unlimited number of lines
),
Text(
subtitle,
style: const TextStyle(fontSize: 16),
maxLines:
null, // Allows the text to wrap onto an unlimited number of lines
),
],
),
),
],
);
}
}

View File

@ -2,11 +2,7 @@ import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:rogapp/pages/search/search_page.dart';
// 要検討SearchPageへのナビゲーションにNavigator.pushを使用していますが、一貫性のためにGet.toやGet.toNamedを使用することを検討してください。
//
class HomePage extends GetView{
const HomePage({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return Scaffold(

View File

@ -1,13 +1,12 @@
import 'package:flutter_map/plugin_api.dart';
import 'package:get/get.dart';
import 'package:rogapp/pages/destination/destination_controller.dart';
import 'package:rogapp/pages/index/index_controller.dart';
import 'package:rogapp/utils/location_controller.dart';
class IndexBinding extends Bindings {
@override
void dependencies() {
Get.put<IndexController>(IndexController());
Get.put<LocationController>(LocationController());
Get.put<DestinationController>(DestinationController());
}
}

File diff suppressed because it is too large Load Diff

View File

@ -1,224 +1,178 @@
import 'dart:ui';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:rogapp/model/destination.dart';
import 'package:rogapp/pages/destination/destination_controller.dart';
import 'package:rogapp/pages/drawer/drawer_page.dart';
import 'package:rogapp/pages/index/index_controller.dart';
import 'package:rogapp/routes/app_pages.dart';
import 'package:rogapp/services/maxtrix_service.dart';
import 'package:rogapp/utils/database_helper.dart';
import 'package:rogapp/widgets/bread_crum_widget.dart';
import 'package:rogapp/widgets/cat_widget.dart';
import 'package:rogapp/widgets/list_widget.dart';
import 'package:rogapp/widgets/map_widget.dart';
import 'package:rogapp/utils/location_controller.dart';
// index_page.dartファイルの主な内容です。
// このファイルは、アプリのメインページのUIを構築し、各機能へのナビゲーションを提供しています。
// また、IndexControllerとDestinationControllerを使用して、状態管理と各種機能の実装を行っています。
//
// MapWidgetとListWidgetは、それぞれ別のファイルで定義されているウィジェットであり、マップモードとリストモードの表示を担当しています。
//
// 全体的に、index_page.dartはアプリのメインページの構造を定義し、他のコンポーネントやページへの橋渡しを行っているファイルです。
//
import 'package:flutter_polyline_points/flutter_polyline_points.dart';
// 要検討GPSデータの表示アイコンをタップした際のエラーハンドリングを追加することをお勧めします。
// MapWidgetとListWidgetの切り替えにObxを使用していますが、パフォーマンスを考慮して、必要な場合にのみウィジェットを再構築するようにしてください。
// DestinationControllerのisSimulationModeを使用してGPS信号の強弱をシミュレーションしていますが、本番環境では適切に実際のGPS信号を使用するようにしてください。
// IndexPageクラスは、GetView<IndexController>を継承したStatelessWidgetです。このクラスは、アプリのメインページを表すウィジェットです。
//
class IndexPage extends GetView<IndexController> {
IndexPage({Key? key}) : super(key: key);
// IndexControllerとDestinationControllerのインスタンスを取得しています。
//
final LocationController locationController = Get.find<LocationController>();
final IndexController indexController = Get.find<IndexController>();
final DestinationController destinationController =
Get.find<DestinationController>();
final DestinationController destinationController = Get.find<DestinationController>();
// buildメソッドは、ウィジェットのUIを構築するメソッドです。
// ここでは、WillPopScopeウィジェットを使用して、端末の戻るボタンが押された際の動作を制御しています。
//
@override
Widget build(BuildContext context) {
return PopScope(
canPop: false,
return WillPopScope(
onWillPop: () async {
indexController.switchPage(AppPages.INITIAL);
return false;
},
child: Scaffold(
//
// Scaffoldウィジェットを使用して、アプリのメインページのレイアウトを構築しています。
//
drawer: DrawerPage(),
appBar: AppBar(
title: Text("add_location".tr),
actions: [
// IconButton(
// onPressed: () {
// DatabaseService ds = DatabaseService();
// ds.updateDatabase();
// },
// icon: const Icon(Icons.ten_k_sharp)),
//
// AppBarには、タイトルとアクションアイコンが含まれています。
// アクションアイコンには、GPSデータの表示、履歴の表示、マップの更新、検索などの機能が含まれています。
//
IconButton(
onPressed: () async {
// GpsDatabaseHelper db = GpsDatabaseHelper.instance;
// List<GpsData> data = await db.getGPSData(
// indexController.currentUser[0]["user"]['team_name'],
// indexController.currentUser[0]["user"]["event_code"]);
// print("GPS data is ${data.length}");
Get.toNamed(AppPages.GPS);
},
icon: const Icon(Icons.telegram)),
IconButton(
onPressed: () {
Get.toNamed(AppPages.HISTORY);
},
icon: const Icon(Icons.history)),
IconButton(
onPressed: () {
final tk = indexController.currentUser[0]["token"];
if (tk != null) {
destinationController.fixMapBound(tk);
}
},
icon: const Icon(Icons.refresh)),
InkWell(
onTap: () {
Get.toNamed(AppPages.SEARCH);
//drawer: const DrawerPage(),
appBar: AppBar(
leading: IconButton(
icon: Icon(Icons.arrow_back_ios),
onPressed: (){
indexController.switchPage(AppPages.TRAVEL);
},
child: Container(
height: 32,
width: 75,
decoration: BoxDecoration(
color: Colors.blue,
borderRadius: BorderRadius.circular(25),
),
child: const Center(
child: Icon(Icons.search),
),
),
),
//CatWidget(indexController: indexController,),
//
// デバッグ時のみリロードボタンの横にGPS信号レベルの設定ボタンを設置し、
// タップすることでGPS信号の強弱をシミュレーションできるようにする
// Akira 2024-4-5
//
Obx(() => locationController.isSimulationMode
? DropdownButton<String>(
value: locationController.getSimulatedSignalStrength(),
onChanged: (value) {
locationController.setSimulatedSignalStrength(value!);
},
items: ['high', 'medium', 'low']
.map<DropdownMenuItem<String>>((String value) {
return DropdownMenuItem<String>(
value: value,
child: Text(value),
);
}).toList(),
)
: Container(),
),
//automaticallyImplyLeading: false,
title: Text("add_location".tr),
actions: [
InkWell(
onTap: (){
Get.toNamed(AppPages.SEARCH);
},
child: Container(
height: 32,
width: 75,
decoration: BoxDecoration(
color: Colors.blue,
borderRadius: BorderRadius.circular(25),
),
child: const Center(child: Icon(Icons.search),),
),
),
//CatWidget(indexController: indexController,),
],
),
// bottomNavigationBar: BottomAppBar(
// child: Row(
// mainAxisAlignment: MainAxisAlignment.spaceBetween,
// children: <Widget>[
// Obx(
// () => destinationController.isInRog.value == true
// ? IconButton(
// onPressed: () {},
// icon: const Icon(
// Icons.run_circle,
// size: 44,
// color: Colors.green,
// ))
// : IconButton(
// onPressed: () {},
// icon: const Icon(
// Icons.run_circle,
// size: 44,
// color: Colors.black12,
// )),
// ),
// Padding(
// padding:
// const EdgeInsets.only(right: 10.0, top: 4.0, bottom: 4.0),
// child: InkWell(
// child: Obx(() => destinationController
// .isGpsSelected.value ==
// true
// ? Padding(
// padding: const EdgeInsets.only(
// right: 10.0, top: 4.0, bottom: 4.0),
// child: InkWell(
// child: const Image(
// image:
// AssetImage('assets/images/route3_off.png'),
// width: 35,
// height: 35,
// ),
// onTap: () {
// //indexController.switchPage(AppPages.TRAVEL);
// },
// ),
// )
// : Padding(
// padding: const EdgeInsets.only(
// right: 10.0, top: 4.0, bottom: 4.0),
// child: InkWell(
// child: const Image(
// image:
// AssetImage('assets/images/route2_on.png'),
// width: 35,
// height: 35,
// ),
// onTap: () {
// //indexController.switchPage(AppPages.TRAVEL);
// },
// ),
// ))),
// ),
// ],
// ),
// ),
//
// マップモードとリストモードを切り替えるためのボタンです。
//
floatingActionButton: FloatingActionButton(
onPressed: () {
indexController.toggleMode();
},
elevation: 1.0,
//
// Obxウィジェットを使用して、indexController.mode.valueの値に基づいて、MapWidgetまたはListWidgetを表示しています。
//
child: Obx(
() => indexController.mode.value == 0
? const Image(image: AssetImage('assets/images/list2.png'))
: const Image(image: AssetImage('assets/images/map.png')),
bottomNavigationBar: BottomAppBar(
child: Row(
mainAxisAlignment: MainAxisAlignment.end,
children: <Widget>[
Padding(
padding: const EdgeInsets.only(right: 10.0, top: 4.0, bottom: 4.0),
child: InkWell(
child:
Obx(() =>
destinationController.is_gps_selected == true ?
Padding(
padding: const EdgeInsets.only(right: 10.0, top: 4.0, bottom: 4.0),
child: InkWell(
child: Image(image: AssetImage('assets/images/route3_off.png'), width: 35, height: 35,),
onTap: (){
indexController.switchPage(AppPages.TRAVEL);
},
),
) :
Padding(
padding: const EdgeInsets.only(right: 10.0, top: 4.0, bottom: 4.0),
child: InkWell(
child: Image(image: AssetImage('assets/images/route2_on.png'),width: 35, height: 35,),
onTap: (){
indexController.switchPage(AppPages.TRAVEL);
},
),
)
)
),
),
],
),
),
floatingActionButton: FloatingActionButton(
onPressed: (){
indexController.toggleMode();
if(indexController.currentCat.isNotEmpty){
print(indexController.currentCat[0].toString());
}
},
tooltip: 'Increment',
child: Obx(() =>
indexController.mode == 0 ?
Image(image: AssetImage('assets/images/list2.png'))
:
Image(image: AssetImage('assets/images/map.png')),
),
elevation: 4.0,
),
floatingActionButtonLocation: FloatingActionButtonLocation.centerDocked,
//
// bodyには、SafeAreaウィジェットを使用して、画面の安全な領域内にUIを構築しています。
//
body: SafeArea(
child: Column(
children: [
// Container(
// padding: const EdgeInsets.symmetric(horizontal: 8.0),
// alignment: Alignment.centerLeft,
// height: 50.0,
// //child: SingleChildScrollView(
// // scrollDirection: Axis.horizontal,
// // child:Row(
// // mainAxisAlignment: MainAxisAlignment.start,
// // children: [
// // TextButton(child:Text("Main Pef >", style: TextStyle(fontSize:16.0, fontWeight: FontWeight.bold),), onPressed: (){Get.toNamed(AppPages.MAINPERF);},),
// // TextButton(child:Text("Sub Pef >", style: TextStyle(fontSize:16.0, fontWeight: FontWeight.bold),), onPressed: (){Get.toNamed(AppPages.SUBPERF);},),
// // TextButton(child:Text("Cities >", style: TextStyle(fontSize:16.0, fontWeight: FontWeight.bold),), onPressed: (){Get.toNamed(AppPages.CITY);},),
// // TextButton(child:Text("Categories", style: TextStyle(fontSize:16.0, fontWeight: FontWeight.bold),), onPressed: (){Get.toNamed(AppPages.CATEGORY);},),
// // ],
// // )
// // ),
// child: SingleChildScrollView(
// scrollDirection: Axis.horizontal,
// child: Obx(() =>
// Row(
// mainAxisAlignment: MainAxisAlignment.spaceBetween,
// children: [
// indexController.is_mapController_loaded.value == false ?
// Center(child: CircularProgressIndicator())
// :
// BreadCrumbWidget(mapController: indexController.mapController),
// Container(width: 24.0,),
// // Row(
// // children: [
// // indexController.currentCat.isNotEmpty ? Text(indexController.currentCat[0].toString()): Text(""),
// // indexController.currentCat.isNotEmpty ?
// // IconButton(
// // onPressed: (){
// // indexController.currentCat.clear();
// // indexController.loadLocationsBound();
// // },
// // icon: Icon(Icons.cancel, color: Colors.red,)
// // ) :
// // Container(width: 0, height: 0,)
// // ],
// // )
// ],
// )
// ),
// ),
// ),
Expanded(
child: Obx(
() => indexController.mode.value == 0
? MapWidget()
: const ListWidget(),
))
child: Obx(() =>
indexController.mode == 0 ?
MapWidget() :
ListWidget(),
)
)
],
),
),
),
);
}
}
}

View File

@ -2,9 +2,6 @@ import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:rogapp/routes/app_pages.dart';
// 要検討:ログインボタンとサインアップボタンの配色を見直すことを検討してください。現在の配色では、ボタンの役割がわかりにくい可能性があります。
// ボタンのテキストをローカライズすることを検討してください。
//
class LandingPage extends StatefulWidget {
const LandingPage({ Key? key }) : super(key: key);
@ -20,18 +17,18 @@ class _LandingPageState extends State<LandingPage> {
child: Container(
width: double.infinity,
height: MediaQuery.of(context).size.height,
padding: const EdgeInsets.symmetric(horizontal: 30,vertical: 30),
padding: EdgeInsets.symmetric(horizontal: 30,vertical: 30),
child: Column(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Column(
crossAxisAlignment: CrossAxisAlignment.center,
children: [
const Text(
Text(
"こんにちは!",
style: TextStyle(fontWeight: FontWeight.bold, fontSize: 40),
),
const SizedBox(height: 30,),
SizedBox(height: 30,),
Text("ログインを有効にして本人確認を行うと、サーバーが改善されます",
textAlign: TextAlign.center,
style: TextStyle(
@ -41,11 +38,11 @@ class _LandingPageState extends State<LandingPage> {
),
Container(
height: MediaQuery.of(context).size.height/3,
decoration: const BoxDecoration(
decoration: BoxDecoration(
image:DecorationImage(image: AssetImage('assets/images/gradient_japanese_temple.jpg'))
),
),
const SizedBox(height: 20.0,),
SizedBox(height: 20.0,),
MaterialButton(
minWidth: double.infinity,
height:60,
@ -54,18 +51,18 @@ class _LandingPageState extends State<LandingPage> {
},
color: Colors.indigoAccent[400],
shape: RoundedRectangleBorder(
side: const BorderSide(
side: BorderSide(
color: Colors.black,
),
borderRadius: BorderRadius.circular(40)
),
child: const Text("ログイン",style: TextStyle(
child: Text("ログイン",style: TextStyle(
fontWeight: FontWeight.w600,fontSize: 16,color: Colors.white70
),
),
),
const SizedBox(height: 15.0,),
SizedBox(height: 15.0,),
MaterialButton(
minWidth: double.infinity,
@ -77,7 +74,7 @@ class _LandingPageState extends State<LandingPage> {
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(40)
),
child: const Text("サインアップ",style: TextStyle(
child: Text("サインアップ",style: TextStyle(
fontWeight: FontWeight.w600,fontSize: 16,
),),

View File

@ -1,17 +1,16 @@
import 'package:flutter/material.dart';
class LoadingPage extends StatelessWidget {
const LoadingPage({Key? key}) : super(key: key);
const LoadingPage({ Key? key }) : super(key: key);
// 要検討ローディングインジケーターの値を固定値0.8)にしていますが、実際のローディング進捗に合わせて動的に変更することを検討してください。
//
@override
Widget build(BuildContext context) {
return Container(
alignment: Alignment.center,
margin: const EdgeInsets.only(top: 20),
child: const CircularProgressIndicator(
value: 0.8,
));
alignment: Alignment.topCenter,
margin: EdgeInsets.only(top: 20),
child: CircularProgressIndicator(
value: 0.8,
)
);
}
}
}

View File

@ -1,325 +1,222 @@
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:rogapp/pages/index/index_controller.dart';
import 'package:rogapp/routes/app_pages.dart';
// 要検討:ログインボタンとサインアップボタンの配色を見直すことを検討してください。現在の配色では、ボタンの役割がわかりにくい可能性があります。
// エラーメッセージをローカライズすることを検討してください。
// ログイン処理中にエラーが発生した場合のエラーハンドリングを追加することをお勧めします。
//
class LoginPage extends StatelessWidget {
final IndexController indexController = Get.find<IndexController>();
TextEditingController emailController = TextEditingController();
TextEditingController passwordController = TextEditingController();
LoginPage({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return Scaffold(
resizeToAvoidBottomInset: false,
backgroundColor: Colors.white,
appBar: AppBar(
elevation: 0,
backgroundColor: Colors.white,
automaticallyImplyLeading: false,
),
/* 2024-04-03 Updated by Akira . See https://wiki.sumasen.net/issues/2796?issue_count=1&issue_position=1
appBar: AppBar(
elevation: 0,
backgroundColor: Colors.white,
leading: IconButton(
onPressed: () {
Navigator.pop(context);
},
icon: const Icon(
Icons.arrow_back_ios,
size: 20,
color: Colors.black,
)),
),
*/
body: indexController.currentUser.isEmpty
? SizedBox(
width: double.infinity,
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
children: [
Column(
appBar: AppBar(
elevation: 0,
backgroundColor: Colors.white,
leading:
IconButton( onPressed: (){
Navigator.pop(context);
},icon:Icon(Icons.arrow_back_ios,size: 20,color: Colors.black,)),
),
body:
indexController.currentUser.length == 0 ?
Container(
width: double.infinity,
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
children: [
Column(
children: [
Column(
children: [
Container(
height: MediaQuery.of(context).size.height/6,
decoration: BoxDecoration(
image:DecorationImage(image: AssetImage('assets/images/login_image.jpg'))
),
),
SizedBox(height: 5,),
],
),
Padding(
padding: EdgeInsets.symmetric(
horizontal: 40
),
child: Column(
children: [
Column(
children: [
Container(
height: MediaQuery.of(context).size.height / 6,
decoration: const BoxDecoration(
image: DecorationImage(
image: AssetImage(
'assets/images/login_image.jpg'))),
),
const SizedBox(
height: 5,
),
],
),
Padding(
padding: const EdgeInsets.symmetric(horizontal: 40),
child: Column(
children: [
makeInput(
label: "email".tr, controller: emailController),
makeInput(
label: "password".tr,
controller: passwordController,
obsureText: true),
],
),
),
Padding(
padding: const EdgeInsets.symmetric(horizontal: 40),
child: Container(
padding: const EdgeInsets.only(top: 3, left: 3),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(40),
),
child: Obx(
(() => indexController.isLoading.value == true
? MaterialButton(
minWidth: double.infinity,
height: 60,
onPressed: () {},
color: Colors.grey[400],
shape: RoundedRectangleBorder(
borderRadius:
BorderRadius.circular(40)),
child: const CircularProgressIndicator(),
)
: Column(
children: [
MaterialButton(
minWidth: double.infinity,
height: 40,
onPressed: () async {
if (emailController.text.isEmpty ||
passwordController
.text.isEmpty) {
Get.snackbar(
"no_values".tr,
"email_and_password_required"
.tr,
icon: const Icon(
Icons
.assistant_photo_outlined,
size: 40.0,
color: Colors.blue),
snackPosition:
SnackPosition.TOP,
duration: const Duration(
seconds: 3),
backgroundColor: Colors.yellow,
//icon:Image(image:AssetImage("assets/images/dora.png"))
);
return;
}
indexController.isLoading.value =
true;
indexController.login(
emailController.text,
passwordController.text,
context);
/*
try {
bool isLoggedIn = await indexController.login(emailController.text, passwordController.text,context);
if (isLoggedIn) {
Get.offAllNamed(AppPages.INDEX);
} else {
Get.snackbar(
"Login Failed",
"Invalid email or password",
icon: const Icon(Icons.error, color: Colors.red),
snackPosition: SnackPosition.BOTTOM,
);
}
} catch (e) {
Get.snackbar(
"Error",
"An error occurred during login",
icon: const Icon(Icons.error, color: Colors.red),
snackPosition: SnackPosition.BOTTOM,
);
} finally {
indexController.isLoading.value = false;
}
*/ // ここまで
},
color: Colors.indigoAccent[400],
shape: RoundedRectangleBorder(
borderRadius:
BorderRadius.circular(40)),
child: const Text(
"ログイン",
style: TextStyle(
fontWeight: FontWeight.w600,
fontSize: 16,
color: Colors.white70),
),
/*
child: Obx(
() => indexController.isLoading.value
? const CircularProgressIndicator(color: Colors.white)
: const Text(
"ログイン",
style: TextStyle(fontWeight: FontWeight.w600, fontSize: 16, color: Colors.white70),
),
),
*/ // ここまで
),
const SizedBox(
height: 5.0,
),
MaterialButton(
minWidth: double.infinity,
height: 40,
onPressed: () {
Get.toNamed(AppPages.REGISTER);
},
color: Colors.redAccent,
shape: RoundedRectangleBorder(
borderRadius:
BorderRadius.circular(40)),
child: Text(
"sign_up".tr,
style: const TextStyle(
fontWeight: FontWeight.w600,
fontSize: 16,
color: Colors.white70),
),
),
const SizedBox(
height: 2.0,
),
MaterialButton(
minWidth: double.infinity,
height: 40,
onPressed: () {
Get.back();
},
color: Colors.grey,
shape: RoundedRectangleBorder(
borderRadius:
BorderRadius.circular(40)),
child: Text(
"cancel".tr,
style: const TextStyle(
fontWeight: FontWeight.w600,
fontSize: 16,
color: Colors.white70),
),
),
],
)),
),
)),
const SizedBox(
height: 5,
),
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Flexible(
child: Padding(
padding: const EdgeInsets.all(8.0),
child: Text(
"rogaining_user_need_tosign_up".tr,
style: const TextStyle(
overflow: TextOverflow.ellipsis,
),
),
),
),
],
),
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Flexible(
child: Padding(
padding: const EdgeInsets.all(8.0),
child: Text(
"app_developed_by_gifu_dx".tr,
style: const TextStyle(
overflow: TextOverflow.ellipsis,
fontSize: 10.0),
),
),
),
],
),
const Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Flexible(
child: Padding(
padding: EdgeInsets.all(8.0),
child: Text(
"※第8回と第9回は、岐阜県からの「清流の国ぎふ」SDGs推進ネットワーク連携促進補助金を受けています",
style: TextStyle(
fontSize:
12, // Consider adjusting the font size if the text is too small.
// Removed overflow: TextOverflow.ellipsis to allow text wrapping.
),
),
),
),
],
),
makeInput(label: "email".tr, controller: emailController),
makeInput(label: "password".tr, controller: passwordController, obsureText: true),
],
),
],
),
)
: TextButton(
onPressed: () {
indexController.currentUser.clear();
},
child: const Text("Already Logged in, Click to logout"),
),
Padding(
padding: EdgeInsets.symmetric(horizontal: 40),
child: Container(
padding: EdgeInsets.only(top: 3,left: 3),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(40),
),
child: Obx((() =>
indexController.is_loading == true ? MaterialButton(
minWidth: double.infinity,
height:60,
onPressed: (){
},
color: Colors.grey[400],
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(40)
),
child: CircularProgressIndicator(),
) :
Column(
children: [
MaterialButton(
minWidth: double.infinity,
height:40,
onPressed: (){
if(emailController.text.isEmpty || passwordController.text.isEmpty){
Get.snackbar(
"no_values".tr,
"email_and_password_required".tr,
icon: Icon(Icons.assistant_photo_outlined, size: 40.0, color: Colors.blue),
snackPosition: SnackPosition.TOP,
duration: Duration(milliseconds: 800),
backgroundColor: Colors.yellow,
//icon:Image(image:AssetImage("assets/images/dora.png"))
);
return;
}
indexController.is_loading.value = true;
indexController.login(emailController.text, passwordController.text, context);
},
color: Colors.indigoAccent[400],
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(40)
),
child: Text("ログイン",style: TextStyle(
fontWeight: FontWeight.w600,fontSize: 16,color: Colors.white70
),
),
),
SizedBox(height: 5.0,),
MaterialButton(
minWidth: double.infinity,
height:40,
onPressed: (){
Get.toNamed(AppPages.REGISTER);
},
color: Colors.redAccent,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(40)
),
child: Text("sign_up".tr,style: TextStyle(
fontWeight: FontWeight.w600,fontSize: 16,color: Colors.white70
),
),
),
SizedBox(height: 2.0,),
MaterialButton(
minWidth: double.infinity,
height:40,
onPressed: (){
Get.back();
},
color: Colors.grey,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(40)
),
child: Text("cancel".tr,style: TextStyle(
fontWeight: FontWeight.w600,fontSize: 16,color: Colors.white70
),
),
),
],
)
),
),
)
),
SizedBox(height: 5,),
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Flexible(
child: Padding(
padding: const EdgeInsets.all(8.0),
child: Text("rogaining_user_need_tosign_up".tr, style: TextStyle(
overflow: TextOverflow.ellipsis,
),),
),
),
],
),
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Flexible(
child: Padding(
padding: const EdgeInsets.all(8.0),
child: Text("app_developed_by_gifu_dx".tr, style: TextStyle(
overflow: TextOverflow.ellipsis, fontSize: 10.0
),),
),
),
],
)
],
),
],
),
):
Container(
child: TextButton(
onPressed: (){
indexController.currentUser.clear();
},
child: Text("Already Logged in, Click to logout"),
),
)
,
);
}
}
Widget makeInput(
{label, required TextEditingController controller, obsureText = false}) {
Widget makeInput({label, required TextEditingController controller, obsureText = false}){
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
label,
style: const TextStyle(
fontSize: 15, fontWeight: FontWeight.w400, color: Colors.black87),
),
const SizedBox(
height: 5,
),
Text(label,style:TextStyle(
fontSize: 15,
fontWeight: FontWeight.w400,
color: Colors.black87
),),
SizedBox(height: 5,),
TextField(
controller: controller,
obscureText: obsureText,
decoration: InputDecoration(
contentPadding:
const EdgeInsets.symmetric(vertical: 0, horizontal: 10),
contentPadding: EdgeInsets.symmetric(vertical: 0,horizontal: 10),
enabledBorder: OutlineInputBorder(
borderSide: BorderSide(
color: (Colors.grey[400])!,
),
),
border: OutlineInputBorder(
borderSide: BorderSide(color: (Colors.grey[400])!),
borderSide: BorderSide(color: (Colors.grey[400])!
),
),
),
const SizedBox(
height: 30.0,
)
),
SizedBox(height: 30.0,)
],
);
}

View File

@ -3,10 +3,6 @@ import 'package:get/get.dart';
import 'package:rogapp/pages/index/index_controller.dart';
import 'package:rogapp/routes/app_pages.dart';
// 要検討:ログインボタンとサインアップボタンの配色を見直すことを検討してください。現在の配色では、ボタンの役割がわかりにくい可能性があります。
// エラーメッセージをローカライズすることを検討してください。
// ポップアップを閉じるボタンを追加することを検討してください。
//
class LoginPopupPage extends StatelessWidget {
LoginPopupPage({Key? key}) : super(key: key);
@ -19,232 +15,195 @@ class LoginPopupPage extends StatelessWidget {
Widget build(BuildContext context) {
return Scaffold(
resizeToAvoidBottomInset: false,
backgroundColor: Colors.white,
appBar: AppBar(
elevation: 0,
backgroundColor: Colors.white,
leading: IconButton(
onPressed: () {
Navigator.pop(context);
},
icon: const Icon(
Icons.arrow_back_ios,
size: 20,
color: Colors.black,
)),
),
body: indexController.currentUser.isEmpty
? SizedBox(
width: double.infinity,
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
children: [
Column(
appBar: AppBar(
elevation: 0,
backgroundColor: Colors.white,
leading:
IconButton( onPressed: (){
Navigator.pop(context);
},icon:Icon(Icons.arrow_back_ios,size: 20,color: Colors.black,)),
),
body:
indexController.currentUser.length == 0 ?
Container(
width: double.infinity,
child: Column(
mainAxisAlignment: MainAxisAlignment.start,
children: [
Column(
children: [
Column(
children: [
Container(
height: MediaQuery.of(context).size.height/5,
decoration: BoxDecoration(
image:DecorationImage(image: AssetImage('assets/images/login_image.jpg'))
),
),
SizedBox(height: 5,),
],
),
Padding(
padding: EdgeInsets.symmetric(
horizontal: 40
),
child: Column(
children: [
Column(
children: [
Container(
height: MediaQuery.of(context).size.height / 5,
decoration: const BoxDecoration(
image: DecorationImage(
image: AssetImage(
'assets/images/login_image.jpg'))),
),
const SizedBox(
height: 5,
),
],
),
Padding(
padding: const EdgeInsets.symmetric(horizontal: 40),
child: Column(
children: [
makeInput(
label: "email".tr, controller: emailController),
makeInput(
label: "password".tr,
controller: passwordController,
obsureText: true),
],
),
),
Padding(
padding: const EdgeInsets.symmetric(horizontal: 40),
child: Container(
padding: const EdgeInsets.only(top: 3, left: 3),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(40),
),
child: Obx(
(() => indexController.isLoading.value == true
? MaterialButton(
minWidth: double.infinity,
height: 60,
onPressed: () {},
color: Colors.grey[400],
shape: RoundedRectangleBorder(
borderRadius:
BorderRadius.circular(40)),
child: const CircularProgressIndicator(),
)
: Column(
children: [
MaterialButton(
minWidth: double.infinity,
height: 60,
onPressed: () {
if (emailController.text.isEmpty ||
passwordController
.text.isEmpty) {
Get.snackbar(
"no_values".tr,
"email_and_password_required"
.tr,
icon: const Icon(
Icons
.assistant_photo_outlined,
size: 40.0,
color: Colors.blue),
snackPosition:
SnackPosition.TOP,
duration: const Duration(
milliseconds: 800),
backgroundColor: Colors.yellow,
//icon:Image(image:AssetImage("assets/images/dora.png"))
);
return;
}
indexController.isLoading.value =
true;
indexController.login(
emailController.text,
passwordController.text,
context);
},
color: Colors.indigoAccent[400],
shape: RoundedRectangleBorder(
borderRadius:
BorderRadius.circular(40)),
child: const Text(
"ログイン",
style: TextStyle(
fontWeight: FontWeight.w600,
fontSize: 16,
color: Colors.white70),
),
),
const SizedBox(
height: 19.0,
),
MaterialButton(
minWidth: double.infinity,
height: 50,
onPressed: () {
Get.toNamed(AppPages.REGISTER);
},
color: Colors.redAccent,
shape: RoundedRectangleBorder(
borderRadius:
BorderRadius.circular(40)),
child: Text(
"sign_up".tr,
style: const TextStyle(
fontWeight: FontWeight.w600,
fontSize: 16,
color: Colors.white70),
),
),
const SizedBox(
height: 19.0,
),
MaterialButton(
minWidth: double.infinity,
height: 50,
onPressed: () {
Get.toNamed(AppPages.TRAVEL);
},
color: Colors.grey,
shape: RoundedRectangleBorder(
borderRadius:
BorderRadius.circular(40)),
child: Text(
"cancel".tr,
style: const TextStyle(
fontWeight: FontWeight.w600,
fontSize: 16,
color: Colors.white70),
),
)
],
)),
),
)),
const SizedBox(
height: 20,
),
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Flexible(
child: Padding(
padding: const EdgeInsets.all(8.0),
child: Text(
"rogaining_user_need_tosign_up".tr,
style: const TextStyle(
overflow: TextOverflow.ellipsis,
),
),
),
),
],
)
makeInput(label: "email".tr, controller: emailController),
makeInput(label: "password".tr, controller: passwordController, obsureText: true),
],
),
],
),
)
: TextButton(
onPressed: () {
indexController.currentUser.clear();
},
child: const Text("Already Logged in, Click to logout"),
),
Padding(
padding: EdgeInsets.symmetric(horizontal: 40),
child: Container(
padding: EdgeInsets.only(top: 3,left: 3),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(40),
),
child: Obx((() =>
indexController.is_loading == true ? MaterialButton(
minWidth: double.infinity,
height:60,
onPressed: (){
},
color: Colors.grey[400],
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(40)
),
child: CircularProgressIndicator(),
) :
Column(
children: [
MaterialButton(
minWidth: double.infinity,
height:60,
onPressed: (){
if(emailController.text.isEmpty || passwordController.text.isEmpty){
Get.snackbar(
"no_values".tr,
"email_and_password_required".tr,
icon: Icon(Icons.assistant_photo_outlined, size: 40.0, color: Colors.blue),
snackPosition: SnackPosition.TOP,
duration: Duration(milliseconds: 800),
backgroundColor: Colors.yellow,
//icon:Image(image:AssetImage("assets/images/dora.png"))
);
return;
}
indexController.is_loading.value = true;
indexController.login(emailController.text, passwordController.text, context);
},
color: Colors.indigoAccent[400],
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(40)
),
child: Text("ログイン",style: TextStyle(
fontWeight: FontWeight.w600,fontSize: 16,color: Colors.white70
),
),
),
SizedBox(height: 19.0,),
MaterialButton(
minWidth: double.infinity,
height:50,
onPressed: (){
Get.toNamed(AppPages.REGISTER);
},
color: Colors.redAccent,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(40)
),
child: Text("sign_up".tr,style: TextStyle(
fontWeight: FontWeight.w600,fontSize: 16,color: Colors.white70
),
),
),
SizedBox(height: 19.0,),
MaterialButton(
minWidth: double.infinity,
height:50,
onPressed: (){
Get.toNamed(AppPages.TRAVEL);
},
color: Colors.grey,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(40)
),
child: Text("cancel".tr,style: TextStyle(
fontWeight: FontWeight.w600,fontSize: 16,color: Colors.white70
),
),
)
],
)
),
),
)
),
SizedBox(height: 20,),
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Flexible(
child: Padding(
padding: const EdgeInsets.all(8.0),
child: Text("rogaining_user_need_tosign_up".tr, style: TextStyle(
overflow: TextOverflow.ellipsis,
),),
),
),
],
)
],
),
],
),
):
Container(
child: TextButton(
onPressed: (){
indexController.currentUser.clear();
},
child: Text("Already Logged in, Click to logout"),
),
)
,
);
}
}
Widget makeInput(
{label, required TextEditingController controller, obsureText = false}) {
Widget makeInput({label, required TextEditingController controller, obsureText = false}){
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
label,
style: const TextStyle(
fontSize: 15, fontWeight: FontWeight.w400, color: Colors.black87),
),
const SizedBox(
height: 5,
),
Text(label,style:TextStyle(
fontSize: 15,
fontWeight: FontWeight.w400,
color: Colors.black87
),),
SizedBox(height: 5,),
TextField(
controller: controller,
obscureText: obsureText,
decoration: InputDecoration(
contentPadding:
const EdgeInsets.symmetric(vertical: 0, horizontal: 10),
contentPadding: EdgeInsets.symmetric(vertical: 0,horizontal: 10),
enabledBorder: OutlineInputBorder(
borderSide: BorderSide(
color: (Colors.grey[400])!,
),
),
border: OutlineInputBorder(
borderSide: BorderSide(color: (Colors.grey[400])!),
borderSide: BorderSide(color: (Colors.grey[400])!
),
),
),
const SizedBox(
height: 30.0,
)
),
SizedBox(height: 30.0,)
],
);
}

View File

@ -1,31 +1,31 @@
// import 'package:flutter/material.dart';
// import 'package:get/get.dart';
// import 'package:rogapp/pages/index/index_controller.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:rogapp/pages/index/index_controller.dart';
// class MainPerfPage extends StatelessWidget {
// MainPerfPage({Key? key}) : super(key: key);
class MainPerfPage extends StatelessWidget {
MainPerfPage({Key? key}) : super(key: key);
// IndexController indexController = Get.find<IndexController>();
IndexController indexController = Get.find<IndexController>();
// @override
// Widget build(BuildContext context) {
// return Scaffold(
// appBar: AppBar(
// title: const Text("Select Main Perfecture"),
// ),
// body: ListView.builder(
// itemCount: indexController.perfectures.length,
// itemBuilder: (context, index){
// return ListTile(
// onTap: (){
// indexController.dropdownValue = indexController.perfectures[index][0]["id"].toString();
// indexController.populateForPerf(indexController.dropdownValue, indexController.mapController);
// Get.back();
// },
// title: Text(indexController.perfectures[index][0]["adm1_ja"].toString()),
// );
// },
// ),
// );
// }
// }
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("Select Main Perfecture"),
),
body: ListView.builder(
itemCount: indexController.perfectures.length,
itemBuilder: (context, index){
return ListTile(
onTap: (){
indexController.dropdownValue = indexController.perfectures[index][0]["id"].toString();
indexController.populateForPerf(indexController.dropdownValue, indexController.mapController!);
Get.back();
},
title: Text(indexController.perfectures[index][0]["adm1_ja"].toString()),
);
},
),
);
}
}

View File

@ -1,136 +1,233 @@
import 'dart:ffi';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:permission_handler/permission_handler.dart';
import 'package:rogapp/routes/app_pages.dart';
import 'dart:io';
class PermissionHandlerScreen extends StatefulWidget {
const PermissionHandlerScreen({Key? key}) : super(key: key);
const PermissionHandlerScreen({super.key});
@override
State<PermissionHandlerScreen> createState() =>
_PermissionHandlerScreenState();
State<PermissionHandlerScreen> createState() => _PermissionHandlerScreenState();
}
class _PermissionHandlerScreenState extends State<PermissionHandlerScreen> {
@override
void initState() {
void initState(){
super.initState();
WidgetsBinding.instance.addPostFrameCallback((_) {
_checkPermissionStatus();
});
_checkPermissions();
}
_checkPermissionStatus() async {
PermissionStatus status = await Permission.location.status;
void _checkPermissions() async {
// You can ask for multiple permissions at once.
Map<Permission, PermissionStatus> statuses = await [
Permission.location,
Permission.camera,
].request();
if (status.isGranted == false) {
if (context.mounted) {
showAlert(context);
}
} else if (status.isPermanentlyDenied) {
await requestPermission();
} else {
if (mounted) {
Get.toNamed(AppPages.LOGIN);
}
}
}
bool isCameraGranted = statuses[Permission.camera]!.isGranted;
bool isLocationGranted = statuses[Permission.location]!.isGranted;
void showAlert(BuildContext context) {
showDialog(
if (!isCameraGranted || !isLocationGranted) {
bool isCameraPermanentlyDenied = statuses[Permission.camera]!.isPermanentlyDenied;
bool isLocationPermanentlyDenied = statuses[Permission.location]!.isPermanentlyDenied;
if (isCameraPermanentlyDenied || isLocationPermanentlyDenied) {
showDialog(
context: context,
builder: (_) => AlertDialog(
title: const Text('ロケーション許可'),
content: const SingleChildScrollView(
child: ListBody(
children: <Widget>[
Text('ぎふナビ "アプリへようこそ!\n'),
Text('収集データ:\n'),
Text(
'岐阜ナビアプリをより快適にご利用いただくために、チェックポイントでの自動チェックインのための位置情報を収集しています。また、撮影した画像やチェックインした時間を収集し、チャレンジの勝者を決定します。\n'),
Text('お客様のデータの使用方法:\n'),
Text(
'お客様のデータは、アプリを改善し、競争力のある魅力的な体験を提供するのに役立ちます。お客様の位置情報と画像は、個人を特定できない統計データとして処理され、いかなる個人情報にもリンクされないようにしています\n'),
Text('お客様の管理:\n'),
Text(
'お客様はご自身のデータを完全に管理することができます。アプリの設定でいつでも同意を撤回することができます。位置情報の収集に同意しなくても、ぎふナビを楽しむことはできますが、自動チェックインや競技への参加など、一部の機能が制限されることを覚えておいてください。位置情報、画像、時刻情報の利用に同意する場合は「許可」を選択してください。許可しない場合は、「許可しない」を選択してください。あなたの選択は、アプリの他の機能を使用することに影響しません。\n'),
],
),
builder: (BuildContext context) {
return AlertDialog(
title: const Text('Permissions not granted'),
content: const Text(
'This app needs camera and location permissions to function. Please open settings and grant permissions.'),
actions: <Widget>[
ElevatedButton(
child: const Text('Open settings'),
onPressed: () {
openAppSettings();
},
),
actions: <Widget>[
ElevatedButton(
child: const Text('OK'),
onPressed: () {
Get.back();
requestPermission();
},
),
],
));
}
// 要検討:位置情報の許可が拒否された場合、適切なエラーメッセージを表示することを検討してください。
//
Future<void> requestPermission() async {
PermissionStatus permission = await Permission.location.status;
if (permission == PermissionStatus.permanentlyDenied) {
showPermanentAlert();
],
);
},
);
} else {
PermissionStatus newPermission = await Permission.location.request();
if (newPermission != PermissionStatus.granted) {
exit(0);
} else {
if (context.mounted) {
Get.toNamed(AppPages.LOGIN);
}
}
// ask permissions again
_checkPermissions();
}
} else {
Get.toNamed(AppPages.INITIAL);
}
}
@override
Widget build(BuildContext context) {
return const Scaffold(
body: Text(""),
body: Center(
child: Text('Checking permissions...'),
),
);
}
// 要検討:ユーザーが位置情報の許可を拒否し続けた場合の対処方法を明確にすることをお勧めします。
//
void showPermanentAlert() {
showDialog(
context: context,
builder: (_) => AlertDialog(
title: const Text('無効'),
content: const SingleChildScrollView(
child: ListBody(
children: <Widget>[
Text('位置情報が無効になっています'),
Text(
'このアプリケーションへの位置情報アクセスが無効になっています。続行するには設定>プライバシーとセキュリティ>位置情報サービス>岐阜ナビ で有効にしてください。'),
],
),
),
actions: <Widget>[
ElevatedButton(
child: const Text('OK'),
onPressed: () async {
await openAppSettings().then(
(value) async {
if (value) {
if (await Permission
.location.status.isPermanentlyDenied ==
true &&
await Permission.location.status.isGranted ==
false) {
requestPermission(); /* opens app settings until permission is granted */
}
}
},
);
},
),
],
));
}
}
// import 'package:flutter/material.dart';
// import 'package:get/get.dart';
// import 'package:permission_handler/permission_handler.dart';
// import 'package:rogapp/routes/app_pages.dart';
// class PermissionHandlerScreen extends StatefulWidget {
// PermissionHandlerScreen({Key? key}) : super(key: key);
// @override
// State<PermissionHandlerScreen> createState() => _PermissionHandlerScreenState();
// }
// class _PermissionHandlerScreenState extends State<PermissionHandlerScreen> {
// Future<void> _showMyDialog() async {
// return showDialog<void>(
// context: context,
// barrierDismissible: false, // user must tap button!
// builder: (BuildContext context) {
// return AlertDialog(
// title: const Text('ロケーション許可'),
// content: SingleChildScrollView(
// child: ListBody(
// children: const <Widget>[
// Text( 'このアプリでは、位置情報の収集を行います。'),
// Text( 'このアプリでは、開始時点で位置情報を収集します。'),
// ],
// ),
// ),
// actions: <Widget>[
// TextButton(
// child: const Text('わかった'),
// onPressed: () {
// //Navigator.of(context).pop();
// Get.toNamed(AppPages.TRAVEL);
// },
// ),
// ],
// );
// },
// );
// }
// @override
// void initState() {
// // TODO: implement initState
// super.initState();
// //permissionServiceCall();
// }
// Future<PermissionStatus> checkLocationPermission() async {
// return await Permission.location.status;
// }
// permissionServiceCall() async {
// await permissionServices().then(
// (value) {
// if (value != null) {
// if (value[Permission.location]!.isGranted ) {
// /* ========= New Screen Added ============= */
// Get.toNamed(AppPages.TRAVEL);
// // Navigator.pushReplacement(
// // context,
// // MaterialPageRoute(builder: (context) => SplashScreen()),
// // );
// }
// else{
// _showMyDialog();
// }
// }
// },
// );
// }
// /*Permission services*/
// Future<Map<Permission, PermissionStatus>> permissionServices() async {
// // You can request multiple permissions at once.
// Map<Permission, PermissionStatus> statuses = await [
// Permission.location,
// //add more permission to request here.
// ].request();
// if (statuses[Permission.location]!.isPermanentlyDenied) {
// await openAppSettings().then(
// (value) async {
// if (value) {
// if (await Permission.location.status.isPermanentlyDenied == true &&
// await Permission.location.status.isGranted == false) {
// // openAppSettings();
// permissionServiceCall(); /* opens app settings until permission is granted */
// }
// }
// },
// );
// } else {
// if (statuses[Permission.location]!.isDenied) {
// permissionServiceCall();
// }
// }
// /*{Permission.camera: PermissionStatus.granted, Permission.storage: PermissionStatus.granted}*/
// return statuses;
// }
// @override
// Widget build(BuildContext context) {
// var status = Permission.location.status.then((value){
// if(value.isGranted == false){
// Future.delayed(Duration.zero, () => showAlert(context));
// }
// else {
// Get.toNamed(AppPages.TRAVEL);
// }
// });
// return Scaffold(
// body: Container(
// child: Text(""),
// ),
// );
// }
// void showAlert(BuildContext context) {
// showDialog(
// context: context,
// builder: (_) => AlertDialog(
// title: const Text('ロケーション許可'),
// content: SingleChildScrollView(
// child: ListBody(
// children: const <Widget>[
// Text( 'このアプリでは、位置情報の収集を行います。'),
// Text('岐阜ナビアプリではチェックポイントの自動チェックインの機能を可能にするために、現在地のデータが収集されます。アプリを閉じている時や、使用していないときにも収集されます。位置情報は、個人を特定できない統計的な情報として、ユーザーの個人情報とは一切結びつかない形で送信されます。お知らせの配信、位置情報の利用を許可しない場合は、この後表示されるダイアログで「許可しない」を選択してください。'),
// ],
// ),
// ),
// actions: <Widget>[
// TextButton(
// child: const Text('わかった'),
// onPressed: () {
// permissionServiceCall();
// },
// ),
// ],
// )
// );
// }
// }

View File

@ -1,4 +1,7 @@
import 'package:flutter/material.dart';
import 'package:flutter/src/foundation/key.dart';
import 'package:flutter/src/widgets/container.dart';
import 'package:flutter/src/widgets/framework.dart';
class ProgressPage extends StatelessWidget {
const ProgressPage({Key? key}) : super(key: key);
@ -7,7 +10,7 @@ class ProgressPage extends StatelessWidget {
Widget build(BuildContext context) {
return Container(
color: Colors.transparent,
child: const Center(
child: Center(
child: CircularProgressIndicator(),
),
);

View File

@ -1,17 +1,18 @@
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:rogapp/pages/index/index_controller.dart';
import 'package:rogapp/routes/app_pages.dart';
class RegisterPage extends StatelessWidget {
final IndexController indexController = Get.find<IndexController>();
TextEditingController emailController = TextEditingController();
TextEditingController passwordController = TextEditingController();
TextEditingController confirmPasswordController = TextEditingController();
RegisterPage({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return Scaffold(
@ -20,19 +21,14 @@ class RegisterPage extends StatelessWidget {
appBar: AppBar(
elevation: 0,
backgroundColor: Colors.white,
leading: IconButton(
onPressed: () {
Navigator.pop(context);
},
icon: const Icon(
Icons.arrow_back_ios,
size: 20,
color: Colors.black,
)),
leading:
IconButton( onPressed: (){
Navigator.pop(context);
},icon:Icon(Icons.arrow_back_ios,size: 20,color: Colors.black,)),
),
body: SafeArea(
child: SingleChildScrollView(
child: SizedBox(
child: Container(
height: MediaQuery.of(context).size.height,
width: double.infinity,
child: Column(
@ -43,123 +39,102 @@ class RegisterPage extends StatelessWidget {
Column(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: [
const Text(
"サインアップ",
style: TextStyle(
fontSize: 30,
fontWeight: FontWeight.bold,
),
),
const SizedBox(
height: 20,
),
Text(
"アカウントを作成し、無料です",
style: TextStyle(
fontSize: 15,
color: Colors.grey[700],
),
),
const SizedBox(
height: 30,
)
Text ("サインアップ", style: TextStyle(
fontSize: 30,
fontWeight: FontWeight.bold,
),),
SizedBox(height: 20,),
Text("アカウントを作成し、無料です",style: TextStyle(
fontSize: 15,
color: Colors.grey[700],
),),
SizedBox(height: 30,)
],
),
Padding(
padding: const EdgeInsets.symmetric(horizontal: 40),
padding: EdgeInsets.symmetric(
horizontal: 40
),
child: Column(
children: [
makeInput(label: "Eメール", controller: emailController),
makeInput(
label: "パスワード",
controller: passwordController,
obsureText: true),
makeInput(
label: "パスワードを認証する",
controller: confirmPasswordController,
obsureText: true)
makeInput(label: "パスワード", controller: passwordController,obsureText: true),
makeInput(label: "パスワードを認証する", controller: confirmPasswordController,obsureText: true)
],
),
),
Padding(
padding: const EdgeInsets.symmetric(horizontal: 40),
padding: EdgeInsets.symmetric(horizontal: 40),
child: Container(
padding: const EdgeInsets.only(top: 3, left: 3),
padding: EdgeInsets.only(top: 3,left: 3),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(40),
border: const Border(
border: Border(
bottom: BorderSide(color: Colors.black),
top: BorderSide(color: Colors.black),
right: BorderSide(color: Colors.black),
left: BorderSide(color: Colors.black))),
left: BorderSide(color: Colors.black)
)
),
child: MaterialButton(
minWidth: double.infinity,
height: 60,
onPressed: () {
if (passwordController.text !=
confirmPasswordController.text) {
height:60,
onPressed: (){
if(passwordController.text != confirmPasswordController.text){
Get.snackbar(
"No match",
"Passwords does not match",
icon: const Icon(Icons.assistant_photo_outlined,
size: 40.0, color: Colors.blue),
"Passwords does not match",
icon: Icon(Icons.assistant_photo_outlined, size: 40.0, color: Colors.blue),
snackPosition: SnackPosition.TOP,
duration: const Duration(milliseconds: 800),
duration: Duration(milliseconds: 800),
backgroundColor: Colors.yellow,
//icon:Image(image:AssetImage("assets/images/dora.png"))
);
}
if (emailController.text.isEmpty ||
passwordController.text.isEmpty) {
if(emailController.text.isEmpty || passwordController.text.isEmpty){
Get.snackbar(
"no_values".tr,
"email_and_password_required".tr,
icon: const Icon(Icons.assistant_photo_outlined,
size: 40.0, color: Colors.blue),
"email_and_password_required".tr,
icon: Icon(Icons.assistant_photo_outlined, size: 40.0, color: Colors.blue),
snackPosition: SnackPosition.TOP,
duration: const Duration(milliseconds: 800),
duration: Duration(milliseconds: 800),
backgroundColor: Colors.yellow,
//icon:Image(image:AssetImage("assets/images/dora.png"))
);
return;
}
indexController.isLoading.value = true;
indexController.register(emailController.text,
passwordController.text, context);
indexController.is_loading.value = true;
indexController.register(emailController.text, passwordController.text, context);
},
color: Colors.redAccent,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(40)),
child: Text(
"sign_up".tr,
style: const TextStyle(
fontWeight: FontWeight.w600,
fontSize: 16,
),
borderRadius: BorderRadius.circular(40)
),
child: Text("sign_up".tr,style: TextStyle(
fontWeight: FontWeight.w600,fontSize: 16,
),),
),
),
),
const SizedBox(
height: 20,
),
SizedBox(height: 20,),
Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
const Flexible(child: Text("すでにアカウントをお持ちですか?")),
Flexible(child: Text("すでにアカウントをお持ちですか?")),
TextButton(
onPressed: () {
onPressed: (){
Get.toNamed(AppPages.LOGIN);
},
child: const Text(
"ログイン",
style: TextStyle(
fontWeight: FontWeight.w600, fontSize: 18),
),
child: Text("ログイン",style: TextStyle(
fontWeight: FontWeight.w600,
fontSize: 18
),),
),
],
)
],
),
],
),
@ -170,38 +145,34 @@ class RegisterPage extends StatelessWidget {
}
}
Widget makeInput(
{label, required TextEditingController controller, obsureText = false}) {
Widget makeInput({label, required TextEditingController controller, obsureText = false}){
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
label,
style: const TextStyle(
fontSize: 15, fontWeight: FontWeight.w400, color: Colors.black87),
),
const SizedBox(
height: 5,
),
Text(label,style:TextStyle(
fontSize: 15,
fontWeight: FontWeight.w400,
color: Colors.black87
),),
SizedBox(height: 5,),
TextField(
controller: controller,
obscureText: obsureText,
decoration: InputDecoration(
contentPadding:
const EdgeInsets.symmetric(vertical: 0, horizontal: 10),
contentPadding: EdgeInsets.symmetric(vertical: 0,horizontal: 10),
enabledBorder: OutlineInputBorder(
borderSide: BorderSide(
color: (Colors.grey[400])!,
),
),
border: OutlineInputBorder(
borderSide: BorderSide(color: (Colors.grey[400])!),
borderSide: BorderSide(color: (Colors.grey[400])!
),
),
),
const SizedBox(
height: 30,
)
),
SizedBox(height: 30,)
],
);
}

View File

@ -1,21 +1,26 @@
import 'package:geojson_vi/geojson_vi.dart';
import 'package:flutter/material.dart';
import 'package:geojson/geojson.dart';
import 'package:get/get.dart';
import 'package:get/get_state_manager/get_state_manager.dart';
import 'package:rogapp/model/destination.dart';
import 'package:rogapp/pages/index/index_controller.dart';
class SearchBarController extends GetxController {
List<GeoJSONFeature> searchResults = <GeoJSONFeature>[].obs;
@override
List<GeoJsonFeature> searchResults = <GeoJsonFeature>[].obs;
@override
void onInit() {
IndexController indexController = Get.find<IndexController>();
if (indexController.locations.isNotEmpty) {
for (int i = 0;
i <= indexController.locations[0].features.length - 1;
i++) {
GeoJSONFeature p = indexController.locations[0].features[i]!;
if(indexController.locations.isNotEmpty){
for(int i=0; i<= indexController.locations[0].collection.length - 1; i++){
GeoJsonFeature p = indexController.locations[0].collection[i];
searchResults.add(p);
}
}
super.onInit();
}
}
}

View File

@ -1,32 +1,29 @@
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_typeahead/flutter_typeahead.dart';
import 'package:geojson_vi/geojson_vi.dart';
import 'package:geojson/geojson.dart';
import 'package:get/get.dart';
import 'package:rogapp/model/destination.dart';
import 'package:rogapp/pages/destination/destination_controller.dart';
import 'package:rogapp/pages/index/index_controller.dart';
import 'package:rogapp/pages/search/search_controller.dart';
import 'package:rogapp/widgets/bottom_sheet_new.dart';
class SearchPage extends StatelessWidget {
SearchPage({Key? key}) : super(key: key);
SearchPage({Key? key}) : super(key: key);
SearchBarController searchController = Get.find<SearchBarController>();
IndexController indexController = Get.find<IndexController>();
Image getImage(int index) {
if (searchController.searchResults[index].properties!["photos"] == null ||
searchController.searchResults[index].properties!["photos"] == "") {
return const Image(image: AssetImage('assets/images/empty_image.png'));
} else {
Image getImage(int index){
if(searchController.searchResults[index].properties!["photos"] == null || searchController.searchResults[index].properties!["photos"] == ""){
return Image(image: AssetImage('assets/images/empty_image.png'));
}
else{
return Image(
image: NetworkImage(
searchController.searchResults[index].properties!["photos"]),
errorBuilder:
(BuildContext context, Object exception, StackTrace? stackTrace) {
image: NetworkImage(searchController.searchResults[index].properties!["photos"]),
errorBuilder: (BuildContext context, Object exception, StackTrace? stackTrace) {
return Image.asset("assets/images/empty_image.png");
},
);
);
}
}
@ -37,76 +34,42 @@ class SearchPage extends StatelessWidget {
elevation: 0,
backgroundColor: Colors.white,
leading: IconButton(
onPressed: () {
Get.back();
},
icon: const Icon(
Icons.arrow_back_ios_new,
color: Colors.black,
)),
centerTitle: true,
//title: const CupertinoSearchTextField(),
),
body: SingleChildScrollView(
child: TypeAheadField<GeoJSONFeature>(
// textFieldConfiguration: TextFieldConfiguration(
// autofocus: true,
// style: DefaultTextStyle.of(context).style.copyWith(
// fontStyle: FontStyle.normal,
// fontSize: 15.0,
// ),
// decoration: InputDecoration(
// border: const OutlineInputBorder(),
// hintText: "検索",
// prefixIcon: const Icon(Icons.search),
// suffixIcon: IconButton(
// icon: const Icon(Icons.clear),
// onPressed: () {
// // clear the text field
// },
// ),
// ),
// ),
onSelected: (GeoJSONFeature suggestion) {
indexController.currentFeature.clear();
indexController.currentFeature.add(suggestion);
DestinationController destinationController =
Get.find<DestinationController>();
Destination des =
destinationController.festuretoDestination(suggestion);
Get.back();
showModalBottomSheet(
constraints:
BoxConstraints.loose(Size(Get.width, Get.height * 0.75)),
isScrollControlled: true,
context: context,
//builder: (context) => BottomSheetWidget(),
builder: ((context) => BottomSheetNew(
destination: des,
)));
onPressed:(){
Navigator.pop(context);
},
icon: const Icon(Icons.arrow_back_ios_new, color: Colors.black,)),
title: TypeAheadField(
textFieldConfiguration: TextFieldConfiguration(
autofocus: true,
),
suggestionsCallback: (pattern) async{
return searchController.searchResults.where((GeoJsonFeature element) => element.properties!["location_name"].toString().contains(pattern));
//return await
},
suggestionsCallback: (pattern) async {
return searchController.searchResults
.where((GeoJSONFeature element) => element
.properties!["location_name"]
.toString()
.contains(pattern))
.toList();
//return await
},
itemBuilder: (context, GeoJSONFeature suggestion) {
itemBuilder: (context, GeoJsonFeature suggestion){
return ListTile(
title: Text(suggestion.properties!["location_name"]),
subtitle: suggestion.properties!["category"] != null
? Text(suggestion.properties!["category"])
: const Text(""),
subtitle: suggestion.properties!["category"] != null ? Text(suggestion.properties!["category"]) : Text(""),
//leading: getImage(index),
);
},
onSuggestionSelected: (GeoJsonFeature suggestion){
indexController.currentFeature.clear();
indexController.currentFeature.add(suggestion);
Get.back();
showModalBottomSheet(
isScrollControlled: true,
context: context,
//builder: (context) => BottomSheetWidget(),
builder:((context) => BottomSheetNew())
);
},
),
//title: const CupertinoSearchTextField(),
),
// Obx(() =>
//body:
// Obx(() =>
// ListView.builder(
// itemCount: searchController.searchResults.length,
// itemBuilder: (context, index){
@ -131,4 +94,4 @@ class SearchPage extends StatelessWidget {
// )
);
}
}
}

View File

@ -11,7 +11,7 @@ class SubPerfPage extends StatelessWidget {
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text("Select Sub Perfecture"),
title: Text("Select Sub Perfecture"),
),
body: ListView.builder(
itemCount: indexController.subPerfs.length,

View File

@ -1,31 +0,0 @@
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:rogapp/model/auth_user.dart';
import 'package:shared_preferences/shared_preferences.dart';
final authUserStateProvider =
StateNotifierProvider<AuthUserState, AuthUser>((ref) {
return AuthUserState();
});
class AuthUserState extends StateNotifier<AuthUser> {
AuthUserState() : super(AuthUser());
Future<void> saveToDevice(String val) async {
final SharedPreferences prefs = await SharedPreferences.getInstance();
await prefs.setString("user_token", val);
}
Future<String?> tokenFromDevice() async {
final SharedPreferences prefs = await SharedPreferences.getInstance();
return prefs.getString("user_token");
}
Future<void> addLogin(AuthUser user) async {
state = user;
await saveToDevice(user.auth_token!);
}
void removeLogin() {
state = AuthUser();
}
}

View File

@ -1,22 +0,0 @@
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:rogapp/model/game_state_instance.dart';
final gameStateNotifierProvider =
StateNotifierProvider<GameStaticState, GameInsStatetance>((ref) {
return GameStaticState();
});
class GameStaticState extends StateNotifier<GameInsStatetance> {
GameStaticState() : super(GameInsStatetance());
@override
GameInsStatetance get state => super.state;
void startGame(GameInsStatetance gi) {
state = gi;
}
void doCheckin() {}
void makeGoal() {}
}

View File

@ -1,18 +0,0 @@
import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:rogapp/model/map_state_instance.dart';
final mapStateNotifierProvider =
StateNotifierProvider<MapState, MapStateInstance>((ref) {
return MapState();
});
class MapState extends StateNotifier<MapStateInstance> {
MapState() : super(MapStateInstance());
@override
MapStateInstance get state => super.state;
void startGame(MapStateInstance mi) {
state = mi;
}
}

View File

@ -1,12 +1,11 @@
import 'package:get/get.dart';
import 'package:get/get_navigation/src/routes/get_route.dart';
import 'package:rogapp/pages/camera/camera_page.dart';
import 'package:rogapp/pages/category/category_page.dart';
import 'package:rogapp/pages/changepassword/change_password_page.dart';
import 'package:rogapp/pages/city/city_page.dart';
import 'package:rogapp/pages/destination/destination_binding.dart';
import 'package:rogapp/pages/gps/gps_page.dart';
import 'package:rogapp/pages/history/history_page.dart';
import 'package:rogapp/pages/home/home_binding.dart';
import 'package:rogapp/pages/destination/destination_page.dart';
import 'package:rogapp/pages/home/home_page.dart';
import 'package:rogapp/pages/index/index_page.dart';
@ -20,14 +19,25 @@ import 'package:rogapp/pages/register/register_page.dart';
import 'package:rogapp/pages/search/search_binding.dart';
import 'package:rogapp/pages/search/search_page.dart';
import 'package:rogapp/pages/subperf/subperf_page.dart';
import 'package:rogapp/screens/auth/views/login/login_screen.dart';
import 'package:rogapp/screens/auth/views/register/register_screen.dart';
import 'package:rogapp/screens/home/home_screen.dart';
import 'package:rogapp/spa/spa_binding.dart';
import 'package:rogapp/spa/spa_page.dart';
import '../screens/home/home_binding.dart';
part 'app_routes.dart';
class AppPages {
static const S_HOME = Routes.S_HOME;
static const S_LOGIN = Routes.S_LOGIN;
static const S_REGISTER= Routes.S_REGISTER;
// ignore: constant_identifier_names
static const INDEX = Routes.INDEX;
static const INITIAL = Routes.INDEX;
// ignore: constant_identifier_names
static const SPA = Routes.SPA;
static const LANDING = Routes.LANDING;
@ -46,18 +56,45 @@ class AppPages {
static const CHANGE_PASSWORD = Routes.CHANGE_PASSWORD;
static const CAMERA_PAGE = Routes.CAMERA_PAGE;
static const PROGRESS = Routes.PROGRESS;
static const HISTORY = Routes.HISTORY;
static const GPS = Routes.GPS;
static final routes = [
// GetPage(
// name: Routes.HOME,
// page: () => HomePage(),
// binding: HomeBinding(),
// ),
// GetPage(
// name: Routes.MAP,
// page: () => MapPage(),
// binding: MapBinding(),
// )
GetPage(
name: Routes.S_HOME,
page: () => HomeScreen(),
binding: HomeBinding()
),
GetPage(
name: Routes.S_LOGIN,
page: () => LoginScreen(),
//binding: IndexBinding(),
),
GetPage(
name: Routes.S_REGISTER,
page: () => RegisterScreen(),
),
GetPage(
name: Routes.INDEX,
page: () => IndexPage(),
//binding: IndexBinding(),
),
GetPage(
name: Routes.SPA,
page: () => const SpaPage(),
binding: SpaBinding(),
),
GetPage(
name: Routes.LANDING,
page: () => const LandingPage(),
page: () => LandingPage(),
//binding: SpaBinding(),
),
GetPage(
@ -70,44 +107,62 @@ class AppPages {
page: () => RegisterPage(),
//binding: SpaBinding(),
),
GetPage(
name: Routes.TRAVEL,
page: () => DestnationPage(),
binding: DestinationBinding(),
),
GetPage(
name: Routes.LOADING,
page: () => const LoadingPage(),
page: () => LoadingPage(),
//binding: DestinationBinding(),
),
GetPage(
name: Routes.DESTINATION_MAP,
page: () => DestnationPage(),
//binding: DestinationBinding(),
),
GetPage(
name: Routes.HOME,
page: () => const HomePage(),
page: () => HomePage(),
binding: HomeBinding(),
),
GetPage(
name: Routes.PERMISSION,
page: () => const PermissionHandlerScreen(),
page: () => PermissionHandlerScreen(),
),
GetPage(
name: Routes.SEARCH,
page: () => SearchPage(),
binding: SearchBinding(),
),
GetPage(
name: Routes.MAINPERF,
page: () => MainPerfPage(),
),
GetPage(
name: Routes.SUBPERF,
page: () => SubPerfPage(),
),
GetPage(
name: Routes.CITY,
page: () => const CityPage(),
page: () => CityPage(),
),
GetPage(
name: Routes.CATEOGORY,
page: () => CategoryPage(),
),
GetPage(
name: Routes.CHANGE_PASSWORD,
page: () => ChangePasswordPage(),
),
GetPage(
name: Routes.CAMERA_PAGE,
page: () => CameraPage(),
),
GetPage(
name: Routes.PROGRESS,
page: () => const ProgressPage(),
),
GetPage(
name: Routes.HISTORY,
page: () => const HistoryPage(),
),
GetPage(
name: Routes.GPS,
page: () => const GpsPage(),
page: () => ProgressPage(),
)
];
}
}

View File

@ -1,6 +1,9 @@
part of 'app_pages.dart';
abstract class Routes {
static const S_HOME = '/s_home';
static const S_LOGIN = '/s_login';
static const S_REGISTER = '/s_register';
// Main Menu Route
// static const HOME = '/';
// static const MAP = '/map';
@ -24,6 +27,4 @@ abstract class Routes {
static const CHANGE_PASSWORD = '/change_password';
static const CAMERA_PAGE = '/camera_page';
static const PROGRESS = '/progress';
static const HISTORY = '/history';
static const GPS = '/gp';
}

View File

@ -0,0 +1,36 @@
import 'package:flutter/material.dart';
import 'package:rogapp/theme/pallete.dart';
class AuthTextField extends StatelessWidget {
final TextEditingController controller;
final String hinttext;
final bool isObsque;
const AuthTextField({super.key, required this.controller, required this.hinttext, this.isObsque = false});
@override
Widget build(BuildContext context) {
return TextFormField(
controller: controller,
decoration: InputDecoration(
focusedBorder: OutlineInputBorder(
borderRadius: BorderRadius.circular(5),
borderSide: const BorderSide(
color: Pallete.BLUE_COLOR,
width: 2
)
),
enabledBorder: OutlineInputBorder(
borderRadius: BorderRadius.circular(5),
borderSide: const BorderSide(
color: Pallete.BROWN_COLOR,
)
),
contentPadding: const EdgeInsets.all(22),
hintText: hinttext,
hintStyle: const TextStyle(
fontSize: 18,
)
),
);
}
}

View File

@ -0,0 +1,30 @@
import 'package:rogapp/theme/theme.dart';
import 'package:flutter/material.dart';
class RoundedSmallButton extends StatelessWidget {
final VoidCallback onTap;
final String label;
final Color backgroundColor;
final Color textColor;
const RoundedSmallButton({
super.key,
required this.onTap,
required this.label,
this.backgroundColor = Pallete.WHITE_COLOR,
this.textColor = Pallete.BACKGROUND_COLOR,
});
@override
Widget build(BuildContext context) {
return InkWell(
onTap: onTap,
child: Chip(
label: Text(label, style: TextStyle(color: textColor, fontSize: 16),),
backgroundColor: backgroundColor,
labelPadding:const EdgeInsets.symmetric(horizontal: 10, vertical: 3),
),
);
}
}

View File

@ -0,0 +1,45 @@
import 'dart:convert' as convert;
import 'package:get/get.dart';
import 'package:rogapp/model/user.dart';
import 'package:rogapp/utils/const.dart';
import 'package:http/http.dart' as http;
class AuthController extends GetxController{
var isLoading = false.obs;
var authList = List<AuthResponse>.empty(growable: true).obs;
void signinUser(String email, String password) async {
try{
isLoading(true);
String serverUrl = ConstValues.currentServer();
String url = '$serverUrl/api/login/';
final http.Response response = await http.post(
Uri.parse(url),
headers: <String, String>{
'Content-Type': 'application/json; charset=UTF-8',
},
body: convert.jsonEncode(<String, String>{
'email': email,
'password': password
}),
);
if (response.statusCode == 200) {
print(response.body);
AuthResponse authResponse = AuthResponse.fromJson(convert.jsonDecode(convert.utf8.decode(response.body.codeUnits)));
print(authResponse.user.eventCode.toString());
authList.assign(authResponse);
}
else{
throw("Unable to Login, please check your creadentials");
}
}
catch(e){
Get.snackbar("Error", e.toString(), snackPosition: SnackPosition.BOTTOM);
}
finally{
isLoading(false);
}
}
}

View File

@ -0,0 +1,5 @@
import 'package:get/get.dart';
class LoginController extends GetxController{
}

View File

@ -0,0 +1,75 @@
import 'package:flutter/gestures.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:rogapp/common/ui/widgets/uis.dart';
import 'package:rogapp/routes/app_pages.dart';
import 'package:rogapp/screens/auth/common/uis/auth_text_field.dart';
import 'package:rogapp/screens/auth/common/uis/rounded_small_button.dart';
import 'package:rogapp/screens/auth/controller/auth_controller.dart';
import 'package:rogapp/theme/theme.dart';
class LoginScreen extends StatelessWidget {
final emailController = TextEditingController();
final passwordController = TextEditingController();
LoginScreen({super.key});
final AuthController authController = Get.find<AuthController>();
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: UIs.appBar(),
body: Obx((){
if(authController.isLoading.value) {
return const Center(child: CircularProgressIndicator(),);
} else {
return Center(
child: SingleChildScrollView(
child: Padding(
padding: const EdgeInsets.all(8.0),
child: Column(
children: [
Container(
height: MediaQuery.of(context).size.height/6,
decoration: const BoxDecoration(
image:DecorationImage(image: AssetImage('assets/images/login_image.jpg'))
),
),
const SizedBox(height: 5,),
AuthTextField(controller: emailController, hinttext: 'Email',),
const SizedBox(height: 25,),
AuthTextField(controller: passwordController, hinttext: 'Password',),
const SizedBox(height: 40,),
Align(
alignment: Alignment.topRight,
child: RoundedSmallButton(onTap: (){
authController.signinUser(emailController.text, passwordController.text);
},
label: 'Done',),
),
const SizedBox(height: 40,),
RichText(
text: TextSpan(
text: "Don't have an account?",
style: const TextStyle(fontSize: 16, color: Pallete.BROWN_COLOR),
children: [
TextSpan(
text: " Signup",
style: const TextStyle(color: Pallete.BLUE_COLOR, fontSize: 16),
recognizer: TapGestureRecognizer()..onTap = (){
Get.toNamed(AppPages.S_REGISTER);
},
),
]
)
)
],
),
),
),
);
}
}),
);
}
}

Some files were not shown because too many files have changed in this diff Show More