- import 'package:client/additemform/bloc/additem_bloc.dart';
- import 'package:flutter/foundation.dart';
- import 'package:flutter/material.dart';
- import 'package:flutter/rendering.dart';
- import 'package:flutter_bloc/flutter_bloc.dart';
- import 'package:formz/formz.dart';
- class AddItemForm extends StatelessWidget {
- const AddItemForm({super.key});
- @override
- Widget build(BuildContext context) {
- return BlocListener<AddItemFormBloc, AddItemFormState>(
- listener: (context,state){
- if(state.status.isFailure){
- ScaffoldMessenger.of(context)
- ..hideCurrentSnackBar()
- ..showSnackBar(
- const SnackBar(content: Text('Unable to create Item')),
- );
- }
- },
- child: Center(
- child: Container(
- color: Colors.blue,
- child: Column(
- mainAxisAlignment: MainAxisAlignment.center,
- children: [
- Container(
- width: 300,
- child: _ProductName()
- ),
- const Padding(padding: EdgeInsets.all(7)),
- Container(
- width: 300,
- child: _ProductDescription()
- ),
- const Padding(padding: EdgeInsets.all(7)),
- Container(
- width: 300,
- child: _ProductLocation()
- ),
- const Padding(padding: EdgeInsets.all(7)),
- Container(
- width: 300,
- child: _ConditionField()
- ),
- const Padding(padding: EdgeInsets.all(7)),
- Container(
- width: 300,
- child: _CategoryField(),
- ),
- const Padding(padding: EdgeInsets.all(7)),
- Container(
- width: 300,
- child: _imageField()
- ),
- const Padding(padding: EdgeInsets.all(7)),
- _AddItemButton(),
- const Padding(padding: EdgeInsets.all(7)),
- Row( // Wrap Icon in a Row widget
- mainAxisAlignment: MainAxisAlignment.center,
- children: [
- Icon(
- Icons.add_box,
- color: Color.fromRGBO(92, 118, 95, 1),
- size: 30.0,
- ),
- SizedBox(
- width: 20,
- ),
- ],
- ),
- ],
- ),
- ),
- ),
- );
- }
- }
- class _ProductName extends StatelessWidget{
- Widget build(BuildContext context){
- return BlocBuilder<AddItemFormBloc,AddItemFormState>(
- buildWhen: (previous,current)=> previous.title != current.title,
- builder:(context,state){
- return TextField(
- key: const Key('AddItemForm_ productname_textfield'),
- onChanged: (title) =>
- context.read<AddItemFormBloc>().add(AddItemFormTitleChanged(title)),
- decoration: InputDecoration(
- labelText: 'Product Title',
- labelStyle: TextStyle(color: Colors.black),
- errorText: state.title.displayError !=null? 'invalid title':null,
- ),
- );
- }
- );
- }
- }
- class _ProductDescription extends StatelessWidget{
- Widget build(BuildContext context){
- return BlocBuilder<AddItemFormBloc,AddItemFormState>(
- buildWhen: (previous,current) => previous.description != current.description,
- builder: (context,state){
- return TextField(
- key: const Key('AddItemForm_ProductDescription_textfield'),
- onChanged: (description)=>
- context.read<AddItemFormBloc>().add(AddItemFormDescriptionChanged(description)),
- decoration: InputDecoration(
- labelStyle: TextStyle(color: Colors.black),
- labelText: 'Product Description',
- errorText:
- state.description.displayError != null? 'invalid description' : null,
- ),
- );
- }
- );
- }
- }
- class _ProductLocation extends StatelessWidget{
- Widget build(BuildContext context){
- return BlocBuilder<AddItemFormBloc,AddItemFormState>(
- buildWhen: (previous,current) => previous.location !=current.location,
- builder:(context,state){
- return TextField(
- key: const Key("AddItemForm_ProductLocation_textfield"),
- onChanged:(location)=>
- context.read()<AddItemFormBloc>().add(AddItemLocationChanged(location)),
- decoration: InputDecoration(
- labelStyle: TextStyle(color:Colors.black),
- labelText: 'Product Locaation',
- errorText:
- state.location.displayError !=null? 'invalid location': null,
- ),
- );
- }
- );
- }
- }
- class _CategoryField extends StatelessWidget{
- Widget build(BuildContext context){
- return BlocBuilder<AddItemFormBloc,AddItemFormState>(
- buildWhen: (previous,current)=> previous.category != current.category,
- builder: (context,state){
- return TextField(
- key: const Key('AddItemForm_Category_textField'),
- onChanged: (category) =>
- context.read<AddItemFormBloc>().add(AddItemCategoryChanged(category)),
- decoration: InputDecoration(
- labelText: 'Category',
- labelStyle: TextStyle(
- color: Colors.black),
- errorText:
- state.category.displayError != null? 'invalid category': null,
- ),
- );
- }
- );
- }
- }
- class _ConditionField extends StatelessWidget{
- Widget build(BuildContext context){
- return BlocBuilder<AddItemFormBloc,AddItemFormState>(
- buildWhen:(previous,current)=> previous.condition != current.condition,
- builder:(context,state){
- return TextField(
- key: const Key('AddItemForm_condition_textField'),
- onChanged: (condition)=>
- context.read<AddItemFormBloc>().add(AddItemConditionChanged(condition)),
- decoration: InputDecoration(
- labelText: 'condition field',
- labelStyle: TextStyle(color: Colors.black),
- errorText:
- state.condition.displayError !=null ? 'invalid condition': null,
- ),
- );
- }
- );
- }
- }
- class _imageField extends StatelessWidget{
- Widget build(BuildContext context){
- return BlocBuilder<AddItemFormBloc, AddItemFormState>(
- buildWhen: (previous,current) => previous.imageId != current.imageId,
- builder: (context,state){
- return TextField(
- key:const Key('AdditemForm_Image_textField'),
- onChanged: (image)=>
- context.read<AddItemFormBloc>().add(AddItemImageChanged(image)),
- decoration: InputDecoration(
- labelText: 'Image field',
- labelStyle: TextStyle(color: Colors.black),
- errorText:
- state.imageId.displayError !=null ? 'invalid image': null,
- ),
- );
- }
- );
- }
- }
- class _AddItemButton extends StatelessWidget{
- Widget build(BuildContext context){
- return BlocBuilder<AddItemFormBloc, AddItemFormState>(
- builder:(context,state){
- return state.status.isInProgress
- ? const CircularProgressIndicator()
- : ElevatedButton(
- key: const Key('AddItemForm_continue_raisedButton'),
- onPressed: state.isValid
- ?(){
- context.read<AddItemFormBloc>().add(const AddItemFormSubmitted());
- }
- : null,
- child: const Text('Add Item'),
- );
- }
- );
- }
- }
[text] ItemForm.dart
Viewer
*** This page was generated with the meta tag "noindex, nofollow". This happened because you selected this option before saving or the system detected it as spam. This means that this page will never get into the search engines and the search bot will not crawl it. There is nothing to worry about, you can still share it with anyone.
Editor
You can edit this paste and save as new: