Compare commits
24 Commits
main
...
6c062682f6
| Author | SHA1 | Date | |
|---|---|---|---|
| 6c062682f6 | |||
| 0d61ca6d01 | |||
| 2cf910e5a1 | |||
| 9e221e70fa | |||
| 434b31eab2 | |||
| 3f66531ab3 | |||
| 46309589e4 | |||
| 03c550cba5 | |||
| a7a97bfeae | |||
| be701d6e50 | |||
| 20a4cb7ab2 | |||
| df5651feac | |||
| 560a262521 | |||
| 5f4dc6fc01 | |||
| 0c1ef39a32 | |||
| eec626ac3a | |||
| 4dfb710eba | |||
| 66b4708d63 | |||
| 7c2577259e | |||
| 5014ad6bd3 | |||
| 325e6d4f63 | |||
| 13050116ac | |||
| dd5be31611 | |||
| 4f7bb569d8 |
5
.gitignore
vendored
@ -41,3 +41,8 @@ app.*.map.json
|
|||||||
/android/app/debug
|
/android/app/debug
|
||||||
/android/app/profile
|
/android/app/profile
|
||||||
/android/app/release
|
/android/app/release
|
||||||
|
|
||||||
|
#keystore
|
||||||
|
clave-crcivan.jks
|
||||||
|
keystore-crcivan.jks
|
||||||
|
key.properties
|
||||||
9
.vscode/launch.json
vendored
@ -7,19 +7,22 @@
|
|||||||
{
|
{
|
||||||
"name": "flutter_project",
|
"name": "flutter_project",
|
||||||
"request": "launch",
|
"request": "launch",
|
||||||
"type": "dart"
|
"type": "dart",
|
||||||
|
"program": "lib/main/main.dart"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "flutter_project (profile mode)",
|
"name": "flutter_project (profile mode)",
|
||||||
"request": "launch",
|
"request": "launch",
|
||||||
"type": "dart",
|
"type": "dart",
|
||||||
"flutterMode": "profile"
|
"flutterMode": "profile",
|
||||||
|
"program": "lib/main.dart"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "flutter_project (release mode)",
|
"name": "flutter_project (release mode)",
|
||||||
"request": "launch",
|
"request": "launch",
|
||||||
"type": "dart",
|
"type": "dart",
|
||||||
"flutterMode": "release"
|
"flutterMode": "release",
|
||||||
|
"program": "lib/main.dart"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
@ -4,6 +4,12 @@ plugins {
|
|||||||
id "dev.flutter.flutter-gradle-plugin"
|
id "dev.flutter.flutter-gradle-plugin"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
def keystoreProperties = new Properties()
|
||||||
|
def keystorePropertiesFile = rootProject.file('key.properties')
|
||||||
|
if (keystorePropertiesFile.exists()) {
|
||||||
|
keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
|
||||||
|
}
|
||||||
|
|
||||||
def localProperties = new Properties()
|
def localProperties = new Properties()
|
||||||
def localPropertiesFile = rootProject.file('local.properties')
|
def localPropertiesFile = rootProject.file('local.properties')
|
||||||
if (localPropertiesFile.exists()) {
|
if (localPropertiesFile.exists()) {
|
||||||
@ -14,26 +20,40 @@ if (localPropertiesFile.exists()) {
|
|||||||
|
|
||||||
def flutterVersionCode = localProperties.getProperty('flutter.versionCode')
|
def flutterVersionCode = localProperties.getProperty('flutter.versionCode')
|
||||||
if (flutterVersionCode == null) {
|
if (flutterVersionCode == null) {
|
||||||
flutterVersionCode = '1'
|
flutterVersionCode = '2'
|
||||||
}
|
}
|
||||||
|
|
||||||
def flutterVersionName = localProperties.getProperty('flutter.versionName')
|
def flutterVersionName = localProperties.getProperty('flutter.versionName')
|
||||||
if (flutterVersionName == null) {
|
if (flutterVersionName == null) {
|
||||||
flutterVersionName = '1.0'
|
flutterVersionName = '1.1'
|
||||||
}
|
}
|
||||||
|
|
||||||
android {
|
android {
|
||||||
namespace "com.example.flutter_project"
|
namespace "com.asociacionador.civan"
|
||||||
compileSdk flutter.compileSdkVersion
|
compileSdk flutter.compileSdkVersion
|
||||||
ndkVersion flutter.ndkVersion
|
ndkVersion flutter.ndkVersion
|
||||||
|
signingConfigs {
|
||||||
|
release {
|
||||||
|
keyAlias = keystoreProperties['keyAlias']
|
||||||
|
keyPassword = keystoreProperties['keyPassword']
|
||||||
|
storeFile = keystoreProperties['storeFile'] ? file(keystoreProperties['storeFile']) : null
|
||||||
|
storePassword = keystoreProperties['storePassword']
|
||||||
|
}
|
||||||
|
}
|
||||||
|
buildTypes {
|
||||||
|
release {
|
||||||
|
signingConfig = signingConfigs.release
|
||||||
|
debuggable false
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
compileOptions {
|
compileOptions {
|
||||||
sourceCompatibility JavaVersion.VERSION_1_8
|
sourceCompatibility JavaVersion.VERSION_17
|
||||||
targetCompatibility JavaVersion.VERSION_1_8
|
targetCompatibility JavaVersion.VERSION_17
|
||||||
}
|
}
|
||||||
|
|
||||||
kotlinOptions {
|
kotlinOptions {
|
||||||
jvmTarget = '1.8'
|
jvmTarget = JavaVersion.VERSION_17
|
||||||
}
|
}
|
||||||
|
|
||||||
sourceSets {
|
sourceSets {
|
||||||
@ -42,21 +62,13 @@ android {
|
|||||||
|
|
||||||
defaultConfig {
|
defaultConfig {
|
||||||
// TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
|
// TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
|
||||||
applicationId "com.example.flutter_project"
|
applicationId "com.asociacionador.civan"
|
||||||
// You can update the following values to match your application needs.
|
// You can update the following values to match your application needs.
|
||||||
// For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration.
|
// For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration.
|
||||||
minSdkVersion flutter.minSdkVersion
|
minSdkVersion flutter.minSdkVersion
|
||||||
targetSdkVersion flutter.targetSdkVersion
|
targetSdkVersion flutter.targetSdkVersion
|
||||||
versionCode flutterVersionCode.toInteger()
|
versionCode 8
|
||||||
versionName flutterVersionName
|
versionName "2.1"
|
||||||
}
|
|
||||||
|
|
||||||
buildTypes {
|
|
||||||
release {
|
|
||||||
// TODO: Add your own signing config for the release build.
|
|
||||||
// Signing with the debug keys for now, so `flutter run --release` works.
|
|
||||||
signingConfig signingConfigs.debug
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -1,8 +1,11 @@
|
|||||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
|
||||||
<application
|
<application
|
||||||
android:label="flutter_project"
|
android:label="CRCivan"
|
||||||
android:name="${applicationName}"
|
android:name="${applicationName}"
|
||||||
android:icon="@mipmap/ic_launcher">
|
android:icon="@mipmap/ic_launcher"
|
||||||
|
android:roundIcon="@mipmap/ic_launcher_round">
|
||||||
|
|
||||||
<activity
|
<activity
|
||||||
android:name=".MainActivity"
|
android:name=".MainActivity"
|
||||||
android:exported="true"
|
android:exported="true"
|
||||||
@ -11,34 +14,32 @@
|
|||||||
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
|
android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode"
|
||||||
android:hardwareAccelerated="true"
|
android:hardwareAccelerated="true"
|
||||||
android:windowSoftInputMode="adjustResize">
|
android:windowSoftInputMode="adjustResize">
|
||||||
<!-- Specifies an Android theme to apply to this Activity as soon as
|
|
||||||
the Android process has started. This theme is visible to the user
|
|
||||||
while the Flutter UI initializes. After that, this theme continues
|
|
||||||
to determine the Window background behind the Flutter UI. -->
|
|
||||||
<meta-data
|
|
||||||
android:name="io.flutter.embedding.android.NormalTheme"
|
|
||||||
android:resource="@style/NormalTheme"
|
|
||||||
/>
|
|
||||||
<intent-filter>
|
<intent-filter>
|
||||||
<action android:name="android.intent.action.MAIN"/>
|
<action android:name="android.intent.action.MAIN"/>
|
||||||
<category android:name="android.intent.category.LAUNCHER"/>
|
<category android:name="android.intent.category.LAUNCHER"/>
|
||||||
</intent-filter>
|
</intent-filter>
|
||||||
|
<!-- Especifica un tema de Android para aplicar a esta actividad tan pronto como se haya iniciado el proceso de Android. Este tema es visible para el usuario mientras la interfaz de usuario de Flutter se inicializa. Después de eso, este tema continúa determinando el fondo de la ventana detrás de la interfaz de usuario de Flutter. -->
|
||||||
|
<meta-data
|
||||||
|
android:name="io.flutter.embedding.android.NormalTheme"
|
||||||
|
android:resource="@style/NormalTheme" />
|
||||||
</activity>
|
</activity>
|
||||||
<!-- Don't delete the meta-data below.
|
|
||||||
This is used by the Flutter tool to generate GeneratedPluginRegistrant.java -->
|
<!-- No elimines los metadatos a continuación. Esto es utilizado por la herramienta Flutter para generar GeneratedPluginRegistrant.java -->
|
||||||
<meta-data
|
<meta-data
|
||||||
android:name="flutterEmbedding"
|
android:name="flutterEmbedding"
|
||||||
android:value="2" />
|
android:value="2" />
|
||||||
</application>
|
|
||||||
<!-- Required to query activities that can process text, see:
|
|
||||||
https://developer.android.com/training/package-visibility?hl=en and
|
|
||||||
https://developer.android.com/reference/android/content/Intent#ACTION_PROCESS_TEXT.
|
|
||||||
|
|
||||||
In particular, this is used by the Flutter engine in io.flutter.plugin.text.ProcessTextPlugin. -->
|
</application>
|
||||||
|
|
||||||
|
<!-- Requerido para consultar actividades que pueden procesar texto, ver: https://developer.android.com/training/package-visibility?hl=en y https://developer.android.com/reference/android/content/Intent#ACTION_PROCESS_TEXT. En particular, esto es utilizado por el motor Flutter en io.flutter.plugin.text.ProcessTextPlugin. -->
|
||||||
<queries>
|
<queries>
|
||||||
<intent>
|
<intent>
|
||||||
<action android:name="android.intent.action.PROCESS_TEXT"/>
|
<action android:name="android.intent.action.PROCESS_TEXT"/>
|
||||||
<data android:mimeType="text/plain"/>
|
<data android:mimeType="text/plain"/>
|
||||||
</intent>
|
</intent>
|
||||||
</queries>
|
</queries>
|
||||||
|
|
||||||
|
<!-- Permiso de Internet -->
|
||||||
|
<uses-permission android:name="android.permission.INTERNET" />
|
||||||
|
|
||||||
</manifest>
|
</manifest>
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
package com.example.flutter_project
|
package com.asociacionador.civan
|
||||||
|
|
||||||
import io.flutter.embedding.android.FlutterActivity
|
import io.flutter.embedding.android.FlutterActivity
|
||||||
|
|
||||||
|
After Width: | Height: | Size: 4.8 KiB |
|
After Width: | Height: | Size: 2.9 KiB |
|
After Width: | Height: | Size: 7.1 KiB |
|
After Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 19 KiB |
@ -0,0 +1,9 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
<background android:drawable="@color/ic_launcher_background"/>
|
||||||
|
<foreground>
|
||||||
|
<inset
|
||||||
|
android:drawable="@drawable/ic_launcher_foreground"
|
||||||
|
android:inset="16%" />
|
||||||
|
</foreground>
|
||||||
|
</adaptive-icon>
|
||||||
|
Before Width: | Height: | Size: 544 B After Width: | Height: | Size: 1.9 KiB |
BIN
android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png
Normal file
|
After Width: | Height: | Size: 1.9 KiB |
|
Before Width: | Height: | Size: 442 B After Width: | Height: | Size: 1.2 KiB |
BIN
android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png
Normal file
|
After Width: | Height: | Size: 1.2 KiB |
|
Before Width: | Height: | Size: 721 B After Width: | Height: | Size: 2.6 KiB |
BIN
android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png
Normal file
|
After Width: | Height: | Size: 2.6 KiB |
|
Before Width: | Height: | Size: 1.0 KiB After Width: | Height: | Size: 4.1 KiB |
BIN
android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png
Normal file
|
After Width: | Height: | Size: 4.1 KiB |
|
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 6.0 KiB |
BIN
android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png
Normal file
|
After Width: | Height: | Size: 6.0 KiB |
4
android/app/src/main/res/values/colors.xml
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<resources>
|
||||||
|
<color name="ic_launcher_background">#FFFFFF</color>
|
||||||
|
</resources>
|
||||||
@ -4,4 +4,5 @@
|
|||||||
to allow setting breakpoints, to provide hot reload, etc.
|
to allow setting breakpoints, to provide hot reload, etc.
|
||||||
-->
|
-->
|
||||||
<uses-permission android:name="android.permission.INTERNET"/>
|
<uses-permission android:name="android.permission.INTERNET"/>
|
||||||
|
|
||||||
</manifest>
|
</manifest>
|
||||||
|
|||||||
@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME
|
|||||||
distributionPath=wrapper/dists
|
distributionPath=wrapper/dists
|
||||||
zipStoreBase=GRADLE_USER_HOME
|
zipStoreBase=GRADLE_USER_HOME
|
||||||
zipStorePath=wrapper/dists
|
zipStorePath=wrapper/dists
|
||||||
distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.3-all.zip
|
distributionUrl=https\://services.gradle.org/distributions/gradle-8.9-all.zip
|
||||||
|
|||||||
@ -19,8 +19,8 @@ pluginManagement {
|
|||||||
|
|
||||||
plugins {
|
plugins {
|
||||||
id "dev.flutter.flutter-plugin-loader" version "1.0.0"
|
id "dev.flutter.flutter-plugin-loader" version "1.0.0"
|
||||||
id "com.android.application" version "7.3.0" apply false
|
id "com.android.application" version "8.2.1" apply false
|
||||||
id "org.jetbrains.kotlin.android" version "1.7.10" apply false
|
id "org.jetbrains.kotlin.android" version "2.1.10" apply false
|
||||||
}
|
}
|
||||||
|
|
||||||
include ":app"
|
include ":app"
|
||||||
|
|||||||
BIN
assets/icon/app_icon.png
Normal file
|
After Width: | Height: | Size: 23 KiB |
BIN
assets/logo-fondo-verde.png
Normal file
|
After Width: | Height: | Size: 129 KiB |
BIN
assets/logo-fondo.png
Normal file
|
After Width: | Height: | Size: 91 KiB |
BIN
assets/logo-sin-texto.jpg
Normal file
|
After Width: | Height: | Size: 22 KiB |
BIN
assets/logo-sin-texto.png
Normal file
|
After Width: | Height: | Size: 52 KiB |
53
assets/logo-sin-texto.svg
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
|
||||||
|
<svg
|
||||||
|
width="66.698677mm"
|
||||||
|
height="66.133186mm"
|
||||||
|
viewBox="0 0 66.698677 66.133186"
|
||||||
|
version="1.1"
|
||||||
|
id="svg5"
|
||||||
|
xml:space="preserve"
|
||||||
|
sodipodi:docname="logo-asoc-grande.svg"
|
||||||
|
inkscape:version="1.2.2 (732a01da63, 2022-12-09)"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"><sodipodi:namedview
|
||||||
|
id="namedview7"
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#111111"
|
||||||
|
borderopacity="1"
|
||||||
|
inkscape:showpageshadow="0"
|
||||||
|
inkscape:pageopacity="0"
|
||||||
|
inkscape:pagecheckerboard="1"
|
||||||
|
inkscape:deskcolor="#d1d1d1"
|
||||||
|
inkscape:document-units="mm"
|
||||||
|
showgrid="true"
|
||||||
|
showguides="true"
|
||||||
|
inkscape:zoom="1.8019391"
|
||||||
|
inkscape:cx="402.8993"
|
||||||
|
inkscape:cy="349.0684"
|
||||||
|
inkscape:window-width="1920"
|
||||||
|
inkscape:window-height="1017"
|
||||||
|
inkscape:window-x="-8"
|
||||||
|
inkscape:window-y="-8"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
inkscape:current-layer="svg5"><inkscape:grid
|
||||||
|
type="xygrid"
|
||||||
|
id="grid238" /><sodipodi:guide
|
||||||
|
position="74.64686,85.210352"
|
||||||
|
orientation="0,-1"
|
||||||
|
id="guide1143"
|
||||||
|
inkscape:locked="false" /><sodipodi:guide
|
||||||
|
position="65.946521,97.814762"
|
||||||
|
orientation="0,-1"
|
||||||
|
id="guide398"
|
||||||
|
inkscape:locked="false" /></sodipodi:namedview><defs
|
||||||
|
id="defs2" /><path
|
||||||
|
style="fill:#0082bf;fill-opacity:1;stroke-width:0.565242"
|
||||||
|
d="M 3.8256413,64.96974 C 1.6212279,63.805813 0,61.404811 0,59.304008 0,57.377233 2.0882044,54.474124 4.1923461,53.475657 7.4248337,51.941735 11.533958,52.382721 17.387206,54.891716 l 2.605907,1.117034 -5.038897,5.062341 C 10.481792,65.56433 9.6915923,66.130634 7.9251864,66.108458 6.8306119,66.09564 4.9858169,65.582296 3.8256413,64.96974 Z M 24.682904,60.904947 c 5.716857,-5.793101 7.153276,-8.091559 7.153276,-11.446165 0,-5.656058 -6.928963,-12.757525 -13.299602,-13.630716 -6.213556,-0.851657 -10.6927139,3.613467 -7.053978,7.031886 1.896828,1.781973 3.325517,1.522834 5.689296,-1.031965 1.451897,-1.569214 2.560539,-2.260324 3.623566,-2.25885 3.67423,0.0043 7.486062,4.374543 6.666143,7.64137 -0.213293,0.849798 -1.619931,2.836733 -3.125873,4.415412 l -2.738076,2.870294 -6.700816,-2.74081 C 9.6810515,49.622 7.2878274,48.953364 4.0980112,48.738405 L 0,48.462238 V 33.734441 19.00667 l 5.5657444,5.468226 c 5.6299076,5.53127 8.2441516,7.178718 11.3915446,7.178718 3.981394,0 9.031607,-3.700973 11.918786,-8.734494 2.171855,-3.786448 2.348489,-9.083916 0.375248,-11.254428 -1.837809,-2.0215436 -3.367843,-2.2876689 -5.139682,-0.893935 -2.254293,1.773215 -2.005014,3.853722 0.75905,6.335073 2.445386,2.195272 2.74866,3.486461 1.421638,6.052646 -1.18574,2.292968 -3.784741,3.973187 -6.145794,3.973187 -1.640304,0 -2.584473,-0.541031 -5.178599,-2.967521 l -3.172548,-2.96752 1.732427,-3.80153 C 16.220333,11.48682 18.087776,5.421718 18.087776,2.5852415 V 0 h 14.517832 14.517811 l -5.113015,5.2285064 c -5.899962,6.0332056 -6.965339,7.8059716 -6.965339,11.5900486 0,6.262393 8.05099,13.687774 14.855782,13.701425 5.221114,0.01068 8.410879,-4.338267 5.315221,-7.246482 -1.896824,-1.781974 -3.325509,-1.522834 -5.689296,1.031964 -1.451886,1.569214 -2.560524,2.260324 -3.623573,2.25885 -3.674225,-0.0043 -7.486053,-4.374543 -6.666143,-7.641366 0.213208,-0.849798 1.619932,-2.836733 3.125888,-4.415411 l 2.738076,-2.870295 6.700816,2.740811 c 5.215774,2.133403 7.609022,2.802017 10.798829,3.016998 l 4.098014,0.276166 V 32.399008 47.126784 L 61.132928,41.658553 C 55.46162,36.086607 52.892657,34.479836 49.65538,34.479836 c -4.223161,0 -10.132651,4.748874 -12.461829,10.014382 -1.462696,3.30667 -1.236264,8.694463 0.43276,10.297261 2.02304,1.942733 3.480694,1.975526 5.336243,0.120063 0.930403,-0.930403 1.691649,-1.99108 1.691649,-2.357058 0,-0.365979 -1.144615,-1.826431 -2.543604,-3.245439 -2.789029,-2.828999 -2.911249,-3.245891 -1.75967,-6.001998 1.447079,-3.463346 5.749413,-5.405011 8.566576,-3.866112 0.608562,0.332438 2.194332,1.721579 3.523891,3.087006 l 2.41741,2.482569 -1.484957,3.354653 c -3.287289,7.426278 -4.309277,10.735935 -4.394411,14.231134 l -0.08588,3.528291 -14.685151,0.0043 -14.685147,0.0043 5.159692,-5.228485 z m 31.707195,4.343673 c -3.885232,-2.108088 -4.4682,-8.485545 -1.430458,-15.648539 0.62625,-1.476689 1.31563,-2.684903 1.531978,-2.684903 0.216348,0 2.601435,2.256479 5.300202,5.014402 3.418098,3.49302 4.903098,5.422358 4.894445,6.358978 -0.01923,2.002487 -1.943054,5.871056 -3.443649,6.92212 -1.625677,1.138675 -4.791579,1.156193 -6.852518,0.03803 z M 5.1864032,14.484847 C -0.47485751,8.7119555 -0.7105868,8.1197376 1.081733,4.1729138 2.4319861,1.1995399 4.1710573,0 7.1315298,0 c 4.5858772,0 7.4027162,4.5216518 6.4489542,10.35199 -0.385673,2.357634 -2.481993,8.694651 -3.071597,9.285202 -0.07484,0.07499 -2.4699612,-2.243596 -5.3224838,-5.152345 z M 51.940144,12.223049 C 49.885187,11.49763 47.887058,10.708333 47.499865,10.46904 47.014273,10.168904 48.344899,8.477726 51.789616,5.0169862 56.066357,0.72035633 57.052048,0 58.654696,0 c 4.006343,0 8.043983,3.4280108 8.043983,6.8294454 0,1.9660628 -2.268549,5.1015216 -4.307355,5.9533916 -2.709641,1.13216 -6.185698,0.945977 -10.45118,-0.559788 z"
|
||||||
|
id="path287-5-2"
|
||||||
|
inkscape:export-filename="logo-sin-texto.svg"
|
||||||
|
inkscape:export-xdpi="96"
|
||||||
|
inkscape:export-ydpi="96" /></svg>
|
||||||
|
After Width: | Height: | Size: 5.4 KiB |
@ -368,7 +368,7 @@
|
|||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"@executable_path/Frameworks",
|
"@executable_path/Frameworks",
|
||||||
);
|
);
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = com.example.flutterProject;
|
PRODUCT_BUNDLE_IDENTIFIER = com.asociacionador.civan;
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
|
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
|
||||||
SWIFT_VERSION = 5.0;
|
SWIFT_VERSION = 5.0;
|
||||||
@ -384,7 +384,7 @@
|
|||||||
CURRENT_PROJECT_VERSION = 1;
|
CURRENT_PROJECT_VERSION = 1;
|
||||||
GENERATE_INFOPLIST_FILE = YES;
|
GENERATE_INFOPLIST_FILE = YES;
|
||||||
MARKETING_VERSION = 1.0;
|
MARKETING_VERSION = 1.0;
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = com.example.flutterProject.RunnerTests;
|
PRODUCT_BUNDLE_IDENTIFIER = com.asociacionador.civan.RunnerTests;
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
|
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
|
||||||
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
||||||
@ -401,7 +401,7 @@
|
|||||||
CURRENT_PROJECT_VERSION = 1;
|
CURRENT_PROJECT_VERSION = 1;
|
||||||
GENERATE_INFOPLIST_FILE = YES;
|
GENERATE_INFOPLIST_FILE = YES;
|
||||||
MARKETING_VERSION = 1.0;
|
MARKETING_VERSION = 1.0;
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = com.example.flutterProject.RunnerTests;
|
PRODUCT_BUNDLE_IDENTIFIER = com.asociacionador.civan.RunnerTests;
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
SWIFT_VERSION = 5.0;
|
SWIFT_VERSION = 5.0;
|
||||||
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner";
|
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner";
|
||||||
@ -416,7 +416,7 @@
|
|||||||
CURRENT_PROJECT_VERSION = 1;
|
CURRENT_PROJECT_VERSION = 1;
|
||||||
GENERATE_INFOPLIST_FILE = YES;
|
GENERATE_INFOPLIST_FILE = YES;
|
||||||
MARKETING_VERSION = 1.0;
|
MARKETING_VERSION = 1.0;
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = com.example.flutterProject.RunnerTests;
|
PRODUCT_BUNDLE_IDENTIFIER = com.asociacionador.civan.RunnerTests;
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
SWIFT_VERSION = 5.0;
|
SWIFT_VERSION = 5.0;
|
||||||
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner";
|
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner";
|
||||||
@ -427,7 +427,7 @@
|
|||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||||
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
|
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = AppIcon;
|
||||||
CLANG_ANALYZER_NONNULL = YES;
|
CLANG_ANALYZER_NONNULL = YES;
|
||||||
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
|
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
|
||||||
CLANG_CXX_LIBRARY = "libc++";
|
CLANG_CXX_LIBRARY = "libc++";
|
||||||
@ -484,7 +484,7 @@
|
|||||||
isa = XCBuildConfiguration;
|
isa = XCBuildConfiguration;
|
||||||
buildSettings = {
|
buildSettings = {
|
||||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||||
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
|
ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = AppIcon;
|
||||||
CLANG_ANALYZER_NONNULL = YES;
|
CLANG_ANALYZER_NONNULL = YES;
|
||||||
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
|
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
|
||||||
CLANG_CXX_LIBRARY = "libc++";
|
CLANG_CXX_LIBRARY = "libc++";
|
||||||
@ -547,7 +547,7 @@
|
|||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"@executable_path/Frameworks",
|
"@executable_path/Frameworks",
|
||||||
);
|
);
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = com.example.flutterProject;
|
PRODUCT_BUNDLE_IDENTIFIER = com.asociacionador.civan;
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
|
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
|
||||||
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
|
||||||
@ -569,7 +569,7 @@
|
|||||||
"$(inherited)",
|
"$(inherited)",
|
||||||
"@executable_path/Frameworks",
|
"@executable_path/Frameworks",
|
||||||
);
|
);
|
||||||
PRODUCT_BUNDLE_IDENTIFIER = com.example.flutterProject;
|
PRODUCT_BUNDLE_IDENTIFIER = com.asociacionador.civan;
|
||||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||||
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
|
SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h";
|
||||||
SWIFT_VERSION = 5.0;
|
SWIFT_VERSION = 5.0;
|
||||||
|
|||||||
@ -1,122 +1 @@
|
|||||||
{
|
{"images":[{"size":"20x20","idiom":"iphone","filename":"Icon-App-20x20@2x.png","scale":"2x"},{"size":"20x20","idiom":"iphone","filename":"Icon-App-20x20@3x.png","scale":"3x"},{"size":"29x29","idiom":"iphone","filename":"Icon-App-29x29@1x.png","scale":"1x"},{"size":"29x29","idiom":"iphone","filename":"Icon-App-29x29@2x.png","scale":"2x"},{"size":"29x29","idiom":"iphone","filename":"Icon-App-29x29@3x.png","scale":"3x"},{"size":"40x40","idiom":"iphone","filename":"Icon-App-40x40@2x.png","scale":"2x"},{"size":"40x40","idiom":"iphone","filename":"Icon-App-40x40@3x.png","scale":"3x"},{"size":"57x57","idiom":"iphone","filename":"Icon-App-57x57@1x.png","scale":"1x"},{"size":"57x57","idiom":"iphone","filename":"Icon-App-57x57@2x.png","scale":"2x"},{"size":"60x60","idiom":"iphone","filename":"Icon-App-60x60@2x.png","scale":"2x"},{"size":"60x60","idiom":"iphone","filename":"Icon-App-60x60@3x.png","scale":"3x"},{"size":"20x20","idiom":"ipad","filename":"Icon-App-20x20@1x.png","scale":"1x"},{"size":"20x20","idiom":"ipad","filename":"Icon-App-20x20@2x.png","scale":"2x"},{"size":"29x29","idiom":"ipad","filename":"Icon-App-29x29@1x.png","scale":"1x"},{"size":"29x29","idiom":"ipad","filename":"Icon-App-29x29@2x.png","scale":"2x"},{"size":"40x40","idiom":"ipad","filename":"Icon-App-40x40@1x.png","scale":"1x"},{"size":"40x40","idiom":"ipad","filename":"Icon-App-40x40@2x.png","scale":"2x"},{"size":"50x50","idiom":"ipad","filename":"Icon-App-50x50@1x.png","scale":"1x"},{"size":"50x50","idiom":"ipad","filename":"Icon-App-50x50@2x.png","scale":"2x"},{"size":"72x72","idiom":"ipad","filename":"Icon-App-72x72@1x.png","scale":"1x"},{"size":"72x72","idiom":"ipad","filename":"Icon-App-72x72@2x.png","scale":"2x"},{"size":"76x76","idiom":"ipad","filename":"Icon-App-76x76@1x.png","scale":"1x"},{"size":"76x76","idiom":"ipad","filename":"Icon-App-76x76@2x.png","scale":"2x"},{"size":"83.5x83.5","idiom":"ipad","filename":"Icon-App-83.5x83.5@2x.png","scale":"2x"},{"size":"1024x1024","idiom":"ios-marketing","filename":"Icon-App-1024x1024@1x.png","scale":"1x"}],"info":{"version":1,"author":"xcode"}}
|
||||||
"images" : [
|
|
||||||
{
|
|
||||||
"size" : "20x20",
|
|
||||||
"idiom" : "iphone",
|
|
||||||
"filename" : "Icon-App-20x20@2x.png",
|
|
||||||
"scale" : "2x"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"size" : "20x20",
|
|
||||||
"idiom" : "iphone",
|
|
||||||
"filename" : "Icon-App-20x20@3x.png",
|
|
||||||
"scale" : "3x"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"size" : "29x29",
|
|
||||||
"idiom" : "iphone",
|
|
||||||
"filename" : "Icon-App-29x29@1x.png",
|
|
||||||
"scale" : "1x"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"size" : "29x29",
|
|
||||||
"idiom" : "iphone",
|
|
||||||
"filename" : "Icon-App-29x29@2x.png",
|
|
||||||
"scale" : "2x"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"size" : "29x29",
|
|
||||||
"idiom" : "iphone",
|
|
||||||
"filename" : "Icon-App-29x29@3x.png",
|
|
||||||
"scale" : "3x"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"size" : "40x40",
|
|
||||||
"idiom" : "iphone",
|
|
||||||
"filename" : "Icon-App-40x40@2x.png",
|
|
||||||
"scale" : "2x"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"size" : "40x40",
|
|
||||||
"idiom" : "iphone",
|
|
||||||
"filename" : "Icon-App-40x40@3x.png",
|
|
||||||
"scale" : "3x"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"size" : "60x60",
|
|
||||||
"idiom" : "iphone",
|
|
||||||
"filename" : "Icon-App-60x60@2x.png",
|
|
||||||
"scale" : "2x"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"size" : "60x60",
|
|
||||||
"idiom" : "iphone",
|
|
||||||
"filename" : "Icon-App-60x60@3x.png",
|
|
||||||
"scale" : "3x"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"size" : "20x20",
|
|
||||||
"idiom" : "ipad",
|
|
||||||
"filename" : "Icon-App-20x20@1x.png",
|
|
||||||
"scale" : "1x"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"size" : "20x20",
|
|
||||||
"idiom" : "ipad",
|
|
||||||
"filename" : "Icon-App-20x20@2x.png",
|
|
||||||
"scale" : "2x"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"size" : "29x29",
|
|
||||||
"idiom" : "ipad",
|
|
||||||
"filename" : "Icon-App-29x29@1x.png",
|
|
||||||
"scale" : "1x"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"size" : "29x29",
|
|
||||||
"idiom" : "ipad",
|
|
||||||
"filename" : "Icon-App-29x29@2x.png",
|
|
||||||
"scale" : "2x"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"size" : "40x40",
|
|
||||||
"idiom" : "ipad",
|
|
||||||
"filename" : "Icon-App-40x40@1x.png",
|
|
||||||
"scale" : "1x"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"size" : "40x40",
|
|
||||||
"idiom" : "ipad",
|
|
||||||
"filename" : "Icon-App-40x40@2x.png",
|
|
||||||
"scale" : "2x"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"size" : "76x76",
|
|
||||||
"idiom" : "ipad",
|
|
||||||
"filename" : "Icon-App-76x76@1x.png",
|
|
||||||
"scale" : "1x"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"size" : "76x76",
|
|
||||||
"idiom" : "ipad",
|
|
||||||
"filename" : "Icon-App-76x76@2x.png",
|
|
||||||
"scale" : "2x"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"size" : "83.5x83.5",
|
|
||||||
"idiom" : "ipad",
|
|
||||||
"filename" : "Icon-App-83.5x83.5@2x.png",
|
|
||||||
"scale" : "2x"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"size" : "1024x1024",
|
|
||||||
"idiom" : "ios-marketing",
|
|
||||||
"filename" : "Icon-App-1024x1024@1x.png",
|
|
||||||
"scale" : "1x"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"info" : {
|
|
||||||
"version" : 1,
|
|
||||||
"author" : "xcode"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 65 KiB |
|
Before Width: | Height: | Size: 295 B After Width: | Height: | Size: 572 B |
|
Before Width: | Height: | Size: 406 B After Width: | Height: | Size: 999 B |
|
Before Width: | Height: | Size: 450 B After Width: | Height: | Size: 1.5 KiB |
|
Before Width: | Height: | Size: 282 B After Width: | Height: | Size: 783 B |
|
Before Width: | Height: | Size: 462 B After Width: | Height: | Size: 1.5 KiB |
|
Before Width: | Height: | Size: 704 B After Width: | Height: | Size: 2.3 KiB |
|
Before Width: | Height: | Size: 406 B After Width: | Height: | Size: 999 B |
|
Before Width: | Height: | Size: 586 B After Width: | Height: | Size: 2.1 KiB |
|
Before Width: | Height: | Size: 862 B After Width: | Height: | Size: 3.3 KiB |
|
After Width: | Height: | Size: 1.3 KiB |
|
After Width: | Height: | Size: 2.7 KiB |
|
After Width: | Height: | Size: 1.5 KiB |
|
After Width: | Height: | Size: 3.1 KiB |
|
Before Width: | Height: | Size: 862 B After Width: | Height: | Size: 3.3 KiB |
|
Before Width: | Height: | Size: 1.6 KiB After Width: | Height: | Size: 5.5 KiB |
|
After Width: | Height: | Size: 1.9 KiB |
|
After Width: | Height: | Size: 4.1 KiB |
|
Before Width: | Height: | Size: 762 B After Width: | Height: | Size: 2.0 KiB |
|
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 4.4 KiB |
|
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 5.0 KiB |
103
lib/BloC/DataService.dart
Normal file
@ -0,0 +1,103 @@
|
|||||||
|
import 'package:http/http.dart' as http;
|
||||||
|
import 'package:html/parser.dart' as htmlParser;
|
||||||
|
|
||||||
|
class DataService {
|
||||||
|
Future<List<Map<String, dynamic>>> obtenerDatos() async {
|
||||||
|
final response = await http.get(Uri.parse('https://crcivan.asociacionador.es/contenedores.html'));
|
||||||
|
if (response.statusCode == 200) {
|
||||||
|
final document = htmlParser.parse(response.body);
|
||||||
|
|
||||||
|
final filaTabla = document.querySelectorAll('html > body > div > center > table > tbody > tr > td > div > center > table > tbody > tr > td > table > tbody > tr > td > font > font > table > tbody > tr');
|
||||||
|
|
||||||
|
List<Map<String, dynamic>> embalsesData = [];
|
||||||
|
|
||||||
|
for (var fila in filaTabla) {
|
||||||
|
var nombreElemento = fila.querySelector('td > p > span');
|
||||||
|
var elementos = fila.querySelectorAll('td > span');
|
||||||
|
|
||||||
|
if (nombreElemento != null && elementos.isNotEmpty) {
|
||||||
|
var nombre = nombreElemento.text;
|
||||||
|
var listaElementos = elementos.map<String>((elemento) => elemento.text).toList();
|
||||||
|
|
||||||
|
var embalseMap = {'nombre': nombre, 'elementos': listaElementos};
|
||||||
|
embalsesData.add(embalseMap);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return embalsesData;
|
||||||
|
} else {
|
||||||
|
throw Exception('Error al obtener datos');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<String> obtenerFechaComunicacionEmbalses() async {
|
||||||
|
final response = await http
|
||||||
|
.get(Uri.parse('https://crcivan.asociacionador.es/contenedores.html'));
|
||||||
|
if (response.statusCode == 200) {
|
||||||
|
final document = htmlParser.parse(response.body);
|
||||||
|
final dateElement =
|
||||||
|
document.querySelector('span[style="font-size: 12pt;"]');
|
||||||
|
final communicationDate = dateElement != null
|
||||||
|
? dateElement.text.replaceAll(':', '').trim()
|
||||||
|
: 'Fecha no encontrada';
|
||||||
|
return communicationDate;
|
||||||
|
} else {
|
||||||
|
throw Exception('Error al obtener la fecha de comunicación');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Future<Map<String, dynamic>> obtenerDatosSecciones() async {
|
||||||
|
final response = await http.get(Uri.parse('https://crcivan.asociacionador.es/secciones.html'));
|
||||||
|
if (response.statusCode == 200) {
|
||||||
|
final document = htmlParser.parse(response.body);
|
||||||
|
final rows = document.querySelectorAll('table[style="height: 1202px; font-size: 13px;"] tbody tr');
|
||||||
|
List<Map<String, dynamic>> seccionesData = [];
|
||||||
|
String? currentSection;
|
||||||
|
String? currentGuardInfo;
|
||||||
|
List<Map<String, String>> currentSectionData = [];
|
||||||
|
|
||||||
|
// Extraer la fecha de la comunicación
|
||||||
|
final dateRegex = RegExp(r'\d{2}/\d{2}/\d{4}');
|
||||||
|
final dateMatch = dateRegex.firstMatch(document.body!.text);
|
||||||
|
final communicationDate = dateMatch != null ? dateMatch.group(0) : 'Fecha no encontrada';
|
||||||
|
|
||||||
|
for (var row in rows) {
|
||||||
|
var cells = row.querySelectorAll('td');
|
||||||
|
if (cells.length == 2) {
|
||||||
|
var sectionElement = cells[1].querySelector('strong');
|
||||||
|
if (sectionElement != null && sectionElement.text.contains('SECCIÓN')) {
|
||||||
|
if (currentSection != null) {
|
||||||
|
seccionesData.add({
|
||||||
|
'section': currentSection,
|
||||||
|
'guardInfo': currentGuardInfo,
|
||||||
|
'data': currentSectionData,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
currentSection = sectionElement.text.trim();
|
||||||
|
currentGuardInfo = cells[1].querySelector('span[style="text-decoration: underline;"]')?.text.trim();
|
||||||
|
currentSectionData = [];
|
||||||
|
} else {
|
||||||
|
currentSectionData.add({
|
||||||
|
'date': cells[0].text.trim(),
|
||||||
|
'location': cells[1].text.trim(),
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (currentSection != null) {
|
||||||
|
seccionesData.add({
|
||||||
|
'section': currentSection,
|
||||||
|
'guardInfo': currentGuardInfo,
|
||||||
|
'data': currentSectionData,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
return {
|
||||||
|
'communicationDate': communicationDate,
|
||||||
|
'seccionesData': seccionesData,
|
||||||
|
};
|
||||||
|
} else {
|
||||||
|
throw Exception('Error al cargar los datos de secciones');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
62
lib/BloC/contenedores_event.dart
Normal file
@ -0,0 +1,62 @@
|
|||||||
|
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||||
|
import 'package:url_launcher/url_launcher.dart';
|
||||||
|
import 'package:http/http.dart' as http;
|
||||||
|
import 'package:html/parser.dart' as htmlParser;
|
||||||
|
|
||||||
|
// Define el estado
|
||||||
|
class MyState {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// Define el bloc
|
||||||
|
class MyBloc extends Cubit<MyState> {
|
||||||
|
MyBloc() : super(MyState());
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<List<String>> obtenerDatos() async {
|
||||||
|
final response = await http.get(Uri.parse('https://crcivan.asociacionador.es/contenedores.html'));
|
||||||
|
if (response.statusCode == 200) {
|
||||||
|
final document = htmlParser.parse(response.body);
|
||||||
|
final elementosSpan = document.querySelectorAll('html > body > div > center > table > tbody > tr > td > div > center > table > tbody > tr > td > table > tbody > tr > td > font > font > table > tbody > tr > td > span');
|
||||||
|
List<String> embalsesData = [];
|
||||||
|
|
||||||
|
for (var elemento in elementosSpan) {
|
||||||
|
final style = elemento.attributes['style'];
|
||||||
|
if (style != null && style.contains('color: #000000; font-size: 12pt;')) {
|
||||||
|
embalsesData.add(elemento.text);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return embalsesData;
|
||||||
|
} else {
|
||||||
|
throw Exception('Error al cargar los datos de embalses');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<void> launchAemetURL() async {
|
||||||
|
const urlString = 'https://www.aemet.es/es/eltiempo/prediccion/municipios/caspe-id50074';
|
||||||
|
final url = Uri.parse(urlString);
|
||||||
|
|
||||||
|
try {
|
||||||
|
await launch(urlString);
|
||||||
|
|
||||||
|
/* if (await canLaunch(urlString)) {
|
||||||
|
await launch(urlString);
|
||||||
|
} else {
|
||||||
|
throw 'Could not launch $urlString';
|
||||||
|
}*/
|
||||||
|
} catch (e) {
|
||||||
|
throw Exception('Error al lanzar la URL de Aemet: $e');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<void> launchPrivacyPolicyURL() async {
|
||||||
|
const urlString = 'https://crcivan.asociacionador.es/politica-privacidad.html';
|
||||||
|
final url = Uri.parse(urlString);
|
||||||
|
|
||||||
|
try {
|
||||||
|
await launch(urlString);
|
||||||
|
} catch (e) {
|
||||||
|
throw Exception('Error al lanzar la URL de la política de privacidad: $e');
|
||||||
|
}
|
||||||
|
}
|
||||||
0
lib/BloC/estados
Normal file
BIN
lib/assets/logo-fondo-verde.png
Normal file
|
After Width: | Height: | Size: 129 KiB |
BIN
lib/assets/logo-fondo.png
Normal file
|
After Width: | Height: | Size: 91 KiB |
BIN
lib/assets/logo-sin-texto.png
Normal file
|
After Width: | Height: | Size: 52 KiB |
53
lib/assets/logo-sin-texto.svg
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||||
|
|
||||||
|
<svg
|
||||||
|
width="66.698677mm"
|
||||||
|
height="66.133186mm"
|
||||||
|
viewBox="0 0 66.698677 66.133186"
|
||||||
|
version="1.1"
|
||||||
|
id="svg5"
|
||||||
|
xml:space="preserve"
|
||||||
|
sodipodi:docname="logo-asoc-grande.svg"
|
||||||
|
inkscape:version="1.2.2 (732a01da63, 2022-12-09)"
|
||||||
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
xmlns:svg="http://www.w3.org/2000/svg"><sodipodi:namedview
|
||||||
|
id="namedview7"
|
||||||
|
pagecolor="#ffffff"
|
||||||
|
bordercolor="#111111"
|
||||||
|
borderopacity="1"
|
||||||
|
inkscape:showpageshadow="0"
|
||||||
|
inkscape:pageopacity="0"
|
||||||
|
inkscape:pagecheckerboard="1"
|
||||||
|
inkscape:deskcolor="#d1d1d1"
|
||||||
|
inkscape:document-units="mm"
|
||||||
|
showgrid="true"
|
||||||
|
showguides="true"
|
||||||
|
inkscape:zoom="1.8019391"
|
||||||
|
inkscape:cx="402.8993"
|
||||||
|
inkscape:cy="349.0684"
|
||||||
|
inkscape:window-width="1920"
|
||||||
|
inkscape:window-height="1017"
|
||||||
|
inkscape:window-x="-8"
|
||||||
|
inkscape:window-y="-8"
|
||||||
|
inkscape:window-maximized="1"
|
||||||
|
inkscape:current-layer="svg5"><inkscape:grid
|
||||||
|
type="xygrid"
|
||||||
|
id="grid238" /><sodipodi:guide
|
||||||
|
position="74.64686,85.210352"
|
||||||
|
orientation="0,-1"
|
||||||
|
id="guide1143"
|
||||||
|
inkscape:locked="false" /><sodipodi:guide
|
||||||
|
position="65.946521,97.814762"
|
||||||
|
orientation="0,-1"
|
||||||
|
id="guide398"
|
||||||
|
inkscape:locked="false" /></sodipodi:namedview><defs
|
||||||
|
id="defs2" /><path
|
||||||
|
style="fill:#0082bf;fill-opacity:1;stroke-width:0.565242"
|
||||||
|
d="M 3.8256413,64.96974 C 1.6212279,63.805813 0,61.404811 0,59.304008 0,57.377233 2.0882044,54.474124 4.1923461,53.475657 7.4248337,51.941735 11.533958,52.382721 17.387206,54.891716 l 2.605907,1.117034 -5.038897,5.062341 C 10.481792,65.56433 9.6915923,66.130634 7.9251864,66.108458 6.8306119,66.09564 4.9858169,65.582296 3.8256413,64.96974 Z M 24.682904,60.904947 c 5.716857,-5.793101 7.153276,-8.091559 7.153276,-11.446165 0,-5.656058 -6.928963,-12.757525 -13.299602,-13.630716 -6.213556,-0.851657 -10.6927139,3.613467 -7.053978,7.031886 1.896828,1.781973 3.325517,1.522834 5.689296,-1.031965 1.451897,-1.569214 2.560539,-2.260324 3.623566,-2.25885 3.67423,0.0043 7.486062,4.374543 6.666143,7.64137 -0.213293,0.849798 -1.619931,2.836733 -3.125873,4.415412 l -2.738076,2.870294 -6.700816,-2.74081 C 9.6810515,49.622 7.2878274,48.953364 4.0980112,48.738405 L 0,48.462238 V 33.734441 19.00667 l 5.5657444,5.468226 c 5.6299076,5.53127 8.2441516,7.178718 11.3915446,7.178718 3.981394,0 9.031607,-3.700973 11.918786,-8.734494 2.171855,-3.786448 2.348489,-9.083916 0.375248,-11.254428 -1.837809,-2.0215436 -3.367843,-2.2876689 -5.139682,-0.893935 -2.254293,1.773215 -2.005014,3.853722 0.75905,6.335073 2.445386,2.195272 2.74866,3.486461 1.421638,6.052646 -1.18574,2.292968 -3.784741,3.973187 -6.145794,3.973187 -1.640304,0 -2.584473,-0.541031 -5.178599,-2.967521 l -3.172548,-2.96752 1.732427,-3.80153 C 16.220333,11.48682 18.087776,5.421718 18.087776,2.5852415 V 0 h 14.517832 14.517811 l -5.113015,5.2285064 c -5.899962,6.0332056 -6.965339,7.8059716 -6.965339,11.5900486 0,6.262393 8.05099,13.687774 14.855782,13.701425 5.221114,0.01068 8.410879,-4.338267 5.315221,-7.246482 -1.896824,-1.781974 -3.325509,-1.522834 -5.689296,1.031964 -1.451886,1.569214 -2.560524,2.260324 -3.623573,2.25885 -3.674225,-0.0043 -7.486053,-4.374543 -6.666143,-7.641366 0.213208,-0.849798 1.619932,-2.836733 3.125888,-4.415411 l 2.738076,-2.870295 6.700816,2.740811 c 5.215774,2.133403 7.609022,2.802017 10.798829,3.016998 l 4.098014,0.276166 V 32.399008 47.126784 L 61.132928,41.658553 C 55.46162,36.086607 52.892657,34.479836 49.65538,34.479836 c -4.223161,0 -10.132651,4.748874 -12.461829,10.014382 -1.462696,3.30667 -1.236264,8.694463 0.43276,10.297261 2.02304,1.942733 3.480694,1.975526 5.336243,0.120063 0.930403,-0.930403 1.691649,-1.99108 1.691649,-2.357058 0,-0.365979 -1.144615,-1.826431 -2.543604,-3.245439 -2.789029,-2.828999 -2.911249,-3.245891 -1.75967,-6.001998 1.447079,-3.463346 5.749413,-5.405011 8.566576,-3.866112 0.608562,0.332438 2.194332,1.721579 3.523891,3.087006 l 2.41741,2.482569 -1.484957,3.354653 c -3.287289,7.426278 -4.309277,10.735935 -4.394411,14.231134 l -0.08588,3.528291 -14.685151,0.0043 -14.685147,0.0043 5.159692,-5.228485 z m 31.707195,4.343673 c -3.885232,-2.108088 -4.4682,-8.485545 -1.430458,-15.648539 0.62625,-1.476689 1.31563,-2.684903 1.531978,-2.684903 0.216348,0 2.601435,2.256479 5.300202,5.014402 3.418098,3.49302 4.903098,5.422358 4.894445,6.358978 -0.01923,2.002487 -1.943054,5.871056 -3.443649,6.92212 -1.625677,1.138675 -4.791579,1.156193 -6.852518,0.03803 z M 5.1864032,14.484847 C -0.47485751,8.7119555 -0.7105868,8.1197376 1.081733,4.1729138 2.4319861,1.1995399 4.1710573,0 7.1315298,0 c 4.5858772,0 7.4027162,4.5216518 6.4489542,10.35199 -0.385673,2.357634 -2.481993,8.694651 -3.071597,9.285202 -0.07484,0.07499 -2.4699612,-2.243596 -5.3224838,-5.152345 z M 51.940144,12.223049 C 49.885187,11.49763 47.887058,10.708333 47.499865,10.46904 47.014273,10.168904 48.344899,8.477726 51.789616,5.0169862 56.066357,0.72035633 57.052048,0 58.654696,0 c 4.006343,0 8.043983,3.4280108 8.043983,6.8294454 0,1.9660628 -2.268549,5.1015216 -4.307355,5.9533916 -2.709641,1.13216 -6.185698,0.945977 -10.45118,-0.559788 z"
|
||||||
|
id="path287-5-2"
|
||||||
|
inkscape:export-filename="logo-sin-texto.svg"
|
||||||
|
inkscape:export-xdpi="96"
|
||||||
|
inkscape:export-ydpi="96" /></svg>
|
||||||
|
After Width: | Height: | Size: 5.4 KiB |
42
lib/bars/app_bar
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:crcivan/pages/utils.dart'; // Importar la función global
|
||||||
|
|
||||||
|
class CustomAppBar extends StatelessWidget implements PreferredSizeWidget {
|
||||||
|
const CustomAppBar({Key? key}) : super(key: key);
|
||||||
|
|
||||||
|
double _getIconSize(BuildContext context) {
|
||||||
|
double screenWidth = MediaQuery.of(context).size.width;
|
||||||
|
return screenWidth > 600 ? 40.0 : 32.0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
double iconSize = _getIconSize(context);
|
||||||
|
|
||||||
|
return AppBar(
|
||||||
|
title: const Text(''),
|
||||||
|
centerTitle: true,
|
||||||
|
backgroundColor: const Color.fromARGB(255, 78, 169, 6),
|
||||||
|
iconTheme: IconThemeData(
|
||||||
|
color: Colors.white, // Cambia este color al que desees
|
||||||
|
size: iconSize, // Ajustar el tamaño del icono
|
||||||
|
),
|
||||||
|
flexibleSpace: Container(
|
||||||
|
padding: const EdgeInsets.all(8.0),
|
||||||
|
child: Center(
|
||||||
|
child: Padding(
|
||||||
|
padding: const EdgeInsets.only(top: 10.0),
|
||||||
|
child: Image.asset(
|
||||||
|
'assets/logo-civan.png',
|
||||||
|
height: getResponsiveFontSize(context, 200.0), // Ajustar la altura de la imagen
|
||||||
|
width: getResponsiveFontSize(context, 200.0), // Ajustar el ancho de la imagen
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Size get preferredSize => const Size.fromHeight(kToolbarHeight); // Tamaño fijo para el AppBar
|
||||||
|
}
|
||||||
57
lib/bars/bottom_bar
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:url_launcher/url_launcher.dart';
|
||||||
|
import 'package:crcivan/pages/utils.dart'; // Importar la función global
|
||||||
|
|
||||||
|
class CustomBottomBar extends StatelessWidget {
|
||||||
|
const CustomBottomBar({Key? key}) : super(key: key);
|
||||||
|
|
||||||
|
Future<void> _launchURL(String url) async {
|
||||||
|
try {
|
||||||
|
await launch(url);
|
||||||
|
} catch (e) {
|
||||||
|
// Captura de la excepción
|
||||||
|
print('An error occurred: $e');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return BottomAppBar(
|
||||||
|
child: Container(
|
||||||
|
height: getResponsiveFontSize(context, 80.0), // Ajustar la altura del BottomAppBar
|
||||||
|
child: Row(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.spaceAround,
|
||||||
|
children: [
|
||||||
|
IconButton(
|
||||||
|
icon: const Icon(Icons.call),
|
||||||
|
color: Colors.blue,
|
||||||
|
iconSize: getResponsiveFontSize(context, 24.0), // Ajustar el tamaño del icono
|
||||||
|
onPressed: () {
|
||||||
|
_launchURL('tel:+348766361379');
|
||||||
|
},
|
||||||
|
),
|
||||||
|
Expanded(
|
||||||
|
child: Text(
|
||||||
|
'Avenida Maella, 35 50700 Caspe (Zaragoza)',
|
||||||
|
textAlign: TextAlign.center,
|
||||||
|
style: TextStyle(
|
||||||
|
fontSize: getResponsiveFontSize(context, 14.0),
|
||||||
|
fontWeight: FontWeight.bold,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
IconButton(
|
||||||
|
icon: const Icon(Icons.email),
|
||||||
|
color: Colors.blue,
|
||||||
|
iconSize: getResponsiveFontSize(context, 24.0), // Ajustar el tamaño del icono
|
||||||
|
onPressed: () {
|
||||||
|
_launchURL('mailto:civan@crcivan.com');
|
||||||
|
},
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
180
lib/main.dart
@ -1,186 +1,30 @@
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||||
|
import 'package:crcivan/BloC/contenedores_event.dart';
|
||||||
|
import '../pages/my_home_page.dart';
|
||||||
|
|
||||||
|
|
||||||
void main() {
|
void main() {
|
||||||
runApp(const MyApp());
|
runApp(
|
||||||
|
BlocProvider(
|
||||||
|
create: (context) => MyBloc(),
|
||||||
|
child: const MyApp(),
|
||||||
|
),
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
class MyApp extends StatelessWidget {
|
class MyApp extends StatelessWidget {
|
||||||
const MyApp({Key? key}) : super(key: key);
|
const MyApp({super.key});
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
return MaterialApp(
|
return MaterialApp(
|
||||||
title: 'Flutter Demo',
|
title: 'Flutter Demo',
|
||||||
theme: ThemeData(
|
theme: ThemeData(
|
||||||
colorScheme:
|
colorScheme: ColorScheme.fromSeed(seedColor: const Color.fromARGB(255, 0, 67, 168)),
|
||||||
ColorScheme.fromSeed(seedColor: Color.fromARGB(255, 0, 67, 168)),
|
|
||||||
useMaterial3: true,
|
useMaterial3: true,
|
||||||
),
|
),
|
||||||
home: const MyHomePage(title: 'COMUNIDAD DE REGANTES DE CIVÁN'),
|
home: const MyHomePage(title: 'COMUNIDAD DE REGANTES DE CIVÁN'),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class MyHomePage extends StatefulWidget {
|
|
||||||
const MyHomePage({Key? key, required this.title}) : super(key: key);
|
|
||||||
final String title;
|
|
||||||
|
|
||||||
@override
|
|
||||||
State<MyHomePage> createState() => _MyHomePageState();
|
|
||||||
}
|
|
||||||
|
|
||||||
class _MyHomePageState extends State<MyHomePage> {
|
|
||||||
@override
|
|
||||||
Widget build(BuildContext context) {
|
|
||||||
return Scaffold(
|
|
||||||
appBar: AppBar(
|
|
||||||
title: const Text(''),
|
|
||||||
centerTitle: true,
|
|
||||||
backgroundColor: const Color.fromARGB(255, 33, 150, 243),
|
|
||||||
leading: IconButton(
|
|
||||||
onPressed: () {},
|
|
||||||
icon: const Icon(Icons.menu),
|
|
||||||
color: Colors.white,
|
|
||||||
),
|
|
||||||
flexibleSpace: Container(
|
|
||||||
padding: const EdgeInsets.all(8.0),
|
|
||||||
child: Center(
|
|
||||||
child: Image.asset(
|
|
||||||
'assets/logo-civan.png',
|
|
||||||
height: 200, // Cambia la altura según sea necesario
|
|
||||||
width: 200, // Cambia el ancho según sea necesario
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
body: Container(
|
|
||||||
decoration: BoxDecoration(
|
|
||||||
image: DecorationImage(
|
|
||||||
image:
|
|
||||||
AssetImage('assets/agua.jpg'), // Ruta de la imagen de fondo
|
|
||||||
fit: BoxFit
|
|
||||||
.cover, // Ajusta la imagen para que cubra todo el contenedor
|
|
||||||
),
|
|
||||||
),
|
|
||||||
|
|
||||||
|
|
||||||
child: Center(
|
|
||||||
child: Column(
|
|
||||||
mainAxisAlignment: MainAxisAlignment.center,
|
|
||||||
children: <Widget>[
|
|
||||||
InkWell(
|
|
||||||
onTap: () {
|
|
||||||
print('Contenedor noticias clickeado');
|
|
||||||
},
|
|
||||||
child: SizedBox(
|
|
||||||
width: 300.0,
|
|
||||||
child: Padding(
|
|
||||||
padding: const EdgeInsets.only(bottom: 20.0),
|
|
||||||
child: Container(
|
|
||||||
padding: const EdgeInsets.all(8.0),
|
|
||||||
decoration: BoxDecoration(
|
|
||||||
color: Colors.blue,
|
|
||||||
borderRadius: BorderRadius.circular(7.0),
|
|
||||||
),
|
|
||||||
child: const Text(
|
|
||||||
'Noticias',
|
|
||||||
textAlign: TextAlign.center,
|
|
||||||
style: TextStyle(
|
|
||||||
color: Colors.white,
|
|
||||||
fontSize: 32.0,
|
|
||||||
fontWeight: FontWeight.bold,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
InkWell(
|
|
||||||
onTap: () {
|
|
||||||
print('Contenedor pregón clickeado');
|
|
||||||
},
|
|
||||||
customBorder: RoundedRectangleBorder(
|
|
||||||
borderRadius: BorderRadius.circular(100)),
|
|
||||||
child: SizedBox(
|
|
||||||
width: 300.0,
|
|
||||||
child: Padding(
|
|
||||||
padding: const EdgeInsets.only(bottom: 20.0),
|
|
||||||
child: Container(
|
|
||||||
padding: const EdgeInsets.all(8.0),
|
|
||||||
decoration: BoxDecoration(
|
|
||||||
color: Colors.blue,
|
|
||||||
borderRadius: BorderRadius.circular(7.0),
|
|
||||||
),
|
|
||||||
child: const Text(
|
|
||||||
'Pregón del día',
|
|
||||||
textAlign: TextAlign.center,
|
|
||||||
style: TextStyle(
|
|
||||||
color: Colors.white,
|
|
||||||
fontSize: 32.0,
|
|
||||||
fontWeight: FontWeight.bold,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
InkWell(
|
|
||||||
onTap: () {
|
|
||||||
print('Contenedor embalses clickeado');
|
|
||||||
},
|
|
||||||
child: SizedBox(
|
|
||||||
width: 300.0,
|
|
||||||
child: Padding(
|
|
||||||
padding: const EdgeInsets.only(bottom: 20.0),
|
|
||||||
child: Container(
|
|
||||||
padding: const EdgeInsets.all(8.0),
|
|
||||||
decoration: BoxDecoration(
|
|
||||||
color: const Color.fromRGBO(33, 150, 243, 1),
|
|
||||||
borderRadius: BorderRadius.circular(7.0),
|
|
||||||
),
|
|
||||||
child: const Text(
|
|
||||||
'Embalses',
|
|
||||||
textAlign: TextAlign.center,
|
|
||||||
style: TextStyle(
|
|
||||||
color: Colors.white,
|
|
||||||
fontSize: 32.0,
|
|
||||||
fontWeight: FontWeight.bold,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
InkWell(
|
|
||||||
onTap: () {
|
|
||||||
print('Contenedor tiempo clickeado');
|
|
||||||
},
|
|
||||||
child: SizedBox(
|
|
||||||
width: 300.0,
|
|
||||||
child: Padding(
|
|
||||||
padding: const EdgeInsets.only(bottom: 20.0),
|
|
||||||
child: Container(
|
|
||||||
padding: const EdgeInsets.all(8.0),
|
|
||||||
decoration: BoxDecoration(
|
|
||||||
color: const Color.fromRGBO(33, 150, 243, 1),
|
|
||||||
borderRadius: BorderRadius.circular(7.0),
|
|
||||||
),
|
|
||||||
child: const Text(
|
|
||||||
'Tiempo',
|
|
||||||
textAlign: TextAlign.center,
|
|
||||||
style: TextStyle(
|
|
||||||
color: Colors.white,
|
|
||||||
fontSize: 32.0,
|
|
||||||
fontWeight: FontWeight.bold,
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
),
|
|
||||||
));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|||||||
30
lib/main/main.dart
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||||
|
import 'package:crcivan/BloC/contenedores_event.dart';
|
||||||
|
import '../pages/my_home_page.dart';
|
||||||
|
|
||||||
|
|
||||||
|
void main() {
|
||||||
|
runApp(
|
||||||
|
BlocProvider(
|
||||||
|
create: (context) => MyBloc(),
|
||||||
|
child: const MyApp(),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
class MyApp extends StatelessWidget {
|
||||||
|
const MyApp({super.key});
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return MaterialApp(
|
||||||
|
title: 'Flutter Demo',
|
||||||
|
theme: ThemeData(
|
||||||
|
colorScheme: ColorScheme.fromSeed(seedColor: const Color.fromARGB(255, 0, 67, 168)),
|
||||||
|
useMaterial3: true,
|
||||||
|
),
|
||||||
|
home: const MyHomePage(title: 'COMUNIDAD DE REGANTES DE CIVÁN'),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
139
lib/pages/embalses
Normal file
@ -0,0 +1,139 @@
|
|||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:crcivan/BloC/DataService.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:http/http.dart' as http;
|
||||||
|
import 'package:html/parser.dart' as htmlParser;
|
||||||
|
import 'package:html/dom.dart' as htmlDom;
|
||||||
|
import 'package:crcivan/bars/app_bar';
|
||||||
|
import 'package:crcivan/bars/bottom_bar';
|
||||||
|
import 'package:crcivan/widgets/background_widget.dart';
|
||||||
|
import 'package:crcivan/pages/utils.dart';
|
||||||
|
|
||||||
|
class EmbalsesPage extends StatefulWidget {
|
||||||
|
const EmbalsesPage({Key? key}) : super(key: key);
|
||||||
|
|
||||||
|
@override
|
||||||
|
_EmbalsesPageState createState() => _EmbalsesPageState();
|
||||||
|
}
|
||||||
|
|
||||||
|
class _EmbalsesPageState extends State<EmbalsesPage> {
|
||||||
|
final DataService dataService = DataService();
|
||||||
|
String communicationDate = '';
|
||||||
|
List<Map<String, dynamic>> embalsesData = [];
|
||||||
|
List<String> descripciones = ['Cota (m)', 'Volumen (Hm3)', 'Entrada (l/s)', 'Salida (l/s)'];
|
||||||
|
|
||||||
|
@override
|
||||||
|
void initState() {
|
||||||
|
super.initState();
|
||||||
|
obtenerDatos();
|
||||||
|
obtenerFechaComunicacion();
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<void> obtenerDatos() async {
|
||||||
|
try {
|
||||||
|
final data = await dataService.obtenerDatos();
|
||||||
|
setState(() {
|
||||||
|
embalsesData = data;
|
||||||
|
});
|
||||||
|
} catch (e) {
|
||||||
|
print('Error: $e');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<void> obtenerFechaComunicacion() async {
|
||||||
|
try {
|
||||||
|
final date = await dataService.obtenerFechaComunicacionEmbalses();
|
||||||
|
setState(() {
|
||||||
|
communicationDate = date;
|
||||||
|
});
|
||||||
|
} catch (e) {
|
||||||
|
print('Error: $e');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return Scaffold(
|
||||||
|
appBar: const CustomAppBar(),
|
||||||
|
body: BackgroundWidget(
|
||||||
|
child: Column(
|
||||||
|
children: [
|
||||||
|
Padding(
|
||||||
|
padding: const EdgeInsets.all(8.0),
|
||||||
|
child: Text(
|
||||||
|
communicationDate,
|
||||||
|
style: TextStyle(
|
||||||
|
fontSize: getResponsiveFontSize(context, 18.0),
|
||||||
|
fontWeight: FontWeight.bold,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Expanded(
|
||||||
|
child: ListView.builder(
|
||||||
|
itemCount: embalsesData.length,
|
||||||
|
itemBuilder: (context, index) {
|
||||||
|
final embalseData = embalsesData[index];
|
||||||
|
final nombreEmbalse = embalseData['nombre'];
|
||||||
|
final listaElementos = embalseData['elementos'];
|
||||||
|
|
||||||
|
return Padding(
|
||||||
|
padding: const EdgeInsets.only(bottom: 8.0),
|
||||||
|
child: Container(
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
color: Colors.white.withOpacity(0.5),
|
||||||
|
borderRadius: BorderRadius.circular(10.0),
|
||||||
|
),
|
||||||
|
child: Column(
|
||||||
|
children: [
|
||||||
|
Row(
|
||||||
|
children: [
|
||||||
|
Expanded(
|
||||||
|
child: Padding(
|
||||||
|
padding: const EdgeInsets.all(8.0),
|
||||||
|
child: Text(
|
||||||
|
nombreEmbalse!,
|
||||||
|
style: TextStyle(
|
||||||
|
fontSize: getResponsiveFontSize(context, 25.0),
|
||||||
|
fontWeight: FontWeight.bold,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
Row(
|
||||||
|
children: [
|
||||||
|
Expanded(
|
||||||
|
child: Padding(
|
||||||
|
padding: const EdgeInsets.symmetric(horizontal: 8.0),
|
||||||
|
child: Column(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
children: List.generate(
|
||||||
|
listaElementos.length,
|
||||||
|
(index) => Text(
|
||||||
|
'${descripciones[index]}: ${listaElementos[index]}',
|
||||||
|
style: TextStyle(
|
||||||
|
fontWeight: FontWeight.normal,
|
||||||
|
fontSize: getResponsiveFontSize(context, 20.0),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
},
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
bottomNavigationBar: const CustomBottomBar(),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
286
lib/pages/my_home_page.dart
Normal file
@ -0,0 +1,286 @@
|
|||||||
|
import 'package:crcivan/BloC/contenedores_event.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:shared_preferences/shared_preferences.dart';
|
||||||
|
import 'package:crcivan/bars/app_bar';
|
||||||
|
import 'package:crcivan/bars/bottom_bar';
|
||||||
|
import 'package:crcivan/pages/noticias';
|
||||||
|
import 'package:crcivan/pages/pregon';
|
||||||
|
import 'package:crcivan/pages/embalses';
|
||||||
|
import 'package:crcivan/pages/secciones';
|
||||||
|
import 'package:crcivan/widgets/background_widget.dart';
|
||||||
|
import 'package:url_launcher/url_launcher.dart';
|
||||||
|
import 'package:crcivan/pages/utils.dart'; // Importar la función global
|
||||||
|
|
||||||
|
class MyHomePage extends StatefulWidget {
|
||||||
|
const MyHomePage({super.key, required this.title});
|
||||||
|
final String title;
|
||||||
|
|
||||||
|
@override
|
||||||
|
_MyHomePageState createState() => _MyHomePageState();
|
||||||
|
}
|
||||||
|
|
||||||
|
class _MyHomePageState extends State<MyHomePage> {
|
||||||
|
@override
|
||||||
|
void initState() {
|
||||||
|
super.initState();
|
||||||
|
verificarPrimerInicio();
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<void> verificarPrimerInicio() async {
|
||||||
|
SharedPreferences prefs = await SharedPreferences.getInstance();
|
||||||
|
bool yaMostrado = prefs.getBool('aviso_mostrado') ?? false;
|
||||||
|
|
||||||
|
if (!yaMostrado) {
|
||||||
|
Future.delayed(Duration.zero, () => mostrarAvisoLegal());
|
||||||
|
await prefs.setBool('aviso_mostrado', true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void mostrarAvisoLegal() {
|
||||||
|
showDialog(
|
||||||
|
context: context,
|
||||||
|
barrierDismissible: false,
|
||||||
|
builder: (context) {
|
||||||
|
return AlertDialog(
|
||||||
|
title: Text("Aviso Legal"),
|
||||||
|
content: SingleChildScrollView(
|
||||||
|
child: Text(
|
||||||
|
"1. Relación con Entidades Oficiales:\n"
|
||||||
|
"Esta aplicación no está afiliada, respaldada ni oficialmente conectada con ninguna entidad gubernamental, institución o autoridad pública. "
|
||||||
|
"CR-Civán no representa a ninguna organización oficial ni gubernamental.\n\n"
|
||||||
|
"2. Datos de los Embalses:\n"
|
||||||
|
"Los datos sobre el estado de los embalses son proporcionados exclusivamente por la Confederación Hidrográfica del Ebro (CHE), "
|
||||||
|
"los cuales están a disposición de todo el mundo en (https://www.saihebro.com/homepage/estado-cuenca-ebro). "
|
||||||
|
"Los datos mostrados en esta aplicación no han sido alterados ni modificados; simplemente se presentan para mayor comodidad del usuario. "
|
||||||
|
"CR-Civán no representa ni tiene relación directa con la Confederación Hidrográfica del Ebro y, por lo tanto, no se hace responsable de la exactitud o veracidad de los datos proporcionados por la CHE.\n\n"
|
||||||
|
"3. Información Meteorológica:\n"
|
||||||
|
"La información meteorológica se proporciona a través de un enlace a la página oficial de la Agencia Estatal de Meteorología (AEMET), "
|
||||||
|
"disponible en (https://www.aemet.es). CR-Civán no se hace responsable de la exactitud de los datos proporcionados por AEMET, "
|
||||||
|
"ya que la aplicación solo redirige al usuario a su página oficial sin modificar ni representar la información de manera directa. "
|
||||||
|
"La información meteorológica se muestra en un navegador externo y no dentro de la propia aplicación, por lo que CR-Civán no se responsabiliza del contenido mostrado en dicho enlace.\n\n"
|
||||||
|
"4. Responsabilidad sobre los Datos:\n"
|
||||||
|
"Todos los datos presentados en esta aplicación provienen de fuentes externas y no han sido alterados ni modificados. "
|
||||||
|
"CR-Civán no asume ninguna responsabilidad sobre la veracidad o exactitud de los mismos.",
|
||||||
|
style: TextStyle(
|
||||||
|
fontSize: getResponsiveFontSize(
|
||||||
|
context, 16)), // Ajustar el tamaño del texto aquí
|
||||||
|
),
|
||||||
|
),
|
||||||
|
actions: [
|
||||||
|
ElevatedButton(
|
||||||
|
style: ElevatedButton.styleFrom(
|
||||||
|
backgroundColor:
|
||||||
|
Color.fromARGB(255, 255, 255, 255), // Color del botón
|
||||||
|
),
|
||||||
|
onPressed: () {
|
||||||
|
Navigator.of(context).pop();
|
||||||
|
},
|
||||||
|
child: Text("LO ENTIENDO"),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
);
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
double getResponsiveFontSize(BuildContext context, double baseFontSize) {
|
||||||
|
double screenWidth = MediaQuery.of(context).size.width;
|
||||||
|
// Ajustar el tamaño del texto en función del ancho de la pantalla
|
||||||
|
if (screenWidth > 600) {
|
||||||
|
return baseFontSize * 1.5; // Aumentar el tamaño del texto en tablets
|
||||||
|
} else {
|
||||||
|
return baseFontSize; // Mantener el tamaño del texto en teléfonos
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return Scaffold(
|
||||||
|
appBar: const CustomAppBar(),
|
||||||
|
body: BackgroundWidget(
|
||||||
|
child: Center(
|
||||||
|
child: Column(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.center,
|
||||||
|
children: <Widget>[
|
||||||
|
InkWell(
|
||||||
|
onTap: () {
|
||||||
|
Navigator.push(
|
||||||
|
context,
|
||||||
|
MaterialPageRoute(
|
||||||
|
builder: (context) => const NoticiasPage()),
|
||||||
|
);
|
||||||
|
},
|
||||||
|
child: SizedBox(
|
||||||
|
width: 300.0,
|
||||||
|
child: Padding(
|
||||||
|
padding: const EdgeInsets.only(bottom: 20.0),
|
||||||
|
child: Container(
|
||||||
|
padding: const EdgeInsets.all(8.0),
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
color: const Color.fromARGB(255, 240, 35, 35),
|
||||||
|
borderRadius: BorderRadius.circular(7.0),
|
||||||
|
),
|
||||||
|
child: Text(
|
||||||
|
'Avisos',
|
||||||
|
textAlign: TextAlign.center,
|
||||||
|
style: TextStyle(
|
||||||
|
color: Colors.white,
|
||||||
|
fontSize: getResponsiveFontSize(context, 32.0),
|
||||||
|
fontWeight: FontWeight.bold,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
InkWell(
|
||||||
|
onTap: () {
|
||||||
|
Navigator.push(
|
||||||
|
context,
|
||||||
|
MaterialPageRoute(builder: (context) => const Pregon()),
|
||||||
|
);
|
||||||
|
},
|
||||||
|
child: SizedBox(
|
||||||
|
width: 300.0,
|
||||||
|
child: Padding(
|
||||||
|
padding: const EdgeInsets.only(bottom: 20.0),
|
||||||
|
child: Container(
|
||||||
|
padding: const EdgeInsets.all(8.0),
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
color: const Color.fromARGB(255, 230, 226, 0),
|
||||||
|
borderRadius: BorderRadius.circular(7.0),
|
||||||
|
),
|
||||||
|
child: Text(
|
||||||
|
'Pregón',
|
||||||
|
textAlign: TextAlign.center,
|
||||||
|
style: TextStyle(
|
||||||
|
color: Colors.white,
|
||||||
|
fontSize: getResponsiveFontSize(context, 32.0),
|
||||||
|
fontWeight: FontWeight.bold,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
InkWell(
|
||||||
|
onTap: () {
|
||||||
|
Navigator.push(
|
||||||
|
context,
|
||||||
|
MaterialPageRoute(
|
||||||
|
builder: (context) => const EmbalsesPage()),
|
||||||
|
);
|
||||||
|
},
|
||||||
|
child: SizedBox(
|
||||||
|
width: 300.0,
|
||||||
|
child: Padding(
|
||||||
|
padding: const EdgeInsets.only(bottom: 20.0),
|
||||||
|
child: Container(
|
||||||
|
padding: const EdgeInsets.all(8.0),
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
color: const Color.fromARGB(255, 6, 71, 169),
|
||||||
|
borderRadius: BorderRadius.circular(7.0),
|
||||||
|
),
|
||||||
|
child: Text(
|
||||||
|
'Embalses',
|
||||||
|
textAlign: TextAlign.center,
|
||||||
|
style: TextStyle(
|
||||||
|
color: Colors.white,
|
||||||
|
fontSize: getResponsiveFontSize(context, 32.0),
|
||||||
|
fontWeight: FontWeight.bold,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
InkWell(
|
||||||
|
onTap: () {
|
||||||
|
Navigator.push(
|
||||||
|
context,
|
||||||
|
MaterialPageRoute(
|
||||||
|
builder: (context) => const SeccionesPage()),
|
||||||
|
);
|
||||||
|
},
|
||||||
|
child: SizedBox(
|
||||||
|
width: 300.0,
|
||||||
|
child: Padding(
|
||||||
|
padding: const EdgeInsets.only(bottom: 20.0),
|
||||||
|
child: Container(
|
||||||
|
padding: const EdgeInsets.all(8.0),
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
color: const Color.fromARGB(255, 97, 97, 97),
|
||||||
|
borderRadius: BorderRadius.circular(7.0),
|
||||||
|
),
|
||||||
|
child: Text(
|
||||||
|
'Secciones',
|
||||||
|
textAlign: TextAlign.center,
|
||||||
|
style: TextStyle(
|
||||||
|
color: Colors.white,
|
||||||
|
fontSize: getResponsiveFontSize(context, 32.0),
|
||||||
|
fontWeight: FontWeight.bold,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
InkWell(
|
||||||
|
onTap: () {
|
||||||
|
launchAemetURL();
|
||||||
|
},
|
||||||
|
child: SizedBox(
|
||||||
|
width: 300.0,
|
||||||
|
child: Padding(
|
||||||
|
padding: const EdgeInsets.only(bottom: 20.0),
|
||||||
|
child: Container(
|
||||||
|
padding: const EdgeInsets.all(8.0),
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
color: const Color.fromARGB(255, 255, 255, 255),
|
||||||
|
borderRadius: BorderRadius.circular(7.0),
|
||||||
|
),
|
||||||
|
child: Text(
|
||||||
|
'Tiempo',
|
||||||
|
textAlign: TextAlign.center,
|
||||||
|
style: TextStyle(
|
||||||
|
color: Color.fromARGB(255, 78, 169, 6),
|
||||||
|
fontSize: getResponsiveFontSize(context, 32.0),
|
||||||
|
fontWeight: FontWeight.bold,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
SizedBox(height: 20),
|
||||||
|
InkWell(
|
||||||
|
onTap: () {
|
||||||
|
launchPrivacyPolicyURL();
|
||||||
|
},
|
||||||
|
child: Text(
|
||||||
|
'Lee nuestras políticas de privacidad',
|
||||||
|
style: TextStyle(
|
||||||
|
color: Colors.blue,
|
||||||
|
decoration: TextDecoration.underline,
|
||||||
|
fontSize: getResponsiveFontSize(context, 16.0),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
SizedBox(height: 10),
|
||||||
|
ElevatedButton(
|
||||||
|
onPressed: mostrarAvisoLegal,
|
||||||
|
child: Text(
|
||||||
|
'Aviso Legal',
|
||||||
|
style: TextStyle(
|
||||||
|
fontSize: getResponsiveFontSize(context, 16.0),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
bottomNavigationBar: const CustomBottomBar(),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
118
lib/pages/noticias
Normal file
@ -0,0 +1,118 @@
|
|||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:http/http.dart' as http;
|
||||||
|
import 'package:crcivan/bars/app_bar';
|
||||||
|
import 'package:crcivan/bars/bottom_bar';
|
||||||
|
import 'package:html/parser.dart' as htmlParser;
|
||||||
|
import 'package:crcivan/widgets/background_widget.dart';
|
||||||
|
import 'package:crcivan/pages/utils.dart';
|
||||||
|
|
||||||
|
class NoticiasPage extends StatefulWidget {
|
||||||
|
const NoticiasPage({Key? key}) : super(key: key);
|
||||||
|
|
||||||
|
@override
|
||||||
|
_NoticiasPageState createState() => _NoticiasPageState();
|
||||||
|
}
|
||||||
|
|
||||||
|
class _NoticiasPageState extends State<NoticiasPage> {
|
||||||
|
List<Map<String, String>> noticias = [];
|
||||||
|
bool _isLoading = true;
|
||||||
|
|
||||||
|
static const String url = 'https://crcivan.asociacionador.es/noticias.html';
|
||||||
|
|
||||||
|
@override
|
||||||
|
void initState() {
|
||||||
|
super.initState();
|
||||||
|
obtenerNoticias();
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<void> obtenerNoticias() async {
|
||||||
|
try {
|
||||||
|
final response = await http.get(Uri.parse(url));
|
||||||
|
if (response.statusCode == 200) {
|
||||||
|
var document = htmlParser.parse(response.body);
|
||||||
|
var noticiasElements = document.querySelectorAll(
|
||||||
|
'html > body > div > center > table > tbody > tr > td > div > center > table > tbody > tr > td > table > tbody > tr > td'
|
||||||
|
);
|
||||||
|
|
||||||
|
var noticiasTemp = <Map<String, String>>[];
|
||||||
|
|
||||||
|
for (var element in noticiasElements) {
|
||||||
|
var tituloElement = element.querySelector('b > a');
|
||||||
|
if (tituloElement != null) {
|
||||||
|
var titulo = tituloElement.text.trim();
|
||||||
|
var href = tituloElement.attributes['href'];
|
||||||
|
|
||||||
|
var contenido = '';
|
||||||
|
var fontElements = element.querySelectorAll('font');
|
||||||
|
for (var font in fontElements) {
|
||||||
|
contenido += '${font.text.trim()}\n';
|
||||||
|
}
|
||||||
|
noticiasTemp.add({
|
||||||
|
'titulo': titulo,
|
||||||
|
'contenido': contenido.trim(),
|
||||||
|
'href': href ?? ''
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
setState(() {
|
||||||
|
noticias = noticiasTemp;
|
||||||
|
_isLoading = false;
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
throw Exception('Fallo al cargar noticias');
|
||||||
|
}
|
||||||
|
} catch (e) {
|
||||||
|
print('Error al obtener noticias: $e');
|
||||||
|
setState(() {
|
||||||
|
_isLoading = false;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return Scaffold(
|
||||||
|
appBar: const CustomAppBar(),
|
||||||
|
body: _isLoading
|
||||||
|
? Center(child: CircularProgressIndicator())
|
||||||
|
: BackgroundWidget(
|
||||||
|
child: ListView.builder(
|
||||||
|
itemCount: noticias.length,
|
||||||
|
itemBuilder: (context, index) {
|
||||||
|
var titulo = noticias[index]['titulo'];
|
||||||
|
var contenido = noticias[index]['contenido'];
|
||||||
|
var href = noticias[index]['href'];
|
||||||
|
|
||||||
|
return Container(
|
||||||
|
color: Colors.white.withOpacity(0.5), // Fondo blanco con 50% de opacidad
|
||||||
|
margin: const EdgeInsets.all(8.0),
|
||||||
|
padding: const EdgeInsets.all(8.0),
|
||||||
|
child: ExpansionTile(
|
||||||
|
title: Text(
|
||||||
|
titulo!,
|
||||||
|
style: TextStyle(
|
||||||
|
fontWeight: FontWeight.bold, // Establecer negrita para el título
|
||||||
|
fontSize: getResponsiveFontSize(context, 18.0),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
children: [
|
||||||
|
Padding(
|
||||||
|
padding: const EdgeInsets.all(8.0),
|
||||||
|
child: Text(
|
||||||
|
contenido!,
|
||||||
|
style: TextStyle(
|
||||||
|
fontSize: getResponsiveFontSize(context, 16.0), // Mantener el texto del contenido en estilo regular
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
);
|
||||||
|
},
|
||||||
|
),
|
||||||
|
),
|
||||||
|
bottomNavigationBar: const CustomBottomBar(),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
107
lib/pages/pregon
Normal file
@ -0,0 +1,107 @@
|
|||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:http/http.dart' as http;
|
||||||
|
import 'package:html/parser.dart' as htmlParser;
|
||||||
|
import 'package:html/dom.dart' as htmlDom;
|
||||||
|
import 'package:crcivan/bars/app_bar';
|
||||||
|
import 'package:crcivan/bars/bottom_bar';
|
||||||
|
import 'package:crcivan/widgets/background_widget.dart';
|
||||||
|
import 'package:crcivan/pages/utils.dart';
|
||||||
|
|
||||||
|
class Pregon extends StatefulWidget {
|
||||||
|
const Pregon({Key? key}) : super(key: key);
|
||||||
|
|
||||||
|
@override
|
||||||
|
_PregonState createState() => _PregonState();
|
||||||
|
}
|
||||||
|
|
||||||
|
class _PregonState extends State<Pregon> {
|
||||||
|
List<String> datos = [];
|
||||||
|
|
||||||
|
@override
|
||||||
|
void initState() {
|
||||||
|
super.initState();
|
||||||
|
obtenerDatos();
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<void> obtenerDatos() async {
|
||||||
|
final response = await http.get(Uri.parse('https://crcivan.asociacionador.es/pregon.html'));
|
||||||
|
if (response.statusCode == 200) {
|
||||||
|
final document = htmlParser.parse(response.body);
|
||||||
|
|
||||||
|
// Buscar los elementos <p> dentro de la estructura específica
|
||||||
|
final elementosParrafos = document.querySelectorAll('body > div > center > table > tbody > tr > td > div > center > table > tbody > tr > td > table > tbody > tr > td > font > font > p');
|
||||||
|
|
||||||
|
// Limpiar la lista de datos antes de actualizarla
|
||||||
|
setState(() {
|
||||||
|
datos.clear();
|
||||||
|
});
|
||||||
|
|
||||||
|
// Agregar textos de los elementos <p> a la lista, evitando los que contienen solo espacios
|
||||||
|
for (var elemento in elementosParrafos) {
|
||||||
|
final texto = elemento.text.trim(); // Eliminar espacios al inicio y al final del texto
|
||||||
|
if (texto.isNotEmpty) {
|
||||||
|
setState(() {
|
||||||
|
datos.add(texto);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
throw Exception('Error al cargar los datos');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
// Lista de nombres de los meses del año
|
||||||
|
final meses = [
|
||||||
|
'enero', 'febrero', 'marzo', 'abril', 'mayo', 'junio',
|
||||||
|
'julio', 'agosto', 'septiembre', 'octubre', 'noviembre', 'diciembre'
|
||||||
|
];
|
||||||
|
|
||||||
|
return Scaffold(
|
||||||
|
appBar: const CustomAppBar(),
|
||||||
|
body: BackgroundWidget(
|
||||||
|
child: Center(
|
||||||
|
child: ListView.builder(
|
||||||
|
itemCount: datos.length,
|
||||||
|
itemBuilder: (context, index) {
|
||||||
|
final hasText = datos[index].isNotEmpty;
|
||||||
|
final hasMes = meses.any((mes) => datos[index].toLowerCase().contains(mes));
|
||||||
|
return Column(
|
||||||
|
children: [
|
||||||
|
if (hasMes)
|
||||||
|
Padding(
|
||||||
|
padding: const EdgeInsets.symmetric(horizontal: 10.0),
|
||||||
|
child: Divider(color: Colors.green, thickness: 3.0), // Divider antes del párrafo
|
||||||
|
),
|
||||||
|
hasText
|
||||||
|
? ListTile(
|
||||||
|
title: Center(
|
||||||
|
child: Text(
|
||||||
|
datos[index],
|
||||||
|
textAlign: TextAlign.center,
|
||||||
|
style: TextStyle(
|
||||||
|
color: hasMes ? Color.fromARGB(255, 0, 0, 0) : Color.fromARGB(255, 0, 0, 0),
|
||||||
|
fontSize: getResponsiveFontSize(context, 22.0),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
)
|
||||||
|
: SizedBox.shrink(),
|
||||||
|
if (hasMes)
|
||||||
|
Padding(
|
||||||
|
padding: const EdgeInsets.symmetric(horizontal: 100.0),
|
||||||
|
child: Divider(color: Colors.green, thickness: 1.0), // Divider después del párrafo
|
||||||
|
),
|
||||||
|
],
|
||||||
|
);
|
||||||
|
},
|
||||||
|
shrinkWrap: true, // Ajusta el tamaño de ListView al contenido
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
bottomNavigationBar: const CustomBottomBar(),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
133
lib/pages/secciones
Normal file
@ -0,0 +1,133 @@
|
|||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:crcivan/BloC/DataService.dart';
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:http/http.dart' as http;
|
||||||
|
import 'package:html/parser.dart' as htmlParser;
|
||||||
|
import 'package:html/dom.dart' as htmlDom;
|
||||||
|
import 'package:crcivan/bars/app_bar';
|
||||||
|
import 'package:crcivan/bars/bottom_bar';
|
||||||
|
import 'package:crcivan/widgets/background_widget.dart';
|
||||||
|
import 'package:crcivan/pages/utils.dart';
|
||||||
|
|
||||||
|
class SeccionesPage extends StatefulWidget {
|
||||||
|
const SeccionesPage({Key? key}) : super(key: key);
|
||||||
|
|
||||||
|
@override
|
||||||
|
_SeccionesPageState createState() => _SeccionesPageState();
|
||||||
|
}
|
||||||
|
|
||||||
|
class _SeccionesPageState extends State<SeccionesPage> {
|
||||||
|
final DataService dataService = DataService();
|
||||||
|
String communicationDate = '';
|
||||||
|
List<Map<String, dynamic>> seccionesData = [];
|
||||||
|
|
||||||
|
@override
|
||||||
|
void initState() {
|
||||||
|
super.initState();
|
||||||
|
obtenerDatosSecciones();
|
||||||
|
}
|
||||||
|
|
||||||
|
Future<void> obtenerDatosSecciones() async {
|
||||||
|
try {
|
||||||
|
final data = await dataService.obtenerDatosSecciones();
|
||||||
|
setState(() {
|
||||||
|
communicationDate = data['communicationDate'];
|
||||||
|
seccionesData = data['seccionesData'];
|
||||||
|
});
|
||||||
|
} catch (e) {
|
||||||
|
print('Error: $e');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return Scaffold(
|
||||||
|
appBar: const CustomAppBar(),
|
||||||
|
body: BackgroundWidget(
|
||||||
|
child: Column(
|
||||||
|
children: [
|
||||||
|
Padding(
|
||||||
|
padding: const EdgeInsets.all(8.0),
|
||||||
|
child: Text(
|
||||||
|
communicationDate,
|
||||||
|
style: TextStyle(
|
||||||
|
fontSize: getResponsiveFontSize(context, 18.0),
|
||||||
|
fontWeight: FontWeight.bold,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
Expanded(
|
||||||
|
child: ListView.builder(
|
||||||
|
itemCount: seccionesData.length,
|
||||||
|
itemBuilder: (context, index) {
|
||||||
|
final seccion = seccionesData[index];
|
||||||
|
return Padding(
|
||||||
|
padding: const EdgeInsets.only(bottom: 8.0),
|
||||||
|
child: Container(
|
||||||
|
decoration: BoxDecoration(
|
||||||
|
color: Colors.white.withOpacity(0.5),
|
||||||
|
borderRadius: BorderRadius.circular(10.0),
|
||||||
|
),
|
||||||
|
child: Column(
|
||||||
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
children: [
|
||||||
|
Padding(
|
||||||
|
padding: const EdgeInsets.all(8.0),
|
||||||
|
child: Row(
|
||||||
|
mainAxisAlignment: MainAxisAlignment.start,
|
||||||
|
children: [
|
||||||
|
const Text(
|
||||||
|
'ÚLTIMO RIEGO',
|
||||||
|
style: TextStyle(
|
||||||
|
fontSize: 20.0,
|
||||||
|
fontWeight: FontWeight.bold,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
const SizedBox(width: 8.0),
|
||||||
|
Text(
|
||||||
|
seccion['section'],
|
||||||
|
style: TextStyle(
|
||||||
|
fontSize: getResponsiveFontSize(context, 20.0),
|
||||||
|
fontWeight: FontWeight.bold,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
if (seccion['guardInfo'] != null)
|
||||||
|
Padding(
|
||||||
|
padding: const EdgeInsets.symmetric(horizontal: 8.0),
|
||||||
|
child: Text(
|
||||||
|
seccion['guardInfo'],
|
||||||
|
style: TextStyle(
|
||||||
|
fontSize: getResponsiveFontSize(context, 20.0),
|
||||||
|
fontWeight: FontWeight.bold,
|
||||||
|
fontStyle: FontStyle.italic,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
...seccion['data'].map<Widget>((data) {
|
||||||
|
return Padding(
|
||||||
|
padding: const EdgeInsets.symmetric(horizontal: 8.0, vertical: 4.0),
|
||||||
|
child: Text(
|
||||||
|
'${data['date']}: ${data['location']}',
|
||||||
|
style: TextStyle(
|
||||||
|
fontSize: getResponsiveFontSize(context, 16.0),
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
}).toList(),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
);
|
||||||
|
},
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
bottomNavigationBar: const CustomBottomBar(),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
11
lib/pages/utils.dart
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
import 'package:flutter/material.dart';
|
||||||
|
|
||||||
|
double getResponsiveFontSize(BuildContext context, double baseFontSize) {
|
||||||
|
double screenWidth = MediaQuery.of(context).size.width;
|
||||||
|
// Ajustar el tamaño del texto en función del ancho de la pantalla
|
||||||
|
if (screenWidth > 600) {
|
||||||
|
return baseFontSize * 1.6; // Aumentar el tamaño del texto en tablets
|
||||||
|
} else {
|
||||||
|
return baseFontSize; // Mantener el tamaño del texto en teléfonos
|
||||||
|
}
|
||||||
|
}
|
||||||
22
lib/widgets/background_widget.dart
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
import 'package:flutter/material.dart';
|
||||||
|
|
||||||
|
class BackgroundWidget extends StatelessWidget {
|
||||||
|
final Widget child;
|
||||||
|
|
||||||
|
const BackgroundWidget({required this.child, super.key});
|
||||||
|
|
||||||
|
@override
|
||||||
|
Widget build(BuildContext context) {
|
||||||
|
return Stack(
|
||||||
|
children: [
|
||||||
|
Positioned.fill(
|
||||||
|
child: Image.asset(
|
||||||
|
'assets/logo-fondo-verde.png',
|
||||||
|
fit: BoxFit.cover,
|
||||||
|
),
|
||||||
|
),
|
||||||
|
child,
|
||||||
|
],
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -7,7 +7,7 @@ project(runner LANGUAGES CXX)
|
|||||||
set(BINARY_NAME "flutter_project")
|
set(BINARY_NAME "flutter_project")
|
||||||
# The unique GTK application identifier for this application. See:
|
# The unique GTK application identifier for this application. See:
|
||||||
# https://wiki.gnome.org/HowDoI/ChooseApplicationID
|
# https://wiki.gnome.org/HowDoI/ChooseApplicationID
|
||||||
set(APPLICATION_ID "com.example.flutter_project")
|
set(APPLICATION_ID "com.asociacionador.civan")
|
||||||
|
|
||||||
# Explicitly opt in to modern CMake behaviors to avoid warnings with recent
|
# Explicitly opt in to modern CMake behaviors to avoid warnings with recent
|
||||||
# versions of CMake.
|
# versions of CMake.
|
||||||
|
|||||||
@ -6,6 +6,10 @@
|
|||||||
|
|
||||||
#include "generated_plugin_registrant.h"
|
#include "generated_plugin_registrant.h"
|
||||||
|
|
||||||
|
#include <url_launcher_linux/url_launcher_plugin.h>
|
||||||
|
|
||||||
void fl_register_plugins(FlPluginRegistry* registry) {
|
void fl_register_plugins(FlPluginRegistry* registry) {
|
||||||
|
g_autoptr(FlPluginRegistrar) url_launcher_linux_registrar =
|
||||||
|
fl_plugin_registry_get_registrar_for_plugin(registry, "UrlLauncherPlugin");
|
||||||
|
url_launcher_plugin_register_with_registrar(url_launcher_linux_registrar);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -3,6 +3,7 @@
|
|||||||
#
|
#
|
||||||
|
|
||||||
list(APPEND FLUTTER_PLUGIN_LIST
|
list(APPEND FLUTTER_PLUGIN_LIST
|
||||||
|
url_launcher_linux
|
||||||
)
|
)
|
||||||
|
|
||||||
list(APPEND FLUTTER_FFI_PLUGIN_LIST
|
list(APPEND FLUTTER_FFI_PLUGIN_LIST
|
||||||
|
|||||||
@ -5,6 +5,10 @@
|
|||||||
import FlutterMacOS
|
import FlutterMacOS
|
||||||
import Foundation
|
import Foundation
|
||||||
|
|
||||||
|
import shared_preferences_foundation
|
||||||
|
import url_launcher_macos
|
||||||
|
|
||||||
func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) {
|
func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) {
|
||||||
|
SharedPreferencesPlugin.register(with: registry.registrar(forPlugin: "SharedPreferencesPlugin"))
|
||||||
|
UrlLauncherPlugin.register(with: registry.registrar(forPlugin: "UrlLauncherPlugin"))
|
||||||
}
|
}
|
||||||
|
|||||||
458
pubspec.lock
@ -1,6 +1,22 @@
|
|||||||
# Generated by pub
|
# Generated by pub
|
||||||
# See https://dart.dev/tools/pub/glossary#lockfile
|
# See https://dart.dev/tools/pub/glossary#lockfile
|
||||||
packages:
|
packages:
|
||||||
|
archive:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: archive
|
||||||
|
sha256: "6199c74e3db4fbfbd04f66d739e72fe11c8a8957d5f219f1f4482dbde6420b5a"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "4.0.2"
|
||||||
|
args:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: args
|
||||||
|
sha256: bf9f5caeea8d8fe6721a9c358dd8a5c1947b27f1cfaa18b39c301273594919e6
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "2.6.0"
|
||||||
async:
|
async:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@ -9,6 +25,14 @@ packages:
|
|||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.11.0"
|
version: "2.11.0"
|
||||||
|
bloc:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: bloc
|
||||||
|
sha256: "106842ad6569f0b60297619e9e0b1885c2fb9bf84812935490e6c5275777804e"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "8.1.4"
|
||||||
boolean_selector:
|
boolean_selector:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@ -17,6 +41,14 @@ packages:
|
|||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.1.1"
|
version: "2.1.1"
|
||||||
|
change_app_package_name:
|
||||||
|
dependency: "direct main"
|
||||||
|
description:
|
||||||
|
name: change_app_package_name
|
||||||
|
sha256: "1d6ca5fbaba7264f70857941543337b2efe48f19ae2eef29b89927541b52a787"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "1.4.0"
|
||||||
characters:
|
characters:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@ -25,6 +57,22 @@ packages:
|
|||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.3.0"
|
version: "1.3.0"
|
||||||
|
checked_yaml:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: checked_yaml
|
||||||
|
sha256: feb6bed21949061731a7a75fc5d2aa727cf160b91af9a3e464c5e3a32e28b5ff
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "2.0.3"
|
||||||
|
cli_util:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: cli_util
|
||||||
|
sha256: ff6785f7e9e3c38ac98b2fb035701789de90154024a75b6cb926445e83197d1c
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "0.4.2"
|
||||||
clock:
|
clock:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@ -37,10 +85,26 @@ packages:
|
|||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: collection
|
name: collection
|
||||||
sha256: ee67cb0715911d28db6bf4af1026078bd6f0128b07a5f66fb2ed94ec6783c09a
|
sha256: a1ace0a119f20aabc852d165077c036cd864315bd99b7eaa10a60100341941bf
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.18.0"
|
version: "1.19.0"
|
||||||
|
crypto:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: crypto
|
||||||
|
sha256: "1e445881f28f22d6140f181e07737b22f1e099a5e1ff94b0af2f9e4a463f4855"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "3.0.6"
|
||||||
|
csslib:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: csslib
|
||||||
|
sha256: "09bad715f418841f976c77db72d5398dc1253c21fb9c0c7f0b0b985860b2d58e"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "1.0.2"
|
||||||
cupertino_icons:
|
cupertino_icons:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description:
|
description:
|
||||||
@ -57,11 +121,43 @@ packages:
|
|||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.3.1"
|
version: "1.3.1"
|
||||||
|
ffi:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: ffi
|
||||||
|
sha256: "16ed7b077ef01ad6170a3d0c57caa4a112a38d7a2ed5602e0aca9ca6f3d98da6"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "2.1.3"
|
||||||
|
file:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: file
|
||||||
|
sha256: a3b4f84adafef897088c160faf7dfffb7696046cb13ae90b508c2cbc95d3b8d4
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "7.0.1"
|
||||||
flutter:
|
flutter:
|
||||||
dependency: "direct main"
|
dependency: "direct main"
|
||||||
description: flutter
|
description: flutter
|
||||||
source: sdk
|
source: sdk
|
||||||
version: "0.0.0"
|
version: "0.0.0"
|
||||||
|
flutter_bloc:
|
||||||
|
dependency: "direct main"
|
||||||
|
description:
|
||||||
|
name: flutter_bloc
|
||||||
|
sha256: b594505eac31a0518bdcb4b5b79573b8d9117b193cc80cc12e17d639b10aa27a
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "8.1.6"
|
||||||
|
flutter_launcher_icons:
|
||||||
|
dependency: "direct main"
|
||||||
|
description:
|
||||||
|
name: flutter_launcher_icons
|
||||||
|
sha256: bfa04787c85d80ecb3f8777bde5fc10c3de809240c48fa061a2c2bf15ea5211c
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "0.14.3"
|
||||||
flutter_lints:
|
flutter_lints:
|
||||||
dependency: "direct dev"
|
dependency: "direct dev"
|
||||||
description:
|
description:
|
||||||
@ -70,35 +166,88 @@ packages:
|
|||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "3.0.2"
|
version: "3.0.2"
|
||||||
|
flutter_svg:
|
||||||
|
dependency: "direct main"
|
||||||
|
description:
|
||||||
|
name: flutter_svg
|
||||||
|
sha256: c200fd79c918a40c5cd50ea0877fa13f81bdaf6f0a5d3dbcc2a13e3285d6aa1b
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "2.0.17"
|
||||||
flutter_test:
|
flutter_test:
|
||||||
dependency: "direct dev"
|
dependency: "direct dev"
|
||||||
description: flutter
|
description: flutter
|
||||||
source: sdk
|
source: sdk
|
||||||
version: "0.0.0"
|
version: "0.0.0"
|
||||||
|
flutter_web_plugins:
|
||||||
|
dependency: transitive
|
||||||
|
description: flutter
|
||||||
|
source: sdk
|
||||||
|
version: "0.0.0"
|
||||||
|
html:
|
||||||
|
dependency: "direct dev"
|
||||||
|
description:
|
||||||
|
name: html
|
||||||
|
sha256: "3a7812d5bcd2894edf53dfaf8cd640876cf6cef50a8f238745c8b8120ea74d3a"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "0.15.4"
|
||||||
|
http:
|
||||||
|
dependency: "direct dev"
|
||||||
|
description:
|
||||||
|
name: http
|
||||||
|
sha256: fe7ab022b76f3034adc518fb6ea04a82387620e19977665ea18d30a1cf43442f
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "1.3.0"
|
||||||
|
http_parser:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: http_parser
|
||||||
|
sha256: "178d74305e7866013777bab2c3d8726205dc5a4dd935297175b19a23a2e66571"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "4.1.2"
|
||||||
|
image:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: image
|
||||||
|
sha256: "8346ad4b5173924b5ddddab782fc7d8a6300178c8b1dc427775405a01701c4a6"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "4.5.2"
|
||||||
|
json_annotation:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: json_annotation
|
||||||
|
sha256: "1ce844379ca14835a50d2f019a3099f419082cfdd231cd86a142af94dd5c6bb1"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "4.9.0"
|
||||||
leak_tracker:
|
leak_tracker:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: leak_tracker
|
name: leak_tracker
|
||||||
sha256: "78eb209deea09858f5269f5a5b02be4049535f568c07b275096836f01ea323fa"
|
sha256: "7bb2830ebd849694d1ec25bf1f44582d6ac531a57a365a803a6034ff751d2d06"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "10.0.0"
|
version: "10.0.7"
|
||||||
leak_tracker_flutter_testing:
|
leak_tracker_flutter_testing:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: leak_tracker_flutter_testing
|
name: leak_tracker_flutter_testing
|
||||||
sha256: b46c5e37c19120a8a01918cfaf293547f47269f7cb4b0058f21531c2465d6ef0
|
sha256: "9491a714cca3667b60b5c420da8217e6de0d1ba7a5ec322fab01758f6998f379"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.0.1"
|
version: "3.0.8"
|
||||||
leak_tracker_testing:
|
leak_tracker_testing:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: leak_tracker_testing
|
name: leak_tracker_testing
|
||||||
sha256: a597f72a664dbd293f3bfc51f9ba69816f84dcd403cdac7066cb3f6003f3ab47
|
sha256: "6ba465d5d76e67ddf503e1161d1f4a6bc42306f9d66ca1e8f079a47290fb06d3"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "2.0.1"
|
version: "3.0.1"
|
||||||
lints:
|
lints:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@ -119,18 +268,26 @@ packages:
|
|||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: material_color_utilities
|
name: material_color_utilities
|
||||||
sha256: "0e0a020085b65b6083975e499759762399b4475f766c21668c4ecca34ea74e5a"
|
sha256: f7142bb1154231d7ea5f96bc7bde4bda2a0945d2806bb11670e30b850d56bdec
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.8.0"
|
version: "0.11.1"
|
||||||
meta:
|
meta:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: meta
|
name: meta
|
||||||
sha256: d584fa6707a52763a52446f02cc621b077888fb63b93bbcb1143a7be5a0c0c04
|
sha256: bdb68674043280c3428e9ec998512fb681678676b3c54e773629ffe74419f8c7
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.11.0"
|
version: "1.15.0"
|
||||||
|
nested:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: nested
|
||||||
|
sha256: "03bac4c528c64c95c722ec99280375a6f2fc708eec17c7b3f07253b626cd2a20"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "1.0.0"
|
||||||
path:
|
path:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@ -139,11 +296,139 @@ packages:
|
|||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.9.0"
|
version: "1.9.0"
|
||||||
|
path_parsing:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: path_parsing
|
||||||
|
sha256: "883402936929eac138ee0a45da5b0f2c80f89913e6dc3bf77eb65b84b409c6ca"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "1.1.0"
|
||||||
|
path_provider_linux:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: path_provider_linux
|
||||||
|
sha256: f7a1fe3a634fe7734c8d3f2766ad746ae2a2884abe22e241a8b301bf5cac3279
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "2.2.1"
|
||||||
|
path_provider_platform_interface:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: path_provider_platform_interface
|
||||||
|
sha256: "88f5779f72ba699763fa3a3b06aa4bf6de76c8e5de842cf6f29e2e06476c2334"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "2.1.2"
|
||||||
|
path_provider_windows:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: path_provider_windows
|
||||||
|
sha256: bd6f00dbd873bfb70d0761682da2b3a2c2fccc2b9e84c495821639601d81afe7
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "2.3.0"
|
||||||
|
petitparser:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: petitparser
|
||||||
|
sha256: c15605cd28af66339f8eb6fbe0e541bfe2d1b72d5825efc6598f3e0a31b9ad27
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "6.0.2"
|
||||||
|
platform:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: platform
|
||||||
|
sha256: "5d6b1b0036a5f331ebc77c850ebc8506cbc1e9416c27e59b439f917a902a4984"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "3.1.6"
|
||||||
|
plugin_platform_interface:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: plugin_platform_interface
|
||||||
|
sha256: "4820fbfdb9478b1ebae27888254d445073732dae3d6ea81f0b7e06d5dedc3f02"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "2.1.8"
|
||||||
|
posix:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: posix
|
||||||
|
sha256: a0117dc2167805aa9125b82eee515cc891819bac2f538c83646d355b16f58b9a
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "6.0.1"
|
||||||
|
provider:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: provider
|
||||||
|
sha256: c8a055ee5ce3fd98d6fc872478b03823ffdb448699c6ebdbbc71d59b596fd48c
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "6.1.2"
|
||||||
|
shared_preferences:
|
||||||
|
dependency: "direct main"
|
||||||
|
description:
|
||||||
|
name: shared_preferences
|
||||||
|
sha256: "846849e3e9b68f3ef4b60c60cf4b3e02e9321bc7f4d8c4692cf87ffa82fc8a3a"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "2.5.2"
|
||||||
|
shared_preferences_android:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: shared_preferences_android
|
||||||
|
sha256: a768fc8ede5f0c8e6150476e14f38e2417c0864ca36bb4582be8e21925a03c22
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "2.4.6"
|
||||||
|
shared_preferences_foundation:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: shared_preferences_foundation
|
||||||
|
sha256: "6a52cfcdaeac77cad8c97b539ff688ccfc458c007b4db12be584fbe5c0e49e03"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "2.5.4"
|
||||||
|
shared_preferences_linux:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: shared_preferences_linux
|
||||||
|
sha256: "580abfd40f415611503cae30adf626e6656dfb2f0cee8f465ece7b6defb40f2f"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "2.4.1"
|
||||||
|
shared_preferences_platform_interface:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: shared_preferences_platform_interface
|
||||||
|
sha256: "57cbf196c486bc2cf1f02b85784932c6094376284b3ad5779d1b1c6c6a816b80"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "2.4.1"
|
||||||
|
shared_preferences_web:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: shared_preferences_web
|
||||||
|
sha256: c49bd060261c9a3f0ff445892695d6212ff603ef3115edbb448509d407600019
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "2.4.3"
|
||||||
|
shared_preferences_windows:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: shared_preferences_windows
|
||||||
|
sha256: "94ef0f72b2d71bc3e700e025db3710911bd51a71cefb65cc609dd0d9a982e3c1"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "2.4.1"
|
||||||
sky_engine:
|
sky_engine:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description: flutter
|
description: flutter
|
||||||
source: sdk
|
source: sdk
|
||||||
version: "0.0.99"
|
version: "0.0.0"
|
||||||
source_span:
|
source_span:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@ -156,10 +441,10 @@ packages:
|
|||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: stack_trace
|
name: stack_trace
|
||||||
sha256: "73713990125a6d93122541237550ee3352a2d84baad52d375a4cad2eb9b7ce0b"
|
sha256: "9f47fd3630d76be3ab26f0ee06d213679aa425996925ff3feffdec504931c377"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.11.1"
|
version: "1.12.0"
|
||||||
stream_channel:
|
stream_channel:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@ -172,10 +457,10 @@ packages:
|
|||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: string_scanner
|
name: string_scanner
|
||||||
sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde"
|
sha256: "688af5ed3402a4bde5b3a6c15fd768dbf2621a614950b17f04626c431ab3c4c3"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "1.2.0"
|
version: "1.3.0"
|
||||||
term_glyph:
|
term_glyph:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@ -188,10 +473,106 @@ packages:
|
|||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: test_api
|
name: test_api
|
||||||
sha256: "5c2f730018264d276c20e4f1503fd1308dfbbae39ec8ee63c5236311ac06954b"
|
sha256: "664d3a9a64782fcdeb83ce9c6b39e78fd2971d4e37827b9b06c3aa1edc5e760c"
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "0.6.1"
|
version: "0.7.3"
|
||||||
|
typed_data:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: typed_data
|
||||||
|
sha256: f9049c039ebfeb4cf7a7104a675823cd72dba8297f264b6637062516699fa006
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "1.4.0"
|
||||||
|
url_launcher:
|
||||||
|
dependency: "direct main"
|
||||||
|
description:
|
||||||
|
name: url_launcher
|
||||||
|
sha256: "9d06212b1362abc2f0f0d78e6f09f726608c74e3b9462e8368bb03314aa8d603"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "6.3.1"
|
||||||
|
url_launcher_android:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: url_launcher_android
|
||||||
|
sha256: "6fc2f56536ee873eeb867ad176ae15f304ccccc357848b351f6f0d8d4a40d193"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "6.3.14"
|
||||||
|
url_launcher_ios:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: url_launcher_ios
|
||||||
|
sha256: "16a513b6c12bb419304e72ea0ae2ab4fed569920d1c7cb850263fe3acc824626"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "6.3.2"
|
||||||
|
url_launcher_linux:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: url_launcher_linux
|
||||||
|
sha256: "4e9ba368772369e3e08f231d2301b4ef72b9ff87c31192ef471b380ef29a4935"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "3.2.1"
|
||||||
|
url_launcher_macos:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: url_launcher_macos
|
||||||
|
sha256: "17ba2000b847f334f16626a574c702b196723af2a289e7a93ffcb79acff855c2"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "3.2.2"
|
||||||
|
url_launcher_platform_interface:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: url_launcher_platform_interface
|
||||||
|
sha256: "552f8a1e663569be95a8190206a38187b531910283c3e982193e4f2733f01029"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "2.3.2"
|
||||||
|
url_launcher_web:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: url_launcher_web
|
||||||
|
sha256: "3ba963161bd0fe395917ba881d320b9c4f6dd3c4a233da62ab18a5025c85f1e9"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "2.4.0"
|
||||||
|
url_launcher_windows:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: url_launcher_windows
|
||||||
|
sha256: "3284b6d2ac454cf34f114e1d3319866fdd1e19cdc329999057e44ffe936cfa77"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "3.1.4"
|
||||||
|
vector_graphics:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: vector_graphics
|
||||||
|
sha256: "7ed22c21d7fdcc88dd6ba7860384af438cd220b251ad65dfc142ab722fabef61"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "1.1.16"
|
||||||
|
vector_graphics_codec:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: vector_graphics_codec
|
||||||
|
sha256: "99fd9fbd34d9f9a32efd7b6a6aae14125d8237b10403b422a6a6dfeac2806146"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "1.1.13"
|
||||||
|
vector_graphics_compiler:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: vector_graphics_compiler
|
||||||
|
sha256: "1b4b9e706a10294258727674a340ae0d6e64a7231980f9f9a3d12e4b42407aad"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "1.1.16"
|
||||||
vector_math:
|
vector_math:
|
||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
@ -204,9 +585,42 @@ packages:
|
|||||||
dependency: transitive
|
dependency: transitive
|
||||||
description:
|
description:
|
||||||
name: vm_service
|
name: vm_service
|
||||||
sha256: b3d56ff4341b8f182b96aceb2fa20e3dcb336b9f867bc0eafc0de10f1048e957
|
sha256: f6be3ed8bd01289b34d679c2b62226f63c0e69f9fd2e50a6b3c1c729a961041b
|
||||||
url: "https://pub.dev"
|
url: "https://pub.dev"
|
||||||
source: hosted
|
source: hosted
|
||||||
version: "13.0.0"
|
version: "14.3.0"
|
||||||
|
web:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: web
|
||||||
|
sha256: cd3543bd5798f6ad290ea73d210f423502e71900302dde696f8bff84bf89a1cb
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "1.1.0"
|
||||||
|
xdg_directories:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: xdg_directories
|
||||||
|
sha256: "7a3f37b05d989967cdddcbb571f1ea834867ae2faa29725fd085180e0883aa15"
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "1.1.0"
|
||||||
|
xml:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: xml
|
||||||
|
sha256: b015a8ad1c488f66851d762d3090a21c600e479dc75e68328c52774040cf9226
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "6.5.0"
|
||||||
|
yaml:
|
||||||
|
dependency: transitive
|
||||||
|
description:
|
||||||
|
name: yaml
|
||||||
|
sha256: b9da305ac7c39faa3f030eccd175340f968459dae4af175130b3fc47e40d76ce
|
||||||
|
url: "https://pub.dev"
|
||||||
|
source: hosted
|
||||||
|
version: "3.1.3"
|
||||||
sdks:
|
sdks:
|
||||||
dart: ">=3.3.4 <4.0.0"
|
dart: ">=3.6.0 <4.0.0"
|
||||||
|
flutter: ">=3.27.0"
|
||||||
|
|||||||
29
pubspec.yaml
@ -1,5 +1,5 @@
|
|||||||
name: flutter_project
|
name: crcivan
|
||||||
description: "A new Flutter project."
|
description: "App para los regantes de CR Civán"
|
||||||
# The following line prevents the package from being accidentally published to
|
# The following line prevents the package from being accidentally published to
|
||||||
# pub.dev using `flutter pub publish`. This is preferred for private packages.
|
# pub.dev using `flutter pub publish`. This is preferred for private packages.
|
||||||
publish_to: 'none' # Remove this line if you wish to publish to pub.dev
|
publish_to: 'none' # Remove this line if you wish to publish to pub.dev
|
||||||
@ -30,11 +30,20 @@ environment:
|
|||||||
dependencies:
|
dependencies:
|
||||||
flutter:
|
flutter:
|
||||||
sdk: flutter
|
sdk: flutter
|
||||||
|
url_launcher: ^6.0.12
|
||||||
|
flutter_bloc: ^8.1.5
|
||||||
|
flutter_svg: ^2.0.10+1
|
||||||
|
shared_preferences: ^2.2.0
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# The following adds the Cupertino Icons font to your application.
|
# The following adds the Cupertino Icons font to your application.
|
||||||
# Use with the CupertinoIcons class for iOS style icons.
|
# Use with the CupertinoIcons class for iOS style icons.
|
||||||
cupertino_icons: ^1.0.6
|
cupertino_icons: ^1.0.6
|
||||||
|
flutter_launcher_icons: ^0.14.1
|
||||||
|
change_app_package_name: ^1.4.0
|
||||||
|
|
||||||
dev_dependencies:
|
dev_dependencies:
|
||||||
flutter_test:
|
flutter_test:
|
||||||
@ -46,10 +55,17 @@ dev_dependencies:
|
|||||||
# package. See that file for information about deactivating specific lint
|
# package. See that file for information about deactivating specific lint
|
||||||
# rules and activating additional ones.
|
# rules and activating additional ones.
|
||||||
flutter_lints: ^3.0.0
|
flutter_lints: ^3.0.0
|
||||||
|
http: ^1.2.1
|
||||||
|
html: 0.15.4
|
||||||
|
flutter_launcher_icons:
|
||||||
# For information on the generic Dart part of this file, see the
|
# For information on the generic Dart part of this file, see the
|
||||||
# following page: https://dart.dev/tools/pub/pubspec
|
# following page: https://dart.dev/tools/pub/pubspec
|
||||||
|
flutter_icons:
|
||||||
|
android: true
|
||||||
|
ios: true
|
||||||
|
image_path: "assets/icon/app_icon.png"
|
||||||
|
adaptive_icon_background: "#FFFFFF" # Color de fondo del ícono adaptativo (o puedes usar un archivo de imagen)
|
||||||
|
adaptive_icon_foreground: "assets/icon/app_icon.png" # Ruta al ícono para el ícono redondo (si es el mismo que el normal, repite la ruta aquí)
|
||||||
# The following section is specific to Flutter packages.
|
# The following section is specific to Flutter packages.
|
||||||
flutter:
|
flutter:
|
||||||
|
|
||||||
@ -62,6 +78,11 @@ flutter:
|
|||||||
assets:
|
assets:
|
||||||
- assets/logo-civan.png
|
- assets/logo-civan.png
|
||||||
- assets/agua.jpg
|
- assets/agua.jpg
|
||||||
|
- assets/logo-fondo.png
|
||||||
|
- assets/logo-sin-texto.png
|
||||||
|
- assets/logo-sin-texto.svg
|
||||||
|
- assets/logo-fondo-verde.png
|
||||||
|
- assets/icon/app_icon.png
|
||||||
# - images/a_dot_ham.jpeg
|
# - images/a_dot_ham.jpeg
|
||||||
|
|
||||||
# An image asset can refer to one or more resolution-specific "variants", see
|
# An image asset can refer to one or more resolution-specific "variants", see
|
||||||
|
|||||||
@ -8,7 +8,7 @@
|
|||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter_test/flutter_test.dart';
|
import 'package:flutter_test/flutter_test.dart';
|
||||||
|
|
||||||
import 'package:flutter_project/main.dart';
|
import 'package:crcivan/main/main.dart';
|
||||||
|
|
||||||
void main() {
|
void main() {
|
||||||
testWidgets('Counter increments smoke test', (WidgetTester tester) async {
|
testWidgets('Counter increments smoke test', (WidgetTester tester) async {
|
||||||
|
|||||||
@ -6,6 +6,9 @@
|
|||||||
|
|
||||||
#include "generated_plugin_registrant.h"
|
#include "generated_plugin_registrant.h"
|
||||||
|
|
||||||
|
#include <url_launcher_windows/url_launcher_windows.h>
|
||||||
|
|
||||||
void RegisterPlugins(flutter::PluginRegistry* registry) {
|
void RegisterPlugins(flutter::PluginRegistry* registry) {
|
||||||
|
UrlLauncherWindowsRegisterWithRegistrar(
|
||||||
|
registry->GetRegistrarForPlugin("UrlLauncherWindows"));
|
||||||
}
|
}
|
||||||
|
|||||||
@ -3,6 +3,7 @@
|
|||||||
#
|
#
|
||||||
|
|
||||||
list(APPEND FLUTTER_PLUGIN_LIST
|
list(APPEND FLUTTER_PLUGIN_LIST
|
||||||
|
url_launcher_windows
|
||||||
)
|
)
|
||||||
|
|
||||||
list(APPEND FLUTTER_FFI_PLUGIN_LIST
|
list(APPEND FLUTTER_FFI_PLUGIN_LIST
|
||||||
|
|||||||