Using the bloc pattern for select¶
A SelectBloc is available to use the bloc pattern.
Select bloc¶
import 'package:flutter/material.dart';
import 'package:sqlcool/sqlcool.dart';
class _PageSelectBlocState extends State<PageSelectBloc> {
SelectBloc bloc;
@override
void initState() {
super.initState();
this.bloc = SelectBloc(
table: "items", orderBy: "name", verbose: true);
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("My app"),
),
body: StreamBuilder<List<Map>>(
stream: bloc.items,
builder: (BuildContext context, AsyncSnapshot snapshot) {
if (snapshot.hasData) {
// the select query has not found anything
if (snapshot.data.length == 0) {
return Center(
child: Text(
"No data. Use the + in the appbar to insert an item"),
);
}
// the select query has results
return ListView.builder(
itemCount: snapshot.data.length,
itemBuilder: (BuildContext context, int index) {
var item = snapshot.data[index];
return ListTile(
title: GestureDetector(
child: Text(item["name"]),
onTap: () => print("Action"),
),
);
});
} else {
// the select query is still running
return CircularProgressIndicator();
}
}),
);
}
}
class PageSelectBloc extends StatefulWidget {
@override
_PageSelectBlocState createState() => _PageSelectBlocState();
}
SelectBloc
class:
Required parameter:
table: | String name of the table, required |
---|
Optional parameters:
select: | String the select sql clause |
---|---|
where: | String the where sql clause |
joinTable: | String join table name |
joinOn: | String join on sql clause |
orderBy: | String the sql order_by clause |
limit: | int the sql limit clause |
offset: | int the sql offset clause |
reactive: | bool if true the select bloc will react to database changes. Defaults to false |
verbose: | bool true or false |
database: | Db the database to use: default is the default database |
Join queries¶
@override
void initState() {
super.initState();
this.bloc = SelectBloc(table: "product", offset: 10, limit: 20,
select: "id, name, price, category.name as category_name",
joinTable: "category",
joinOn: "product.category=category.id");
}