android - 异步函数后更改正文

标签 android dart flutter flutter-layout

我有一个带有包含 2 个选项卡的选项卡 View 的搜索屏幕。启动时,每个选项卡中都有一个空容器。当用户运行搜索时,我想根据结果为每个选项卡生成一个 gridview。

到目前为止,这是我的应用程序主体代码

Widget tvScreen = new Container();
Widget movieScreen = new Container();

Widget build(BuildContext context) {
return MaterialApp(
  home: DefaultTabController(
    length: 2,
    child: Scaffold(
      appBar: AppBar(
        bottom: TabBar(
            tabs: [
              Tab(text: "TV Shows"),
              Tab(text: "Movies"),
            ]),
        centerTitle: true,
        title: Padding(
          padding: const EdgeInsets.only(right: 17.0),
          child: new TextField(
            autofocus: true,
            style: new TextStyle(
              fontSize: 18.0,
            ),
            controller: _searchField,
            decoration: InputDecoration(
                hintText: "Enter TV Show or Movie...."
            ),
          ),
        ),
        actions: <Widget>[
          IconButton(
            splashColor: Colors.white,
            icon: Icon(Icons.search),
            onPressed: _runSearch,
          ),
        ],
        // MD2: make the color the same as the background.
        backgroundColor: backgroundColor,
        // Remove box-shadow
        elevation: 18.00,
      ),
      body: TabBarView(
          children: [
            tvScreen,
            movieScreen,
          ]),
    ),
  ),
);

这就是我从 API 获取数据的方式

Future<String> getResults() async{

List<ResultsModel> _searchResults = [];
if (_searchField.text.isEmpty != true){
  String _searchParam = _searchField.text.replaceAll(r" ", "%20");

  String _apiKeyMovie = "https://api.themoviedb.org/3/search/movie?"
      "api_key=b52e4dea6f4284&language=en-US&"
      "query=$_searchParam&include_adult=true";

  var data = await http.get(_apiKeyMovie);
  var jsonData = jsonDecode(data.body);

  print("Show JSON");
  print(jsonData);
  if (jsonData != null) {

    int totalResults = jsonData["results"].length;

    if (totalResults != 0){
      int counter = 0;

      while (counter != totalResults) {
        if (jsonData["results"][counter]["poster_path"] != null){

          ResultsModel result = ResultsModel(
              true, jsonData["results"][counter]["title"],
              jsonData["results"][counter]["id"],
              "http://image.tmdb.org/t/p/w185/${jsonData["results"][counter]["poster_path"]}");

          _searchResults.add(result);
          counter = counter + 1;
        } else counter = counter + 1;

      }
    }
  }
}

searchResults = _searchResults;
return "Done!";

按下按钮时切换

_runSearch(){
getResults();

setState(() {
  //Change tabview contents
  tvScreen = _uiBodyTV();
  movieScreen = _uiBodyMovie();
});

最佳答案

能够使用 Streambuilder 和 Google 的 BLOC 设计流程达到预期的效果。

关于android - 异步函数后更改正文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52408625/

相关文章:

android - 声音 fragment 的堆大小溢出问题

flutter - 隔离器被杀死时, flutter 隔离器内的计时器不会停止

Dart - 双数据类型加法导致长十进制值

powershell - Windows Powershell 中的 Flutter Doctor 返回错误

flutter - 如果内容小部件太大,如何创建一个默认为 ListView 的列作为后备?

Flutter:如何根据 child 的高度自动更新 AppBar 的底部高度?

java - 如何在使用 ViewFlipper 的 showNext() 后更改 ListFragment 的 ListView?

android - 如何解决在 Play 商店发布应用后无法正常工作的 Android 谷歌签名问题?

android - Flutter v2.5.0 安卓闪屏

Android 5 Lollipop 全局禁用振动