Cześć. Ostatnio zacząłem robić projekt we Flutterze. Chciałbym zrobić aplikację do kontrolowania domu zdalnie. Wymyśliłem już, że będę ją kontrolować poprzez baze Firebase Realtime db. Do teraz nawet jakoś mi szło, ale w najważniejszym momencie się zgubiłem. Mianowicie potrzebuję pobierać dane z wyżej wspomnianej bazy, następnie tworzyć z nich listę oraz wyświetlać na ekranie w StaggeredGridView. Chciałbym również móc kontrolować stan lampki oraz w przyszłości jej jasność.
W tym momencie udało mi się utworzyć taki model:
import 'package:firebase_database/firebase_database.dart';
class ApplianceBoxModel {
ApplianceBoxModel({
this.id,
this.name,
this.state,
this.wifiSsid,
});
String id;
String name;
bool state;
String wifiSsid;
ApplianceBoxModel.fromSnapshot(DataSnapshot snapshot)
: id = snapshot.key,
name = snapshot.value['name'],
state = snapshot.value['state'],
wifiSsid = snapshot.value['wifi_ssid'];
toJson() {
return {
"name": name,
"state": state,
"wifi_ssid": wifiSsid,
};
}
}
No i tutaj się pogubiłem. W jaki sposób mogę ściągać dane do tej listy?
Do tej pory używałem "stałej" listy:
static List<ApplianceBoxModel> getItems() {
return [
ApplianceBoxModel(
name: 'Lampka_1',
state: false,
),
ApplianceBoxModel(
name: 'Lampka_2',
state: false,
),
ApplianceBoxModel(
name: 'Lampka_3',
state: false,
),
ApplianceBoxModel(
name: 'Lampka_4',
state: false,
),
ApplianceBoxModel(
name: 'Lampka_5',
state: false,
),
ApplianceBoxModel(
name: 'Lampka_6',
state: false,
),
];
}
grid_view.dart
class MyGridView extends StatefulWidget {
@override
_MyGridViewState createState() => _MyGridViewState();
}
class _MyGridViewState extends State<MyGridView> {
List<ApplianceBoxModel> applianceBoxModel = Utils.getItems();
bool zmienna = false;
@override
Widget build(BuildContext context) {
final DatabaseReference _dbref =
FirebaseDatabase.instance.reference().child("testowe");
return Container(
margin: EdgeInsets.fromLTRB(18, 20, 18, 18),
child: StreamBuilder(
stream: _dbref.onValue,
builder: (context, snapshot) {
if (snapshot.hasData &&
!snapshot.hasError &&
snapshot.data.snapshot.value != null) {
print("DATA: ${snapshot.data.snapshot.value.toString()}");
//_dbref.push().set({"name": "janek", "surname": "kowalski"});
}
return Container(
child: StaggeredGridView.countBuilder(
physics: BouncingScrollPhysics(),
crossAxisCount: 3,
itemCount: applianceBoxModel.length,
itemBuilder: (BuildContext context, int index) {
return ApplianceBoxState(
applianceBoxModel: applianceBoxModel[index],
onDeviceCardClick: () {},
isSwitched: zmienna,
);
},
staggeredTileBuilder: (int index) =>
new StaggeredTile.extent(1, 120),
mainAxisSpacing: 15,
crossAxisSpacing: 15,
),
);
},
));
}
}