Я использую Json сгенерированные данные для отображения на начальном этапе. Теперь я хочу получить данные из базы данных Firebase в реальном времени. Я добавил все плагины и коды, которые Google предоставляет при регистрации приложения на firebase. Я хочу получить данные из firebase в список, я много пробовал, но не смог подключиться, я новичок во флаттере, но сумел сделать код , После исследования я получил код, чтобы связать FireBase с флаттером, но запутался, чтобы интегрировать его с моим кодом, PLZ, помогите мне.
База данных Firebase: - Информация о базе данных
Код подключения я получил: -
static List<wanted> allcriminals() {
var lstOfCities = new List<wanted>();
Future <List<User>> queryUsers() async{
return FirebaseDatabase.instance
.reference()
.child('main db/criminal db');
}
queryUsers().then((query){
query.once().then((snapshot) {
var result = snapshot.value.values as Iterable;
for (var item in result) {
print(result);
lstOfCities.add(new wanted(
name: item["criminal name"],
image: "hii",
crimes_commited: item["crimes committed"],
seen_at_location: item["seen at location"]
));
}
});
});
return lstOfCities;
}
Код, который я хочу интегрировать с: -
import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;
import 'package:flutter/painting.dart';
import 'dart:convert';
import 'dart:async';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Criminal List',
debugShowCheckedModeBanner: false,
theme: ThemeData(
primarySwatch: Colors.orange,
),
home: MyHomePage(title: 'Criminal List'),
);
}
}
class Contact{
Contact({this.name, this.email});
final String name;
final String email;
}
class MyHomePage extends StatefulWidget {
MyHomePage({Key key, this.title}) : super(key: key);
final String title;
@override
_MyHomePageState createState() => _MyHomePageState();
}
//api
class _MyHomePageState extends State<MyHomePage> {
Future <List<User>> _getUsers()async{
var data = await http.get("http://www.json-generator.com/api/json/get/cggcNzKhua?indent=2");
var jsonData = json.decode(data.body);
List<User> users = [];
for (var u in jsonData){
User user = User(u["index"],u["about"],u["name"],u["email"],u["picture"], u['gender'], u['age'],u['registered'], u['eyeColor'], u['phone'], u['address'], u['longitude'], u['latitude']);
users.add(user);
}
print(users.length);
return users;
}
@override
Widget build(BuildContext context) {
return new Scaffold(
appBar: new AppBar(
title: new Text(widget.title),
),
body: Container(
child: FutureBuilder(
future: _getUsers(),
builder: (BuildContext context,AsyncSnapshot snapshot){
print(snapshot.data);
if(snapshot.data == null){
return Container(
child: Center(
child: Text("Loading..."),
),
);
} else {
return ListView.builder(
itemCount: snapshot.data.length,
itemBuilder: (BuildContext content, int index) {
return ListTile(
leading: CircleAvatar(
backgroundImage: NetworkImage(
snapshot.data[index].picture
),
),
title: Text(snapshot.data[index].name),
subtitle: Text(snapshot.data[index].email),
onTap: (){
Navigator.push(context,
new MaterialPageRoute(builder: (context)=> DetailPage(snapshot.data[index]))
);
},
);
},
);
}
}
),
),
);
}
}
class DetailPage extends StatelessWidget {
final User user;
DetailPage(this.user);
@override
Widget build(BuildContext context) {
final profile = Hero (
tag: 'hero',
child: Padding(padding: EdgeInsets.all(16.0),
child: CircleAvatar(
radius: 72.0,
backgroundColor: Colors.transparent,
backgroundImage: NetworkImage(user.picture),
),
),
);
final name = Padding(
padding: EdgeInsets.all(8.0),
child: Text(
user.name,
style: TextStyle(fontSize: 28.0, color: Colors.black),
),
);
final email = Padding(
padding: EdgeInsets.all(8.0),
child: Text(
user.email,
style: TextStyle(fontSize: 18.0, color: Colors.black),
),
);
final about = Padding(
padding: EdgeInsets.all(8.0),
child: Text(
user.about,
style: TextStyle(fontSize: 14.0, color: Colors.black),
),
);
final gender = Padding(
padding: EdgeInsets.all(8.0),
child: Text(
user.gender,
style: TextStyle(fontSize: 14.0, color: Colors.black),
),
);
final age = Padding(
padding: EdgeInsets.all(8.0),
child: Text(
user.age.toString(),
style: TextStyle(fontSize: 14.0, color: Colors.black),
),
);
final registered = Padding(
padding: EdgeInsets.all(8.0),
child: Text(
user.registered,
style: TextStyle(fontSize: 14.0, color: Colors.black),
),
);
final eyeColor = Padding(
padding: EdgeInsets.all(8.0),
child: Text(
user.eyeColor,
style: TextStyle(fontSize: 14.0, color: Colors.black),
),
);
final phone = Padding(
padding: EdgeInsets.all(8.0),
child: Text(
user.phone,
style: TextStyle(fontSize: 14.0, color: Colors.black),
),
);
final address = Padding(
padding: EdgeInsets.all(8.0),
child: Text(
user.address,
style: TextStyle(fontSize: 14.0, color: Colors.black),
),
);
final longitude = Padding(
padding: EdgeInsets.all(8.0),
child: Text(
user.longitude.toString(),
style: TextStyle(fontSize: 14.0, color: Colors.black),
),
);
final latitude = Padding(
padding: EdgeInsets.all(8.0),
child: Text(
user.latitude.toString(),
style: TextStyle(fontSize: 14.0, color: Colors.black),
),
);
final body = Container(
width: MediaQuery.of(context).size.width,
padding: EdgeInsets.all(28.0),
decoration: BoxDecoration(
gradient: LinearGradient(colors: [
Colors.orangeAccent,
Colors.yellow,
]),
),
child: SingleChildScrollView(
child: Column(
children: <Widget>[profile, name,email, about, gender, age, registered, eyeColor, phone, address, longitude, latitude],
)),
);
return Scaffold(
appBar: AppBar(
title: Text(user.name),
),
body: body,
);
}
}//data
class User {
final int index;
final String name;
final String email;
final String about;
final String picture;
final String gender;
final int age;
final String registered;
final String eyeColor;
final String phone;
final String address;
final double longitude;
final double latitude;
User (this.index,this.about, this.name, this.email, this.picture, this.gender,this.age, this.registered, this.eyeColor, this.phone, this.address, this.longitude, this.latitude);
}