{"id":964,"date":"2023-03-16T00:47:22","date_gmt":"2023-03-15T23:47:22","guid":{"rendered":"https:\/\/7ret.com\/?p=964"},"modified":"2023-03-16T01:26:26","modified_gmt":"2023-03-16T00:26:26","slug":"comparacion-entre-getx-y-riverpod-en-flutter-ejemplos-de-uso-en-view-y-controller","status":"publish","type":"post","link":"https:\/\/7ret.com\/index.php\/2023\/03\/16\/comparacion-entre-getx-y-riverpod-en-flutter-ejemplos-de-uso-en-view-y-controller\/","title":{"rendered":"Comparaci\u00f3n entre GetX y Riverpod en Flutter: Ejemplos de uso en View y Controller"},"content":{"rendered":"\n<p>Tanto GetX como Riverpod son bibliotecas de gesti\u00f3n de estado para Flutter que permiten separar la l\u00f3gica de presentaci\u00f3n de la l\u00f3gica de negocio en una aplicaci\u00f3n.<\/p>\n\n\n\n<p>A continuaci\u00f3n se presenta una comparativa de ambas bibliotecas utilizando ejemplos de una vista y un controlador:<\/p>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">1. Creaci\u00f3n de una vista:<\/h2>\n\n\n\n<p>En GetX, la vista se crea utilizando el m\u00e9todo <code>GetView<\/code> y se define la l\u00f3gica de presentaci\u00f3n en el m\u00e9todo <code>build<\/code>.<\/p>\n\n\n\n<pre class=\"wp-block-code advgb-dyn-2b0b3048\"><code lang=\"dart\" class=\"language-dart\"><code>class CounterView extends GetView&lt;CounterController&gt; {\n  @override\n  Widget build(BuildContext context) {\n    return Scaffold(\n      appBar: AppBar(title: Text('Counter')),\n      body: Center(\n        child: Text('Count: ${controller.count}'),\n      ),\n      floatingActionButton: FloatingActionButton(\n        onPressed: () =&gt; controller.increment(),\n        child: Icon(Icons.add),\n      ),\n    );\n  }\n}\n<\/code><\/code><\/pre>\n\n\n\n<p>En Riverpod, la vista se crea utilizando el m\u00e9todo <code>Consumer<\/code> y se define la l\u00f3gica de presentaci\u00f3n dentro de un widget hijo.<\/p>\n\n\n\n<pre class=\"wp-block-code advgb-dyn-cb50da36\"><code lang=\"dart\" class=\"language-dart\"><code>class CounterView extends StatelessWidget {\n  @override\n  Widget build(BuildContext context) {\n    return Scaffold(\n      appBar: AppBar(title: Text('Counter')),\n      body: Center(\n        child: Consumer(\n          builder: (context, watch, child) {\n            final count = watch(counterProvider).state;\n            return Text('Count: $count');\n          },\n        ),\n      ),\n      floatingActionButton: FloatingActionButton(\n        onPressed: () =&gt; context.read(counterProvider).increment(),\n        child: Icon(Icons.add),\n      ),\n    );\n  }\n}\n<\/code><\/code><\/pre>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">2. Creaci\u00f3n de un controlador<\/h2>\n\n\n\n<p>En GetX, se define un controlador utilizando la clase <code>GetxController<\/code> y se definen los m\u00e9todos de la l\u00f3gica de negocio.<\/p>\n\n\n\n<pre class=\"wp-block-code advgb-dyn-0ff98042\"><code lang=\"dart\" class=\"language-dart\"><code>class CounterController extends GetxController {\n  var count = 0;\n\n  void increment() {\n    count++;\n    update();\n  }\n}\n<\/code><\/code><\/pre>\n\n\n\n<p>En Riverpod, se define un controlador utilizando el m\u00e9todo <code>StateNotifier<\/code> y se definen los m\u00e9todos de la l\u00f3gica de negocio.<\/p>\n\n\n\n<pre class=\"wp-block-code advgb-dyn-b9a578de\"><code lang=\"dart\" class=\"language-dart\"><code>class CounterController extends StateNotifier&lt;int&gt; {\n  CounterController() : super(0);\n\n  void increment() {\n    state++;\n  }\n}\n<\/code><\/code><\/pre>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">3. Acceso al controlador desde el View<\/h2>\n\n\n\n<p>En GetX, se utiliza el m\u00e9todo <code>Get.put<\/code> para instanciar el controlador en la vista y luego se accede a \u00e9l utilizando la propiedad <code>controller<\/code>.<\/p>\n\n\n\n<pre class=\"wp-block-code advgb-dyn-a421f19b\"><code lang=\"dart\" class=\"language-dart\"><code>class CounterView extends GetView&lt;CounterController&gt; {\n  @override\n  Widget build(BuildContext context) {\n    Get.put(CounterController());\n    return Scaffold(\n      appBar: AppBar(title: Text('Counter')),\n      body: Center(\n        child: Text('Count: ${controller.count}'),\n      ),\n      floatingActionButton: FloatingActionButton(\n        onPressed: () =&gt; controller.increment(),\n        child: Icon(Icons.add),\n      ),\n    );\n  }\n}\n<\/code><\/code><\/pre>\n\n\n\n<p>En Riverpod, se utiliza un <code>Provider<\/code> para instanciar el controlador y se accede a \u00e9l utilizando el m\u00e9todo <code>watch<\/code> o <code>read<\/code> en la vista.<\/p>\n\n\n\n<pre class=\"wp-block-code advgb-dyn-e5decf3f\"><code lang=\"dart\" class=\"language-dart\"><code>final counterProvider = StateNotifierProvider&lt;CounterController&gt;((ref) =&gt; CounterController());\n\nclass CounterView extends StatelessWidget {\n  @override\n  Widget build(BuildContext context) {\n    return Scaffold(\n      appBar: AppBar(title: Text('Counter')),\n      body: Center(\n        child: Consumer(\n          builder: (context, watch, child) {\n            final count = watch(counterProvider).state;\n            return Text('Count: $count');\n          },\n        ),\n      ),\n      floatingActionButton: FloatingActionButton(\n        onPressed: () =&gt; context.read(counterProvider).increment(),\n        child: Icon(Icons.add),\n      ),\n    );\n  }\n}\n<\/code><\/code><\/pre>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">4. Inyecci\u00f3n de dependencias:<\/h2>\n\n\n\n<p><\/p>\n\n\n\n<p>En GetX, la inyecci\u00f3n de dependencias se realiza a trav\u00e9s del m\u00e9todo <code>Get.put<\/code> en la vista o en el controlador.<\/p>\n\n\n\n<pre class=\"wp-block-code advgb-dyn-b1e9c862\"><code lang=\"dart\" class=\"language-dart\"><code>Get.put(MyDependency());\n\nclass MyController extends GetxController {\n  final MyDependency dependency;\n\n  MyController(this.dependency);\n}\n<\/code><\/code><\/pre>\n\n\n\n<p>En Riverpod, la inyecci\u00f3n de dependencias se realiza a trav\u00e9s de los <code>Provider<\/code> y se puede acceder a ellos utilizando el m\u00e9todo <code>watch<\/code> o <code>read<\/code>.<\/p>\n\n\n\n<pre class=\"wp-block-code advgb-dyn-8ec5803e\"><code lang=\"dart\" class=\"language-dart\"><code>final myDependencyProvider = Provider((ref) =&gt; MyDependency());\n\nclass MyController {\n  final MyDependency dependency;\n\n  MyController(this.dependency);\n}\n\nfinal myControllerProvider = Provider((ref) =&gt; MyController(ref.watch(myDependencyProvider)));\n<\/code><\/code><\/pre>\n\n\n\n<p><\/p>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">5. Uso de Streams:<\/h2>\n\n\n\n<p>En GetX, el manejo de Streams se realiza a trav\u00e9s de la clase <code>Rx<\/code> y sus derivados. Por ejemplo, se puede utilizar <code>RxInt<\/code> para manejar un contador que emita cambios.<\/p>\n\n\n\n<pre class=\"wp-block-code advgb-dyn-1673ef05\"><code lang=\"dart\" class=\"language-dart\"><code>class CounterController extends GetxController {\n  var count = RxInt(0);\n\n  void increment() {\n    count.value++;\n  }\n}\n<\/code><\/code><\/pre>\n\n\n\n<p>En Riverpod, se puede utilizar el m\u00e9todo <code>StreamProvider<\/code> para crear un <code>Stream<\/code> que emita cambios y luego acceder a \u00e9l en la vista utilizando el m\u00e9todo <code>watch<\/code>.<\/p>\n\n\n\n<pre class=\"wp-block-code advgb-dyn-d0b478ee\"><code lang=\"dart\" class=\"language-dart\"><code>final counterStreamProvider = StreamProvider&lt;int&gt;((ref) {\n  final controller = ref.watch(counterControllerProvider);\n  return controller.counterStream;\n});\n\nclass CounterController {\n  var _counter = 0;\n  final _counterController = StreamController&lt;int&gt;();\n\n  Stream&lt;int&gt; get counterStream =&gt; _counterController.stream;\n\n  void increment() {\n    _counter++;\n    _counterController.add(_counter);\n  }\n}\n<\/code><\/code><\/pre>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">6. Uso de Future:<\/h2>\n\n\n\n<p>En GetX, el manejo de Futures se realiza a trav\u00e9s de la clase <code>FutureBuilder<\/code> y su m\u00e9todo <code>obx<\/code>.<\/p>\n\n\n\n<pre class=\"wp-block-code advgb-dyn-8e2e02b7\"><code lang=\"dart\" class=\"language-dart\"><code>class CounterView extends GetView&lt;CounterController&gt; {\n  @override\n  Widget build(BuildContext context) {\n    return Scaffold(\n      appBar: AppBar(title: Text('Counter')),\n      body: Center(\n        child: FutureBuilder&lt;int&gt;(\n          future: controller.fetchCount(),\n          builder: (context, snapshot) {\n            if (snapshot.hasData) {\n              return Text('Count: ${snapshot.data}');\n            } else if (snapshot.hasError) {\n              return Text('Error: ${snapshot.error}');\n            }\n            return CircularProgressIndicator();\n          },\n        ),\n      ),\n      floatingActionButton: FloatingActionButton(\n        onPressed: () =&gt; controller.increment(),\n        child: Icon(Icons.add),\n      ),\n    );\n  }\n}\n\nclass CounterController extends GetxController {\n  var count = 0;\n\n  Future&lt;int&gt; fetchCount() async {\n    \/\/ Llamada a una API o cualquier otra operaci\u00f3n as\u00edncrona\n    await Future.delayed(Duration(seconds: 2));\n    return count;\n  }\n}\n<\/code><\/code><\/pre>\n\n\n\n<p>En Riverpod, se utiliza el m\u00e9todo <code>FutureProvider<\/code> para crear un <code>Future<\/code> que emita cambios y luego acceder a \u00e9l en la vista utilizando el m\u00e9todo <code>watch<\/code>.<\/p>\n\n\n\n<pre class=\"wp-block-code advgb-dyn-839cb360\"><code lang=\"dart\" class=\"language-dart\"><code>final counterFutureProvider = FutureProvider&lt;int&gt;((ref) {\n  final controller = ref.watch(counterControllerProvider);\n  return controller.fetchCount();\n});\n\nclass CounterController {\n  var count = 0;\n\n  Future&lt;int&gt; fetchCount() async {\n    \/\/ Llamada a una API o cualquier otra operaci\u00f3n as\u00edncrona\n    await Future.delayed(Duration(seconds: 2));\n    return count;\n  }\n}\n\nclass CounterView extends StatelessWidget {\n  @override\n  Widget build(BuildContext context) {\n    return Scaffold(\n      appBar: AppBar(title: Text('Counter')),\n      body: Center(\n        child: Consumer(\n          builder: (context, watch, child) {\n            final countFuture = watch(counterFutureProvider);\n            return countFuture.when(\n              data: (count) =&gt; Text('Count: $count'),\n              loading: () =&gt; CircularProgressIndicator(),\n              error: (error, stackTrace) =&gt; Text('Error: $error'),\n            );\n          },\n        ),\n      ),\n      floatingActionButton: FloatingActionButton(\n        onPressed: () =&gt; context.read(counterControllerProvider).increment(),\n        child: Icon(Icons.add),\n      ),\n    );\n  }\n}\n<\/code><\/code><\/pre>\n\n\n\n<p>En resumen, GetX y Riverpod ofrecen formas eficientes y sencillas de manejar Streams y Futures en una aplicaci\u00f3n Flutter. La elecci\u00f3n entre una u otra depender\u00e1 de las necesidades espec\u00edficas de cada proyecto y de la preferencia del desarrollador. En general, si se necesita un enfoque m\u00e1s ligero y directo, GetX puede ser una buena opci\u00f3n, mientras que si se necesita una mayor modularidad y una mejor integraci\u00f3n con el sistema de tipos de Dart, Riverpod puede ser m\u00e1s adecuado. En cualquier caso, ambas bibliotecas ofrecen una gran cantidad de funcionalidades \u00fatiles para la creaci\u00f3n de aplicaciones Flutter modernas y eficientes.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Referencias:<\/h2>\n\n\n\n<p><a href=\"https:\/\/riverpod.dev\/\" target=\"_blank\" rel=\"noreferrer noopener\">Riverpod Documentaci\u00f3n Oficial<\/a><\/p>\n\n\n\n<p><a href=\"https:\/\/pub.dev\/packages\/get\" target=\"_blank\" rel=\"noreferrer noopener\">GetX<\/a><\/p>\n\n\n\n<p><\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/7ret.com\/wp-content\/uploads\/2023\/03\/cpu1.jpg\" alt=\"\" class=\"wp-image-965\" width=\"362\" height=\"362\" srcset=\"https:\/\/7ret.com\/wp-content\/uploads\/2023\/03\/cpu1.jpg 512w, https:\/\/7ret.com\/wp-content\/uploads\/2023\/03\/cpu1-300x300.jpg 300w, https:\/\/7ret.com\/wp-content\/uploads\/2023\/03\/cpu1-150x150.jpg 150w, https:\/\/7ret.com\/wp-content\/uploads\/2023\/03\/cpu1-230x230.jpg 230w\" sizes=\"auto, (max-width: 362px) 100vw, 362px\" \/><figcaption class=\"wp-element-caption\">CPU generated with https:\/\/stablediffusionweb.com IA<\/figcaption><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Tanto GetX como Riverpod son bibliotecas de gesti\u00f3n de estado para Flutter que permiten separar la l\u00f3gica de presentaci\u00f3n de la l\u00f3gica de negocio en una aplicaci\u00f3n. A continuaci\u00f3n se presenta una comparativa de ambas bibliotecas utilizando ejemplos de una vista y un controlador: 1. Creaci\u00f3n de una vista: En GetX, la vista se crea<\/p>\n<div class=\"blog-grid-button\"><a class href=\"https:\/\/7ret.com\/index.php\/2023\/03\/16\/comparacion-entre-getx-y-riverpod-en-flutter-ejemplos-de-uso-en-view-y-controller\/\">Seguir leyendo <i class=\"fa fa-arrow-right\"><\/i><\/a><\/div>\n","protected":false},"author":2,"featured_media":965,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"advgb_blocks_editor_width":"","advgb_blocks_columns_visual_guide":"","footnotes":""},"categories":[29,28,27],"tags":[],"class_list":["post-964","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-dart","category-flutter","category-programacion"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Comparaci\u00f3n entre GetX y Riverpod en Flutter: Ejemplos de uso en View y Controller - 7ret Software<\/title>\n<meta name=\"description\" content=\"\u00bfBuscas una forma eficiente de manejar el estado en tus aplicaciones Flutter? Presentamos una comparaci\u00f3n entre GetX y Riverpod con ejemplos.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/7ret.com\/index.php\/2023\/03\/16\/comparacion-entre-getx-y-riverpod-en-flutter-ejemplos-de-uso-en-view-y-controller\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Comparaci\u00f3n entre GetX y Riverpod en Flutter: Ejemplos de uso en View y Controller - 7ret Software\" \/>\n<meta property=\"og:description\" content=\"\u00bfBuscas una forma eficiente de manejar el estado en tus aplicaciones Flutter? Presentamos una comparaci\u00f3n entre GetX y Riverpod con ejemplos.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/7ret.com\/index.php\/2023\/03\/16\/comparacion-entre-getx-y-riverpod-en-flutter-ejemplos-de-uso-en-view-y-controller\/\" \/>\n<meta property=\"og:site_name\" content=\"7ret Software\" \/>\n<meta property=\"article:published_time\" content=\"2023-03-15T23:47:22+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-03-16T00:26:26+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/7ret.com\/wp-content\/uploads\/2023\/03\/cpu1.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"512\" \/>\n\t<meta property=\"og:image:height\" content=\"512\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"C. H.\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/7ret.com\/wp-content\/uploads\/2023\/03\/cpu1.jpg\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"C. H.\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/7ret.com\\\/index.php\\\/2023\\\/03\\\/16\\\/comparacion-entre-getx-y-riverpod-en-flutter-ejemplos-de-uso-en-view-y-controller\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/7ret.com\\\/index.php\\\/2023\\\/03\\\/16\\\/comparacion-entre-getx-y-riverpod-en-flutter-ejemplos-de-uso-en-view-y-controller\\\/\"},\"author\":{\"name\":\"C. H.\",\"@id\":\"https:\\\/\\\/7ret.com\\\/#\\\/schema\\\/person\\\/da40a9548fc342444e3bc2e02737e757\"},\"headline\":\"Comparaci\u00f3n entre GetX y Riverpod en Flutter: Ejemplos de uso en View y Controller\",\"datePublished\":\"2023-03-15T23:47:22+00:00\",\"dateModified\":\"2023-03-16T00:26:26+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/7ret.com\\\/index.php\\\/2023\\\/03\\\/16\\\/comparacion-entre-getx-y-riverpod-en-flutter-ejemplos-de-uso-en-view-y-controller\\\/\"},\"wordCount\":493,\"image\":{\"@id\":\"https:\\\/\\\/7ret.com\\\/index.php\\\/2023\\\/03\\\/16\\\/comparacion-entre-getx-y-riverpod-en-flutter-ejemplos-de-uso-en-view-y-controller\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/7ret.com\\\/wp-content\\\/uploads\\\/2023\\\/03\\\/cpu1.jpg\",\"articleSection\":[\"DART\",\"FLUTTER\",\"PROGRAMACI\u00d3N\"],\"inLanguage\":\"es\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/7ret.com\\\/index.php\\\/2023\\\/03\\\/16\\\/comparacion-entre-getx-y-riverpod-en-flutter-ejemplos-de-uso-en-view-y-controller\\\/\",\"url\":\"https:\\\/\\\/7ret.com\\\/index.php\\\/2023\\\/03\\\/16\\\/comparacion-entre-getx-y-riverpod-en-flutter-ejemplos-de-uso-en-view-y-controller\\\/\",\"name\":\"Comparaci\u00f3n entre GetX y Riverpod en Flutter: Ejemplos de uso en View y Controller - 7ret Software\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/7ret.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/7ret.com\\\/index.php\\\/2023\\\/03\\\/16\\\/comparacion-entre-getx-y-riverpod-en-flutter-ejemplos-de-uso-en-view-y-controller\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/7ret.com\\\/index.php\\\/2023\\\/03\\\/16\\\/comparacion-entre-getx-y-riverpod-en-flutter-ejemplos-de-uso-en-view-y-controller\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/7ret.com\\\/wp-content\\\/uploads\\\/2023\\\/03\\\/cpu1.jpg\",\"datePublished\":\"2023-03-15T23:47:22+00:00\",\"dateModified\":\"2023-03-16T00:26:26+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/7ret.com\\\/#\\\/schema\\\/person\\\/da40a9548fc342444e3bc2e02737e757\"},\"description\":\"\u00bfBuscas una forma eficiente de manejar el estado en tus aplicaciones Flutter? Presentamos una comparaci\u00f3n entre GetX y Riverpod con ejemplos.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/7ret.com\\\/index.php\\\/2023\\\/03\\\/16\\\/comparacion-entre-getx-y-riverpod-en-flutter-ejemplos-de-uso-en-view-y-controller\\\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/7ret.com\\\/index.php\\\/2023\\\/03\\\/16\\\/comparacion-entre-getx-y-riverpod-en-flutter-ejemplos-de-uso-en-view-y-controller\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/7ret.com\\\/index.php\\\/2023\\\/03\\\/16\\\/comparacion-entre-getx-y-riverpod-en-flutter-ejemplos-de-uso-en-view-y-controller\\\/#primaryimage\",\"url\":\"https:\\\/\\\/7ret.com\\\/wp-content\\\/uploads\\\/2023\\\/03\\\/cpu1.jpg\",\"contentUrl\":\"https:\\\/\\\/7ret.com\\\/wp-content\\\/uploads\\\/2023\\\/03\\\/cpu1.jpg\",\"width\":512,\"height\":512},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/7ret.com\\\/index.php\\\/2023\\\/03\\\/16\\\/comparacion-entre-getx-y-riverpod-en-flutter-ejemplos-de-uso-en-view-y-controller\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Portada\",\"item\":\"https:\\\/\\\/7ret.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Comparaci\u00f3n entre GetX y Riverpod en Flutter: Ejemplos de uso en View y Controller\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/7ret.com\\\/#website\",\"url\":\"https:\\\/\\\/7ret.com\\\/\",\"name\":\"7ret Software\",\"description\":\"The Art of Coding\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/7ret.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/7ret.com\\\/#\\\/schema\\\/person\\\/da40a9548fc342444e3bc2e02737e757\",\"name\":\"C. H.\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/4df3c28219e56a7b6c01b95b6e775c52edcb4eccfc976161efd745a8801b821d?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/4df3c28219e56a7b6c01b95b6e775c52edcb4eccfc976161efd745a8801b821d?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/4df3c28219e56a7b6c01b95b6e775c52edcb4eccfc976161efd745a8801b821d?s=96&d=mm&r=g\",\"caption\":\"C. H.\"},\"url\":\"https:\\\/\\\/7ret.com\\\/index.php\\\/author\\\/cesar2admin\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Comparaci\u00f3n entre GetX y Riverpod en Flutter: Ejemplos de uso en View y Controller - 7ret Software","description":"\u00bfBuscas una forma eficiente de manejar el estado en tus aplicaciones Flutter? Presentamos una comparaci\u00f3n entre GetX y Riverpod con ejemplos.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/7ret.com\/index.php\/2023\/03\/16\/comparacion-entre-getx-y-riverpod-en-flutter-ejemplos-de-uso-en-view-y-controller\/","og_locale":"es_ES","og_type":"article","og_title":"Comparaci\u00f3n entre GetX y Riverpod en Flutter: Ejemplos de uso en View y Controller - 7ret Software","og_description":"\u00bfBuscas una forma eficiente de manejar el estado en tus aplicaciones Flutter? Presentamos una comparaci\u00f3n entre GetX y Riverpod con ejemplos.","og_url":"https:\/\/7ret.com\/index.php\/2023\/03\/16\/comparacion-entre-getx-y-riverpod-en-flutter-ejemplos-de-uso-en-view-y-controller\/","og_site_name":"7ret Software","article_published_time":"2023-03-15T23:47:22+00:00","article_modified_time":"2023-03-16T00:26:26+00:00","og_image":[{"width":512,"height":512,"url":"https:\/\/7ret.com\/wp-content\/uploads\/2023\/03\/cpu1.jpg","type":"image\/jpeg"}],"author":"C. H.","twitter_card":"summary_large_image","twitter_image":"https:\/\/7ret.com\/wp-content\/uploads\/2023\/03\/cpu1.jpg","twitter_misc":{"Escrito por":"C. H.","Tiempo de lectura":"5 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/7ret.com\/index.php\/2023\/03\/16\/comparacion-entre-getx-y-riverpod-en-flutter-ejemplos-de-uso-en-view-y-controller\/#article","isPartOf":{"@id":"https:\/\/7ret.com\/index.php\/2023\/03\/16\/comparacion-entre-getx-y-riverpod-en-flutter-ejemplos-de-uso-en-view-y-controller\/"},"author":{"name":"C. H.","@id":"https:\/\/7ret.com\/#\/schema\/person\/da40a9548fc342444e3bc2e02737e757"},"headline":"Comparaci\u00f3n entre GetX y Riverpod en Flutter: Ejemplos de uso en View y Controller","datePublished":"2023-03-15T23:47:22+00:00","dateModified":"2023-03-16T00:26:26+00:00","mainEntityOfPage":{"@id":"https:\/\/7ret.com\/index.php\/2023\/03\/16\/comparacion-entre-getx-y-riverpod-en-flutter-ejemplos-de-uso-en-view-y-controller\/"},"wordCount":493,"image":{"@id":"https:\/\/7ret.com\/index.php\/2023\/03\/16\/comparacion-entre-getx-y-riverpod-en-flutter-ejemplos-de-uso-en-view-y-controller\/#primaryimage"},"thumbnailUrl":"https:\/\/7ret.com\/wp-content\/uploads\/2023\/03\/cpu1.jpg","articleSection":["DART","FLUTTER","PROGRAMACI\u00d3N"],"inLanguage":"es"},{"@type":"WebPage","@id":"https:\/\/7ret.com\/index.php\/2023\/03\/16\/comparacion-entre-getx-y-riverpod-en-flutter-ejemplos-de-uso-en-view-y-controller\/","url":"https:\/\/7ret.com\/index.php\/2023\/03\/16\/comparacion-entre-getx-y-riverpod-en-flutter-ejemplos-de-uso-en-view-y-controller\/","name":"Comparaci\u00f3n entre GetX y Riverpod en Flutter: Ejemplos de uso en View y Controller - 7ret Software","isPartOf":{"@id":"https:\/\/7ret.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/7ret.com\/index.php\/2023\/03\/16\/comparacion-entre-getx-y-riverpod-en-flutter-ejemplos-de-uso-en-view-y-controller\/#primaryimage"},"image":{"@id":"https:\/\/7ret.com\/index.php\/2023\/03\/16\/comparacion-entre-getx-y-riverpod-en-flutter-ejemplos-de-uso-en-view-y-controller\/#primaryimage"},"thumbnailUrl":"https:\/\/7ret.com\/wp-content\/uploads\/2023\/03\/cpu1.jpg","datePublished":"2023-03-15T23:47:22+00:00","dateModified":"2023-03-16T00:26:26+00:00","author":{"@id":"https:\/\/7ret.com\/#\/schema\/person\/da40a9548fc342444e3bc2e02737e757"},"description":"\u00bfBuscas una forma eficiente de manejar el estado en tus aplicaciones Flutter? Presentamos una comparaci\u00f3n entre GetX y Riverpod con ejemplos.","breadcrumb":{"@id":"https:\/\/7ret.com\/index.php\/2023\/03\/16\/comparacion-entre-getx-y-riverpod-en-flutter-ejemplos-de-uso-en-view-y-controller\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/7ret.com\/index.php\/2023\/03\/16\/comparacion-entre-getx-y-riverpod-en-flutter-ejemplos-de-uso-en-view-y-controller\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/7ret.com\/index.php\/2023\/03\/16\/comparacion-entre-getx-y-riverpod-en-flutter-ejemplos-de-uso-en-view-y-controller\/#primaryimage","url":"https:\/\/7ret.com\/wp-content\/uploads\/2023\/03\/cpu1.jpg","contentUrl":"https:\/\/7ret.com\/wp-content\/uploads\/2023\/03\/cpu1.jpg","width":512,"height":512},{"@type":"BreadcrumbList","@id":"https:\/\/7ret.com\/index.php\/2023\/03\/16\/comparacion-entre-getx-y-riverpod-en-flutter-ejemplos-de-uso-en-view-y-controller\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Portada","item":"https:\/\/7ret.com\/"},{"@type":"ListItem","position":2,"name":"Comparaci\u00f3n entre GetX y Riverpod en Flutter: Ejemplos de uso en View y Controller"}]},{"@type":"WebSite","@id":"https:\/\/7ret.com\/#website","url":"https:\/\/7ret.com\/","name":"7ret Software","description":"The Art of Coding","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/7ret.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Person","@id":"https:\/\/7ret.com\/#\/schema\/person\/da40a9548fc342444e3bc2e02737e757","name":"C. H.","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/secure.gravatar.com\/avatar\/4df3c28219e56a7b6c01b95b6e775c52edcb4eccfc976161efd745a8801b821d?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/4df3c28219e56a7b6c01b95b6e775c52edcb4eccfc976161efd745a8801b821d?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/4df3c28219e56a7b6c01b95b6e775c52edcb4eccfc976161efd745a8801b821d?s=96&d=mm&r=g","caption":"C. H."},"url":"https:\/\/7ret.com\/index.php\/author\/cesar2admin\/"}]}},"author_meta":{"display_name":"C. H.","author_link":"https:\/\/7ret.com\/index.php\/author\/cesar2admin\/"},"featured_img":"https:\/\/7ret.com\/wp-content\/uploads\/2023\/03\/cpu1-300x300.jpg","coauthors":[],"tax_additional":{"categories":{"linked":["<a href=\"https:\/\/7ret.com\/index.php\/category\/programacion\/dart\/\" class=\"advgb-post-tax-term\">DART<\/a>","<a href=\"https:\/\/7ret.com\/index.php\/category\/programacion\/flutter\/\" class=\"advgb-post-tax-term\">FLUTTER<\/a>","<a href=\"https:\/\/7ret.com\/index.php\/category\/programacion\/\" class=\"advgb-post-tax-term\">PROGRAMACI\u00d3N<\/a>"],"unlinked":["<span class=\"advgb-post-tax-term\">DART<\/span>","<span class=\"advgb-post-tax-term\">FLUTTER<\/span>","<span class=\"advgb-post-tax-term\">PROGRAMACI\u00d3N<\/span>"]}},"comment_count":"0","relative_dates":{"created":"Publicado 4 a\u00f1os hace","modified":"Actualizado 4 a\u00f1os hace"},"absolute_dates":{"created":"Publicado el 16 marzo, 2023","modified":"Actualizado el 16 marzo, 2023"},"absolute_dates_time":{"created":"Publicado el 16 marzo, 2023 12:47 am","modified":"Actualizado el 16 marzo, 2023 1:26 am"},"featured_img_caption":"","series_order":"","_links":{"self":[{"href":"https:\/\/7ret.com\/index.php\/wp-json\/wp\/v2\/posts\/964","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/7ret.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/7ret.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/7ret.com\/index.php\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/7ret.com\/index.php\/wp-json\/wp\/v2\/comments?post=964"}],"version-history":[{"count":3,"href":"https:\/\/7ret.com\/index.php\/wp-json\/wp\/v2\/posts\/964\/revisions"}],"predecessor-version":[{"id":973,"href":"https:\/\/7ret.com\/index.php\/wp-json\/wp\/v2\/posts\/964\/revisions\/973"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/7ret.com\/index.php\/wp-json\/wp\/v2\/media\/965"}],"wp:attachment":[{"href":"https:\/\/7ret.com\/index.php\/wp-json\/wp\/v2\/media?parent=964"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/7ret.com\/index.php\/wp-json\/wp\/v2\/categories?post=964"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/7ret.com\/index.php\/wp-json\/wp\/v2\/tags?post=964"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}