dart Flutter -我需要显示文本,但应用程序不需要

iyfamqjs  于 2023-03-27  发布在  Flutter
关注(0)|答案(3)|浏览(135)
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代码中刷新自己时,它就会显示文本。
我的主题是显示海拔按钮没有重新加载。请让我知道,如果它在您的电脑工作正常。因为我的电脑可能有故障。

wnvonmuf

wnvonmuf1#

在阅读了你给出的代码后,从你的问题是
我想在我的应用上显示文本。我不知道为什么该代码不能立即工作。它不能立即工作。当我在Visual Studio代码中刷新自己时,它会显示文本。
在阅读了这部分代码之后

onPressed: () {
                    Navigator.push(
                      context,
                      MaterialPageRoute(
                        builder: (_) => const AfterSearchScreen(),
                      ),
                    );
                    loadBookInfos();
                  },

我想我找到了你的问题,因为从这个代码你导航到其他页面之前,数据是完成添加到列表,你可以移动navigator.push函数到loadBookInfos这是例子

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);
    }
      Navigator.push(
         context,
         MaterialPageRoute(
            builder: (_) => const AfterSearchScreen(),
         ),
     );
  }

并在onpressed函数上删除您的navigator.push

i34xakig

i34xakig2#

'infoTitle'是从哪里来的?我没有看到任何初始化。

  • setState((){})* 在这里不做任何事情。如果您的数据发生变化,并且您希望将其显示在屏幕上,则必须调用setState。

我不知道,为什么它没有显示在屏幕上,也许你应该尝试使这个小部件成为一个无状态的小部件,因为它不需要是一个Statefull。

e5nqia27

e5nqia273#

您可以:

  • 删除设置状态((){});,则会导致错误。
  • a函数应该从全局变量接收String而不是index。

Widget a(String text){ return ElevatedButton(style:常量按钮样式(),按下:(){},子项:ListTile(标题:文本(文本,样式:const TextStyle(color:Colors.black),),),); }

  • 删除多余的扩展小部件。

相关问题