Manejo de estados en Flatter, 공급업체
El código de esta guía se lo puede encontrar en GitHub.
삼면체 / 진동 상태 관리 프레젠테이션
Manejo de estados en flatter 회사
중요했어
La rama provider es La que tiene La implementación de esta guía.
라마 마스터 tiene el código base de La aplicación.
La aplicaci ón cuenta con tres 원경:
Índice
Vistas
Instalar 공급업체
https://pub.dev/packages/provider
Para este ejemplo se ha utilizado la versión
4.3.2+2
공공 규범.아마르dependencies:
provider: ^4.3.2+2
공급자para nombre de usuario
user_제공 프로그램.쏜살같이 달리다
import 'package:flutter/material.dart';
class UserProvider with ChangeNotifier {
String _username = 'Guest';
String get username => _username;
void onChange(value) {
_username = value;
notifyListeners();
}
}
설명:리브레아 재료를 수입하다.dart ya que se va a usar como mixin ChangeNotifier en la clase UserProvider
import 'package:flutter/material.dart';
Crear la clase 사용자 공급자 y utilizar como mixin la clase ChangeNotifierclass UserProvider with ChangeNotifier {
...
}
Crear una variable privada que va a contener el nombre de usuario,también agregar un getter para que se pueda obtener este valor fuera de la clase UserProvider.String _username = 'Guest';
String get username => _username;
Crear un método que va a actualizar el nombre de usuario y a su vez va a notificiar los cambios.void onChange(value) {
_username = value;
// Notificar los cambios con notifyListeners();
notifyListeners();
}
공급자paracatá 로고
catalog_ 제공 프로그램.쏜살같이 달리다
import 'package:flutter/material.dart';
import 'package:state_management/models/item_model.dart';
class CatalogProvider with ChangeNotifier {
List<ItemModel> _catalog = [];
List<ItemModel> get catalog => _catalog;
void addToCatalog(ItemModel itemModel) {
_catalog.add(itemModel);
notifyListeners();
}
void removeFromCatalog(ItemModel itemModel) {
_catalog.remove(itemModel);
notifyListeners();
}
}
설명:Al igual que con user_ 제공 프로그램.dartes necesario importar la librer ía 재료.dart,pero esta vez también va a ser necesario item_모델.dartyaque se van a usarobjetos de tipo 프로젝트 모델.
import 'package:flutter/material.dart';
import 'package:state_management/models/item_model.dart';
Crear la clase CatalogProvider y utilizar como mixin la clase ChangeNotifierclass CatalogProvider with ChangeNotifier {
...
}
Crear una variable privada que va a contener el listado de items,también agregar un getter para que se pueda obtener este listado fuera de la clase CatalogProvider.List<ItemModel> _catalog = [];
List<ItemModel> get catalog => _catalog;
Crear un método para agregar un nuevo item al listado y a su vez va a notificar los cambios.void addToCatalog(ItemModel itemModel) {
_catalog.add(itemModel);
// Notificar los cambios con notifyListeners();
notifyListeners();
}
Crear otro método para eliminar un newevo item del listado y a su vez va a notificar los cambios.void removeFromCatalog(ItemModel itemModel) {
_catalog.remove(itemModel);
// Notificar los cambios con notifyListeners();
notifyListeners();
}
Modificar main。쏜살같이 달리다
import 'package:provider/provider.dart';
import 'package:state_management/providers/catalog_provider.dart';
import 'package:state_management/providers/user_provider.dart';
...
void main() => runApp(
MultiProvider(
providers: [
ChangeNotifierProvider(create: (_) => UserProvider()),
ChangeNotifierProvider(create: (_) => CatalogProvider())
],
child: MyApp(),
),
);
설명:Importar la librer ía 공급업체.dartademás de los archivos catalog_ 공급업체.dart y user_ 제공 프로그램.쏜살같이 달리다
import 'package:provider/provider.dart';
import 'package:state_management/providers/catalog_provider.dart';
import 'package:state_management/providers/user_provider.dart';
el método 원본 수정void main() => runApp(MyApp());
Porque se deben crear los providers el nivel más alto posible en la jerarquía de widgets.void main() => runApp(
// Agregar un MultiProvider ya que se van a utilizar varios providers
MultiProvider(
providers: [
// Crear el CatalogProvider
ChangeNotifierProvider(create: (_) => UserProvider()),
// Crear el UserProvider
ChangeNotifierProvider(create: (_) => CatalogProvider())
],
// Pasar MyApp() como widget hijo
child: MyApp(),
),
);
원경
En esta sección se mostrarálos cambios necesarios a realizar para que las vistas se actualizen usando providers.
사용자쏜살같이 달리다
import 'package:provider/provider.dart';
import 'package:state_management/providers/user_provider.dart';
...
@override
void initState() {
super.initState();
_textEditingController =
TextEditingController(text: context.read<UserProvider>().username);
}
...
final _userProvider = Provider.of<UserProvider>(context);
...
title: Text('User - ${_userProvider.username}'),
...
onChanged: (value) {
_userProvider.onChange(value);
},
설명:Importar la librer ía 공급업체.dart y el archivo user_provider.쏜살같이 달리다
import 'package:provider/provider.dart';
import 'package:state_management/providers/user_provider.dart';
Sobrecribir el métodoinitState
para pasar el nombre de usuario al TextEditingController,esto se hace para tener un valor por default en el campo de texto.@override
void initState() {
super.initState();
// Obtener el nombre de usuario fuera de una vista con
// context.read<UserProvider>().username
_textEditingController =
TextEditingController(text: context.read<UserProvider>().username);
}
Agregar una variable privada en el métodobuild
que contenga UserProviderfinal _userProvider = Provider.of<UserProvider>(context);
Agregar el nombre de Usario al título del AppBar usando_userProvider.username
title: Text('User - ${_userProvider.username}'),
Llamar el métodoonChange
de UserProvider al momento de hacer un cambio en el campo de texto.onChanged: (value) {
_userProvider.onChange(value);
},
카탈로그쏜살같이 달리다
import 'package:provider/provider.dart';
import 'package:state_management/providers/catalog_provider.dart';
...
child: CircleAvatar(
child: Text(
'${context.watch<CatalogProvider>().catalog.length}',
...
@override
Widget build(BuildContext context) {
final _catalogProvider =
Provider.of<CatalogProvider>(context, listen: false);
...
trailing: IconButton(
onPressed: () {
if (items[index].addedToCart) {
_catalogProvider.removeFromCatalog(items[index]);
} else {
_catalogProvider.addToCatalog(items[index]);
}
설명:Importar la librer ía 공급업체 y el archivo catalog_공급업체.쏜살같이 달리다
import 'package:provider/provider.dart';
import 'package:state_management/providers/catalog_provider.dart';
프로젝트 구현context.watch
child: CircleAvatar(
child: Text(
'${context.watch<CatalogProvider>().catalog.length}',
Crear una variable privada de tipo provider,pero creada con el parámetrolisten
en false,ya que se va a utilizar para actualizar datos del provider no para obtenerlos.@override
Widget build(BuildContext context) {
final _catalogProvider =
Provider.of<CatalogProvider>(context, listen: false);
Utilizar_catalogProvider
para remover o agregar items al listado de items.trailing: IconButton(
onPressed: () {
if (items[index].addedToCart) {
_catalogProvider.removeFromCatalog(items[index]);
} else {
_catalogProvider.addToCatalog(items[index]);
}
짐마차쏜살같이 달리다
import 'package:state_management/providers/catalog_provider.dart';
import 'package:state_management/providers/user_provider.dart';
import 'package:provider/provider.dart';
...
@override
Widget build(BuildContext context) {
final _userProvider = Provider.of<UserProvider>(context);
final _catalogProvider = Provider.of<CatalogProvider>(context);
...
child: ListView.builder(
itemCount: _catalogProvider.catalog.length,
itemBuilder: (context, index) => ListTile(
title: Text(
'${_catalogProvider.catalog[index].name}'.toUpperCase(),
style: TextStyle(fontWeight: FontWeight.bold),
),
trailing: Text(
'\$${_catalogProvider.catalog[index].price.toStringAsFixed(2)}',
),
),
),
...
Column(
children: [
CircleAvatar(
child: Text(
getInitials(_userProvider.username).toUpperCase()),
),
Text(
'${_userProvider.username}',
style: TextStyle(
fontWeight: FontWeight.bold,
),
),
],
),
...
Text(
'\$${formatTotal(_catalogProvider.catalog)}',
설명:Importar la librer ía 공급자와 los archivos catalog_ 공급자.dart y user_ 제공 프로그램.쏜살같이 달리다
import 'package:state_management/providers/catalog_provider.dart';
import 'package:state_management/providers/user_provider.dart';
import 'package:provider/provider.dart';
Crear dos variables privadas,para obtener los datos del provider de user y catalog.@override
Widget build(BuildContext context) {
final _userProvider = Provider.of<UserProvider>(context);
final _catalogProvider = Provider.of<CatalogProvider>(context);
현실주의자ListView.builder
child: ListView.builder(
// Actualizar el contador de items.
itemCount: _catalogProvider.catalog.length,
itemBuilder: (context, index) => ListTile(
title: Text(
// Mostrar el nombre del item.
'${_catalogProvider.catalog[index].name}'.toUpperCase(),
style: TextStyle(fontWeight: FontWeight.bold),
),
trailing: Text(
// Mostrar el precio del producto con dos decimales.
'\$${_catalogProvider.catalog[index].price.toStringAsFixed(2)}',
),
),
),
우사리오의 이름이다.Column(
children: [
CircleAvatar(
child: Text(
// Mostrar las iniciales del nombre de usuario
getInitials(_userProvider.username).toUpperCase()),
),
Text(
// Mostrar el nombre de usuario
'${_userProvider.username}',
style: TextStyle(
fontWeight: FontWeight.bold,
),
),
],
),
모든 프로젝트를 실현하다.Text(
'\$${formatTotal(_catalogProvider.catalog)}',
Eso es todo,recuerda que código de esta guía se lo puede encontrar en GitHub.삼면체 / 진동 상태 관리 프레젠테이션
Manejo de estados en flatter 회사
Reference
이 문제에 관하여(Manejo de estados en Flatter, 공급업체), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/marcelo/manejo-de-estados-en-flutter-provider-5dkd텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)