import 'package:flutter/material.dart';
import 'package:books_finder/books_finder.dart';
String inputText = '';
List<String> infoTitle = [];
String infoSubtitle = "";
List<String> infoAuthors = [];
class FinderBookSearch extends StatefulWidget {
const FinderBookSearch({super.key, required this.title});
final String title;
@override
State<FinderBookSearch> createState() => _FinderBookSearch();
}
class _FinderBookSearch extends State<FinderBookSearch> {
void loadBookInfos() async {
final books = await queryBooks(
inputText,
maxResults: 20,
printType: PrintType.books,
orderBy: OrderBy.relevance,
reschemeImageLinks: true,
langRestrict: "en",
);
for (var book in books) {
var info = book.info;
infoTitle.add(info.title);
}
}
final TextEditingController _searchController = TextEditingController();
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
backgroundColor: Colors.white,
title: Container(
padding: const EdgeInsets.symmetric(horizontal: 8.0),
child: TextField(
onChanged: (text) {
setState(() {
inputText = text;
});
},
controller: _searchController,
decoration: InputDecoration(
hintText: 'Search...',
// Add a clear button to the search bar
suffixIcon: IconButton(
icon: const Icon(
Icons.clear,
color: Colors.black,
),
onPressed: () => _searchController.clear(),
),
prefixIcon: IconButton(
icon: const Icon(
Icons.search,
color: Colors.black,
),
onPressed: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (_) => const AfterSearchScreen(),
),
);
loadBookInfos();
},
),
),
),
)),
);
}
}
class AfterSearchScreen extends StatefulWidget {
const AfterSearchScreen({super.key});
@override
State<AfterSearchScreen> createState() => _AfterSearchScreenState();
}
class _AfterSearchScreenState extends State<AfterSearchScreen> {
Widget a(String text) {
return ElevatedButton(
style: const ButtonStyle(),
onPressed: () {},
child: ListTile(
title: Text(
text,
style: const TextStyle(color: Colors.black),
),
),
);
}
@override
Widget build(BuildContext context) {
return MaterialApp(
title: "Book Finder",
home: Scaffold(
backgroundColor: Colors.white,
body: Container(
decoration: const BoxDecoration(
color: Colors.greenAccent,
),
child: ListView.builder(
itemCount: infoTitle.length,
itemBuilder: (context, index) {
return a(infoTitle[index]);
},
),
),
),
);
}
}
这是我的代码。我想在我的应用程序上显示文本。我不知道为什么代码不能立即工作。它不能立即工作。当我在Visual Studio代码中刷新自己时,它就会显示文本。
我的主题是显示海拔按钮没有重新加载。请让我知道,如果它在您的电脑工作正常。因为我的电脑可能有故障。
3条答案
按热度按时间wnvonmuf1#
在阅读了你给出的代码后,从你的问题是
我想在我的应用上显示文本。我不知道为什么该代码不能立即工作。它不能立即工作。当我在Visual Studio代码中刷新自己时,它会显示文本。
在阅读了这部分代码之后
我想我找到了你的问题,因为从这个代码你导航到其他页面之前,数据是完成添加到列表,你可以移动
navigator.push
函数到loadBookInfos
这是例子并在onpressed函数上删除您的
navigator.push
i34xakig2#
'infoTitle'是从哪里来的?我没有看到任何初始化。
我不知道,为什么它没有显示在屏幕上,也许你应该尝试使这个小部件成为一个无状态的小部件,因为它不需要是一个Statefull。
e5nqia273#
您可以:
Widget a(String text){ return ElevatedButton(style:常量按钮样式(),按下:(){},子项:ListTile(标题:文本(文本,样式:const TextStyle(color:Colors.black),),),); }