android - 搜索用户不在 Flutter 中工作,如何解决?
问题描述
我正在创建一个社交媒体应用程序颤动,因为我正在尝试向我的 Flutter 应用程序添加搜索功能,代码中一切正常,没有显示错误,但是当我在搜索应用程序屏幕上搜索 ProfileName 时,构建后没有显示结果APK。
我附上了 search.dart 和 user.dart 文件的代码。请帮帮我,我被困在这里......
搜索.dart
import 'package:Gupshup/models/user.dart';
import 'package:Gupshup/pages/HomePage.dart';
import 'package:Gupshup/widgets/ProgressWidget.dart';
import 'package:cached_network_image/cached_network_image.dart';
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:flutter/material.dart';
class SearchPage extends StatefulWidget {
@override
_SearchPageState createState() => _SearchPageState();}
class _SearchPageState extends State<SearchPage>
with AutomaticKeepAliveClientMixin<SearchPage> {
TextEditingController searchTextEditingController =
TextEditingController();
Future<QuerySnapshot> futureSearchResults;
emptyTheTextFormField() {
searchTextEditingController.clear();}
controlSearching(String str) {
Future<QuerySnapshot> allUsers = usersReference
.where("profileName", isGreaterThanOrEqualTo: str)
.getDocuments();
setState(() {
futureSearchResults = allUsers;
});
}
AppBar searchPageHeader() {
return AppBar(
backgroundColor: Colors.black,
title: TextFormField(
style: TextStyle(fontSize: 18.0, color: Colors.white),
controller: searchTextEditingController,
decoration: InputDecoration(
hintText: "Search here....",
hintStyle: TextStyle(color: Colors.grey),
enabledBorder: UnderlineInputBorder(
borderSide: BorderSide(color: Colors.grey),
),
focusedBorder:
UnderlineInputBorder(borderSide: BorderSide(color: Colors.white)),
filled: true,
prefixIcon: Icon(
Icons.person_pin,
color: Colors.white,
size: 30.0,
),
suffixIcon: IconButton(
icon: Icon(Icons.clear),
onPressed: emptyTheTextFormField,
),
),
onFieldSubmitted: controlSearching,
),
);
}
Container displayNoSearchResultScreen() {
final Orientation orientation = MediaQuery.of(context).orientation;
return Container(
child: Center(
child: ListView(
shrinkWrap: true,
children: <Widget>[
Icon(
Icons.group,
color: Colors.grey,
size: 200.0,
),
Text(
"Search Users",
textAlign: TextAlign.center,
style: TextStyle(
color: Colors.white,
fontWeight: FontWeight.w500,
fontSize: 65.0),
),
],
),
),
);
}
displayUsersFoundScreen() {
FutureBuilder(
future: futureSearchResults,
builder: (context, dataSnapshot) {
if (!dataSnapshot.hasData) {
return circularProgress();
}
List<UserResult> searchUsersResult = [];
dataSnapshot.data.documents.forEach((document) {
User eachUser = User.fromDocument(document);
UserResult userResult = UserResult(eachUser);
searchUsersResult.add(userResult);
});
return ListView(children: searchUsersResult);
},
);
}
bool get wantKeepAlive => true;
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.black,
appBar: searchPageHeader(),
body: futureSearchResults == null
? displayNoSearchResultScreen()
: displayUsersFoundScreen(),
);
}
}
class UserResult extends StatelessWidget {
final User eachUser;
UserResult(this.eachUser);
@override
Widget build(BuildContext context) {
return Padding(
padding: EdgeInsets.all(3.0),
child: Container(
color: Colors.white54,
child: Column(
children: <Widget>[
GestureDetector(
onTap: () => print("tapped"),
child: ListTile(
leading: CircleAvatar(
backgroundColor: Colors.black,
backgroundImage: CachedNetworkImageProvider(eachUser.url),
),
title: Text(
eachUser.profileName,
style: TextStyle(
color: Colors.black,
fontSize: 16.0,
fontWeight: FontWeight.bold,
),
),
subtitle: Text(
eachUser.username,
style: TextStyle(
color: Colors.black,
fontSize: 13.0,
),
),
),
),
],
),
),
);
}
}
**User.dart**
import 'package:cloud_firestore/cloud_firestore.dart';
class User {
final String id;
final String profileName;
final String username;
final String url;
final String email;
final String bio;
User({
this.id,
this.profileName,
this.username,
this.url,
this.email,
this.bio,
});
factory User.fromDocument(DocumentSnapshot doc) {
return User(
id: doc.documentID,
email: doc['email'],
username: doc['username'],
url: doc['url'],
profileName: doc['profileName'],
bio: doc['bio'],
);
}
}
你能帮我解决这个问题吗?
解决方案
所以你关注了编码咖啡馆的系列?我会给我的代码
SearchPage.dart
import 'package:buddiesgram/models/user.dart';
import 'package:buddiesgram/pages/HomePage.dart';
import 'package:buddiesgram/pages/ProfilePage.dart';
import 'package:buddiesgram/widgets/ProgressWidget.dart';
import 'package:cached_network_image/cached_network_image.dart';
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:flutter/material.dart';
import 'package:sqflite/sqflite.dart';
import 'package:path/path.dart';
import 'package:collection/collection.dart';
class SearchPage extends StatefulWidget {
@override
_SearchPageState createState() => _SearchPageState();
}
class _SearchPageState extends State<SearchPage> with AutomaticKeepAliveClientMixin<SearchPage>{
TextEditingController searchEditingCOntroller=TextEditingController();
Future<QuerySnapshot> futureSearchResults;
emptySearch(){
searchEditingCOntroller.clear();
}
controlSearch(String i){
Future<QuerySnapshot> allUsers=usersReference.where("username",isGreaterThanOrEqualTo: i).getDocuments();
setState(() {
futureSearchResults=allUsers;
});
}
AppBar searchPageHeader(){
return AppBar(
backgroundColor: Colors.blueAccent,
title: TextFormField(
controller: searchEditingCOntroller,
style: TextStyle(
fontSize: 18.0,
color: Colors.white,
),
decoration: InputDecoration(
hintText: "Search by Name",
hintStyle: TextStyle(color: Colors.white70),
enabledBorder: UnderlineInputBorder(
borderSide: BorderSide(color: Color(0xffFD9A28)),
),
focusedBorder: UnderlineInputBorder(
borderSide: BorderSide(color: Color(0xffFD9A28)),
),
filled: true,
prefixIcon: Icon(Icons.person_pin,color: Colors.white),
suffixIcon: IconButton(icon: Icon(Icons.clear,color: Colors.white),onPressed: emptySearch),
),
onFieldSubmitted: controlSearch,
),
);
}
Container noResults(){
// final Orientation orientation=MediaQuery.of(context).orientation;
return Container(
child: Center(
child: ListView(
shrinkWrap: true,
children: <Widget>[
Icon(Icons.group,color: Colors.grey,size: 150.0,),
Text(
"Search Users",textAlign: TextAlign.center,
style: TextStyle(color: Colors.black ,fontWeight: FontWeight.w500,fontSize: 50.0),
),
],
),
),
);
}
showUsers(){
return FutureBuilder(
future: futureSearchResults,
builder: (context,dataSnapshot){
if(!dataSnapshot.hasData){
return circularProgress();
}
List<UserResult> searchUserResut=[];
dataSnapshot.data.documents.forEach((document){
User eachUser=User.fromDocument(document);
UserResult userResult=UserResult(eachUser);
searchUserResut.add(userResult);
});
return ListView(children: searchUserResut,);
},
);
}
bool get wantKeepAlive=>true;
@override
Widget build(BuildContext context) {
return Scaffold(
// backgroundColor: Colors.black,
appBar: searchPageHeader(),
body: futureSearchResults==null ? noResults() : showUsers(),
);
}
}
class UserResult extends StatelessWidget {
final User eachUser;
UserResult(this.eachUser);
@override
Widget build(BuildContext context) {
return Padding(
padding: EdgeInsets.all(3.0),
child: Container(
color: Colors.white54,
child: Column(
children: <Widget>[
GestureDetector(
onTap: ()=>displayUserProfile(context,userProfileId:eachUser.id),
child: ListTile(
leading: CircleAvatar(
backgroundColor: Colors.white54,
backgroundImage: new CachedNetworkImageProvider(
eachUser.url,
),
),
title: Text(eachUser.username,style: TextStyle(
color: Colors.black,fontSize:16.0,
fontWeight: FontWeight.bold,
),
),
subtitle: Text(
eachUser.profileName,style: TextStyle(
color: Colors.black,fontSize: 13.0,
),
),
),
),
],
),
),
);
}
displayUserProfile(BuildContext context, {String userProfileId}) {
Navigator.push(context, MaterialPageRoute(builder: (context)=>ProfilePage(userProfileId: userProfileId,)));
}
}
推荐阅读
- python - 预测滞后参数
- javascript - 如何创建类似 Hotjar 的应用程序?
- r - 如何使用 RevoScaleR 在 SQL Server 中创建表?
- php - 使用数组数据后向现有数组添加数据
- php - 在 MySQL REGEXP 中使用 PHP 变量
- python - Python:过滤字符串的正则表达式
- python - python中的字典问题,索引错误
- python - With语句,自动删除对象
- powershell - 使用 Copy-WithProgress Powershell 函数的文件大小总计算问题
- java - 带有数据源 (YML) 的 Spring 配置属性