feat(crud)!: make crudbuilder integration more easy by integrating blocbuilder (closes #181)
continuous-integration/drone/pr Build is failing

This commit is contained in:
2023-11-14 14:42:16 +01:00
parent 3a7b7dfd1d
commit 12568b3ada
4 changed files with 294 additions and 255 deletions
@@ -35,91 +35,81 @@ class AdvancedCubitView extends StatelessWidget {
create: (context) =>
UserAdvancedCubit(context.read<CrudRepository<User>>())
..streaming(),
child: Builder(builder: (context) {
return Column(
children: [
BlocBuilder<UserAdvancedCubit, CrudState>(
buildWhen: (previous, current) {
if (current is CrudLoading && current is! CrudReading) {
return false;
}
return true;
},
builder: (context, state) {
return Expanded(
child: CrudBuilder.typed<CrudListLoaded<User?>>(
state: state,
builder: ((context, state) {
return ListView.builder(
itemCount: state.data.length,
itemBuilder: (context, index) {
final user = state.data.elementAt(index);
return ListTile(
title: Text(user?.name ?? 'Error'),
subtitle: Text(user?.email ?? 'Error'),
onTap: () {
context
.read<UserAdvancedCubit>()
.delete((user?.id)!);
},
onLongPress: () {
context.read<UserAdvancedCubit>().update(
UpdateParameters(
id: user?.id ?? '',
raw: {
'email': '${user?.id}@updated.io',
}),
);
},
);
},
);
}),
initialBuilder: (context, state) =>
const Center(child: CircularProgressIndicator()),
loadingBuilder: (context, state) =>
const Center(child: CircularProgressIndicator()),
errorBuilder: (context, state) => Text("Error: $state"),
),
);
},
),
const SizedBox(height: 20),
ElevatedButton(
onPressed: () {
final r = Random().nextInt(1000);
context.read<UserAdvancedCubit>().create(
User(
id: '$r',
name: 'Wyatt $r',
email: '$r@wyattapp.io',
phone: '06$r',
),
child: Builder(
builder: (context) {
return Column(
children: [
Expanded(
child:
CrudBuilder.typed<UserAdvancedCubit, CrudListLoaded<User?>>(
buildWhen: (previous, current) {
if (current is CrudLoading && current is! CrudReading) {
return false;
}
return true;
},
builder: ((context, state) {
return ListView.builder(
itemCount: state.data.length,
itemBuilder: (context, index) {
final user = state.data.elementAt(index);
return ListTile(
title: Text(user?.name ?? 'Error'),
subtitle: Text(user?.email ?? 'Error'),
onTap: () {
context.read<UserAdvancedCubit>().delete((user?.id)!);
},
onLongPress: () {
context.read<UserAdvancedCubit>().update(
UpdateParameters(id: user?.id ?? '', raw: {
'email': '${user?.id}@updated.io',
}),
);
},
);
},
);
},
child: BlocBuilder<UserAdvancedCubit, CrudState>(
buildWhen: (previous, current) {
if (current is CrudLoading && current is! CrudCreating) {
return false;
}
return true;
},
builder: (context, state) {
return state is CrudCreating
? const SizedBox(
width: 20,
height: 20,
child: CircularProgressIndicator(
color: Colors.white,
),
)
: const Text("Create");
},
}),
initialBuilder: (context, state) =>
const Center(child: CircularProgressIndicator()),
loadingBuilder: (context, state) =>
const Center(child: CircularProgressIndicator()),
errorBuilder: (context, state) => Text("Error: $state"),
),
),
),
],
);
}),
const SizedBox(height: 20),
ElevatedButton(
onPressed: () {
final r = Random().nextInt(1000);
context.read<UserAdvancedCubit>().create(
User(
id: '$r',
name: 'Wyatt $r',
email: '$r@wyattapp.io',
phone: '06$r',
),
);
},
child: CrudBuilder.onLoading<UserAdvancedCubit>(
builder: (context, state) {
if (state is CrudCreating) {
return const SizedBox(
width: 20,
height: 20,
child: CircularProgressIndicator(
color: Colors.white,
),
);
}
return null;
},
otherBuilder: (context, state) => const Text("Create"),
),
),
],
);
}
),
),
);
}
@@ -37,51 +37,44 @@ class BasicCubitView extends StatelessWidget {
child: Builder(builder: (context) {
return Column(
children: [
BlocBuilder<UserCubit, CrudState>(
buildWhen: (previous, current) {
if (current is CrudLoading && current is! CrudReading) {
return false;
}
return true;
},
builder: (context, state) {
return Expanded(
child: CrudBuilder.typed<CrudListLoaded<User?>>(
state: state,
builder: ((context, state) {
return ListView.builder(
itemCount: state.data.length,
itemBuilder: (context, index) {
final user = state.data.elementAt(index);
return ListTile(
title: Text(user?.name ?? 'Error'),
subtitle: Text(user?.email ?? 'Error'),
onTap: () {
context
.read<UserCubit>()
.delete(id: (user?.id)!);
},
onLongPress: () {
context.read<UserCubit>().update(
single: UpdateParameters(
id: user?.id ?? '',
raw: {
'email': '${user?.id}@updated.io',
}),
);
},
);
Expanded(
child: CrudBuilder.typed<UserCubit, CrudListLoaded<User?>>(
buildWhen: (previous, current) {
if (current is CrudLoading && current is! CrudReading) {
return false;
}
return true;
},
builder: ((context, state) {
return ListView.builder(
itemCount: state.data.length,
itemBuilder: (context, index) {
final user = state.data.elementAt(index);
return ListTile(
title: Text(user?.name ?? 'Error'),
subtitle: Text(user?.email ?? 'Error'),
onTap: () {
context.read<UserCubit>().delete(id: (user?.id)!);
},
onLongPress: () {
context.read<UserCubit>().update(
single: UpdateParameters(
id: user?.id ?? '',
raw: {
'email': '${user?.id}@updated.io',
}),
);
},
);
}),
initialBuilder: (context, state) =>
const Center(child: CircularProgressIndicator()),
loadingBuilder: (context, state) =>
const Center(child: CircularProgressIndicator()),
errorBuilder: (context, state) => Text("Error: $state"),
),
);
},
},
);
}),
initialBuilder: (context, state) =>
const Center(child: CircularProgressIndicator()),
loadingBuilder: (context, state) =>
const Center(child: CircularProgressIndicator()),
errorBuilder: (context, state) => Text("Error: $state"),
),
),
const SizedBox(height: 20),
ElevatedButton(
@@ -96,48 +89,40 @@ class BasicCubitView extends StatelessWidget {
),
);
},
child: BlocBuilder<UserCubit, CrudState>(
buildWhen: (previous, current) {
if (current is CrudLoading && current is! CrudCreating) {
return false;
}
return true;
},
child: CrudBuilder.onLoading<UserCubit>(
builder: (context, state) {
return state is CrudCreating
? const SizedBox(
width: 20,
height: 20,
child: CircularProgressIndicator(
color: Colors.white,
),
)
: const Text("Create");
if (state is CrudCreating) {
return const SizedBox(
width: 20,
height: 20,
child: CircularProgressIndicator(
color: Colors.white,
),
);
}
return null;
},
otherBuilder: (context, state) => const Text("Create"),
),
),
ElevatedButton(
onPressed: () {
context.read<UserCubit>().read();
},
child: BlocBuilder<UserCubit, CrudState>(
buildWhen: (previous, current) {
if (current is CrudLoading && current is! CrudReading) {
return false;
}
return true;
},
child: CrudBuilder.onLoading<UserCubit>(
builder: (context, state) {
return state is CrudReading
? const SizedBox(
width: 20,
height: 20,
child: CircularProgressIndicator(
color: Colors.white,
),
)
: const Text("Read");
if (state is CrudReading) {
return const SizedBox(
width: 20,
height: 20,
child: CircularProgressIndicator(
color: Colors.white,
),
);
}
return null;
},
otherBuilder: (context, state) => const Text("Read"),
),
),
const SizedBox(height: 20),
@@ -37,51 +37,47 @@ class StreamingCubitView extends StatelessWidget {
child: Builder(builder: (context) {
return Column(
children: [
BlocBuilder<UserStreamingCubit, CrudState>(
buildWhen: (previous, current) {
if (current is CrudLoading && current is! CrudReading) {
return false;
}
return true;
},
builder: (context, state) {
return Expanded(
child: CrudBuilder.typed<CrudListLoaded<User?>>(
state: state,
builder: ((context, state) {
return ListView.builder(
itemCount: state.data.length,
itemBuilder: (context, index) {
final user = state.data.elementAt(index);
return ListTile(
title: Text(user?.name ?? 'Error'),
subtitle: Text(user?.email ?? 'Error'),
onTap: () {
context
.read<UserStreamingCubit>()
.delete(id: (user?.id)!);
},
onLongPress: () {
context.read<UserStreamingCubit>().update(
single: UpdateParameters(
id: user?.id ?? '',
raw: {
'email': '${user?.id}@updated.io',
}),
);
},
);
Expanded(
child: CrudBuilder.typed<UserStreamingCubit,
CrudListLoaded<User?>>(
buildWhen: (previous, current) {
if (current is CrudLoading && current is! CrudReading) {
return false;
}
return true;
},
builder: ((context, state) {
return ListView.builder(
itemCount: state.data.length,
itemBuilder: (context, index) {
final user = state.data.elementAt(index);
return ListTile(
title: Text(user?.name ?? 'Error'),
subtitle: Text(user?.email ?? 'Error'),
onTap: () {
context
.read<UserStreamingCubit>()
.delete(id: (user?.id)!);
},
onLongPress: () {
context.read<UserStreamingCubit>().update(
single: UpdateParameters(
id: user?.id ?? '',
raw: {
'email': '${user?.id}@updated.io',
}),
);
},
);
}),
initialBuilder: (context, state) =>
const Center(child: CircularProgressIndicator()),
loadingBuilder: (context, state) =>
const Center(child: CircularProgressIndicator()),
errorBuilder: (context, state) => Text("Error: $state"),
),
);
},
},
);
}),
initialBuilder: (context, state) =>
const Center(child: CircularProgressIndicator()),
loadingBuilder: (context, state) =>
const Center(child: CircularProgressIndicator()),
errorBuilder: (context, state) => Text("Error: $state"),
),
),
const SizedBox(height: 20),
ElevatedButton(
@@ -96,24 +92,20 @@ class StreamingCubitView extends StatelessWidget {
),
);
},
child: BlocBuilder<UserStreamingCubit, CrudState>(
buildWhen: (previous, current) {
if (current is CrudLoading && current is! CrudCreating) {
return false;
}
return true;
},
child: CrudBuilder.onLoading<UserStreamingCubit>(
builder: (context, state) {
return state is CrudCreating
? const SizedBox(
width: 20,
height: 20,
child: CircularProgressIndicator(
color: Colors.white,
),
)
: const Text("Create");
if (state is CrudCreating) {
return const SizedBox(
width: 20,
height: 20,
child: CircularProgressIndicator(
color: Colors.white,
),
);
}
return null;
},
otherBuilder: (context, state) => const Text("Create"),
),
),
],