#firebase #flutter
#firebase #flutter
Вопрос:
Я создаю страницу поиска, и я не знаю, как я могу управлять для пользователя, когда они находят имя, которое существует, чтобы иметь возможность прикоснуться к нему и перенаправляться на эту конкретную страницу профиля пользователя, который они нашли. Вот мой код:
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:flappy_search_bar/flappy_search_bar.dart';
import 'package:flutter/material.dart';
import 'UserProfiles.dart';
import 'viewProfiles.dart';
class Searchbar extends StatefulWidget {
@override
SearchBarState createState() => SearchBarState();
}
class SearchBarState extends State<Searchbar> {
TextEditingController textEditingController = TextEditingController();
final database = Firestore.instance;
String searchString;
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.white,
body: Container(
child: Column(
children: <Widget>[
Padding(
padding: EdgeInsets.only(top: 20, right: 280),
child: IconButton(
icon: Icon(Icons.arrow_back),
iconSize: 30.0,
color: Colors.black,
onPressed: () => Navigator.pop(context),
),
),
TopText(),
Expanded(
child: Column(
children: <Widget>[
Padding(
padding: const EdgeInsets.only(
top: 40.0, left: 20.0, right: 20.0),
child: Container(
child: TextField(
onChanged: (val) {
setState(() {
searchString = val.toLowerCase();
});
},
controller: textEditingController,
decoration: InputDecoration(
suffixIcon: IconButton(
icon: Icon(Icons.clear),
onPressed: () => textEditingController.clear()),
hintText: " Search company name here ",
hintStyle: TextStyle(
fontFamily: 'Helvetica',
color: Colors.blueGrey)),
),
),
),
Expanded(
child: StreamBuilder<QuerySnapshot>(
stream: (searchString == null || searchString.trim() == '')
? Firestore.instance.collection('Users').snapshots()
: Firestore.instance
.collection('Users')
.where('name', isEqualTo: searchString)
.snapshots(),
builder: (context, snapshot) {
if (snapshot.hasError) {
return Text('We got an error ${snapshot.error}');
}
switch (snapshot.connectionState) {
case ConnectionState.waiting:
return SizedBox(
child: Center(
child: CircularProgressIndicator(),
),
);
case ConnectionState.none:
return Text('Oops no data present');
case ConnectionState.done:
return Text('We are done');
default:
return new ListView(
children: snapshot.data.documents
.map((DocumentSnapshot document) {
return new ListTile(
title: Text(document.data['name']),
);
}).toList());
}
},
)),
],
),
)
],
)));
}
}
class TopText extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Padding(
padding: EdgeInsets.only(top: 40, left: 20, right: 20),
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Text(
"Hey there,n we can help you find👀 ",
style: TextStyle(
fontWeight: FontWeight.bold,
fontFamily: 'Helvetica',
fontSize: 24),
),
],
)
],
));
}
}
И вот то, что я использовал раньше
return GestureDetector(
onTap: () {
// Navigator.push(context, new MaterialPageRoute(builder: (_)=>ViewUserPage()));
Navigator.push(
context,
new MaterialPageRoute(
builder: (_) => StoryProfiles(
UserProfiles(
'${snapshot.data.documents[index].data['id']}',
snaps.data['name'],
snaps.data['avatarUrl'],
snaps.data['address'],
snapshot.data.documents[index]
.data['categoryName']))));
},
но я не знаю, как я могу добавить его сюда..