Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 颤振将内容包含到页面中_Flutter_Dart_Widget - Fatal编程技术网

Flutter 颤振将内容包含到页面中

Flutter 颤振将内容包含到页面中,flutter,dart,widget,Flutter,Dart,Widget,我实际上有一个搜索栏(自动完成)正在工作 当我选择一个结果时,displaynack()正在工作,它显示一个snackBar,但我想显示testList()的内容 我的目标是了解如何启动另一个小部件,以便能够一次又一次地在页面上添加新的小部件 我的最终目标是一旦我有了所选的值,就发出一个http请求,获取一个列表作为返回并显示一个listview 该函数已执行(我可以在调试器中看到),但没有显示任何内容 (我是新手,请尽可能解释您的回答:)) 是的,我知道它是无效的 import 'packag

我实际上有一个搜索栏(自动完成)正在工作

当我选择一个结果时,displaynack()正在工作,它显示一个snackBar,但我想显示testList()的内容

我的目标是了解如何启动另一个小部件,以便能够一次又一次地在页面上添加新的小部件


我的最终目标是一旦我有了所选的值,就发出一个http请求,获取一个列表作为返回并显示一个listview

该函数已执行(我可以在调试器中看到),但没有显示任何内容

(我是新手,请尽可能解释您的回答:)) 是的,我知道它是无效的

import 'package:drawer/src/share/snack_bar.dart';
import 'package:flutter/material.dart';
import 'package:flutter_typeahead/flutter_typeahead.dart';
import '../models/post_model.dart';
import '../services/http_service.dart';
// import 'package:http/http.dart' as http;


class PostsPage extends StatelessWidget {

  final String title;
  const PostsPage({Key? key, required this.title}) : super(key: key);
  
  static Future<List<Post>> filterList(String value) async {
    List<Post> list = await HttpService.fetchPosts();
    return list.where(
      (x) => x.title.toLowerCase().contains(value.toLowerCase())).toList();
  }  
  
  @override
  Widget build(BuildContext context) => Scaffold(
        appBar: AppBar(
          title: Text(title),
        ),
        body: SafeArea(
          child: Container(
            padding: EdgeInsets.all(16),
            child: TypeAheadField<Post?>(
              debounceDuration: Duration(milliseconds: 500),
              hideSuggestionsOnKeyboardHide: false,
              textFieldConfiguration: TextFieldConfiguration(
                decoration: InputDecoration(
                  prefixIcon: Icon(Icons.search),
                  border: OutlineInputBorder(),
                  hintText: 'Select the namespace...',
                ),
              ),
              suggestionsCallback: filterList,
              itemBuilder: (context, Post? suggestion) {
                final user = suggestion!;

                return ListTile(
                  title: Text(user.title),
                );
              },
              noItemsFoundBuilder: (context) => Container(
                height: 100,
                child: Center(
                  child: Text(
                    'No Namespace Found.',
                    style: TextStyle(fontSize: 24),
                  ),
                ),
              ),
              onSuggestionSelected: (Post? suggestion) {
                final user = suggestion!;
                
                displaySnack(context, '  Namespace: '+user.title);
                testList(context);  ################################ HERE
              },
            ),
          ),
        ),
      );
      
}


  Widget testList(BuildContext context) {
    return ListView.separated(
      separatorBuilder: (BuildContext context, int index) => const Divider(),
        itemCount: 2,
        itemBuilder: (context, index) {
          return Card(
              child: ListTile(
                  title: Text("ppp"),
                  subtitle: Text("ppp"),
                  leading: CircleAvatar(
                      backgroundImage: NetworkImage(
                          "https://images.unsplash.com/photo-1547721064-da6cfb341d50"))
                  ));
        });
  }

import'package:drawer/src/share/snack_bar.dart';
进口“包装:颤振/材料.省道”;
导入“包:flift_-typeahead/flift_-typeahead.dart”;
导入“../models/post_model.dart”;
导入“../services/http_service.dart”;
//将“package:http/http.dart”导入为http;
类PostsPage扩展了无状态小部件{
最后的字符串标题;
const PostsPage({Key?Key,必选this.title}):super(Key:Key);
静态未来筛选器列表(字符串值)异步{
List List=wait-HttpService.fetchPosts();
返回列表。在哪里(
(x) =>x.title.toLowerCase().contains(value.toLowerCase()).toList();
}  
@凌驾
小部件构建(构建上下文)=>Scaffold(
appBar:appBar(
标题:文本(标题),
),
正文:安全区(
子:容器(
填充:边缘设置。全部(16),
子项:TypeAheadField(
去抖动持续时间:持续时间(毫秒:500),
隐藏建议OnKeyboard隐藏:false,
textFieldConfiguration:textFieldConfiguration(
装饰:输入装饰(
前缀:图标(Icons.search),
边框:OutlineInputBorder(),
hintText:'选择名称空间…',
),
),
suggestionsCallback:filterList,
itemBuilder:(上下文、帖子?建议){
最终用户=建议!;
返回列表块(
标题:文本(user.title),
);
},
noItemsFoundBuilder:(上下文)=>容器(
身高:100,
儿童:中心(
子:文本(
“未找到命名空间。”,
样式:TextStyle(字体大小:24),
),
),
),
onSuggestionSelected:(发布建议){
最终用户=建议!;
DisplaySnapshot(上下文“名称空间:”+user.title);
测试列表(上下文)
},
),
),
),
);
}
小部件测试列表(构建上下文){
返回ListView.separated(
separatorBuilder:(BuildContext上下文,int索引)=>const Divider(),
物品计数:2,
itemBuilder:(上下文,索引){
回程卡(
孩子:ListTile(
标题:文本(“ppp”),
字幕:文本(“ppp”),
领先:CircleAvatar(
背景图片:NetworkImage(
"https://images.unsplash.com/photo-1547721064-da6cfb341d50"))
));
});
}


我需要:

所以你现在做的基本上就是用你的
testList()
函数调用创建一个
ListView
,然后什么也不做,但是你想做的是让这个小部件显示在屏幕上,对吗

若你们创建了一个新的小部件,颤振不仅仅会显示它,你们还必须告诉它去渲染。想象一下,你正在准备小部件(例如小部件中的小部件),而flifter会在没有完成的情况下立即将其呈现到屏幕上,那就没那么好了

您需要将该小部件推到颤振提供给您的
Navigator
小部件上

onSuggestionSelected: (Post? suggestion) {
  final user = suggestion!;
            
  displaySnack(context, '  Namespace: '+user.title);
  Navigator.push(
    context,
    MaterialPageRoute(builder: (context) => testList(context)),
  );
}

我建议您阅读本文。

您可以使用listView builder显示所选结果

          onSuggestionSelected: (Post? suggestion) {
            final user = suggestion!;
            
            displaySnack(context, '  Namespace: '+user.title);
            //get results
            var results = fetchResult(suggestion);
            //return a listview of the results
            return ListView.builder(
            physics: const AlwaysScrollableScrollPhysics(),
            shrinkWrap: true,
            scrollDirection: Axis.vertical,
            itemCount: results.length,
            itemBuilder: (_context, index) {
              Post post = results[index];
              return Card(
                  elevation: 2,
                  child: InkWell(
                    child: Container(
                        padding: EdgeInsets.symmetric(horizontal: 8, vertical: 8),
                        decoration: BoxDecoration(
                          borderRadius: BorderRadius.circular(6.0),
                          border: Border.all(color: Colors.black),
                          ),
                      child: DefaultTextStyle(
                        style: TextStyle(
                            fontWeight: FontWeight.bold,
                            fontSize: 12,
                            color: Colors.white),
                        child: Row(children: [
                          Expanded(
                            flex: 2,
                            child: Column(
                              crossAxisAlignment: CrossAxisAlignment.start,
                              children: <Widget>[
                                Text(post.data),
                              ],
                              ),
                            ),
                        ]),
                      ),
                        ),
                    onTap: () {
                      //do something when user clicks on a result
                    },
                    ));
            }
          },
onSuggestionSelected:(Post?suggestion){
最终用户=建议!;
DisplaySnapshot(上下文“名称空间:”+user.title);
//取得成果
var结果=fetchResult(建议);
//返回结果的列表视图
返回ListView.builder(
物理:常量AlwaysScrollablePhysics(),
收缩膜:对,
滚动方向:轴垂直,
itemCount:results.length,
itemBuilder:(_上下文,索引){
Post Post=结果[索引];
回程卡(
标高:2,
孩子:InkWell(
子:容器(
填充:边缘组。对称(水平:8,垂直:8),
装饰:盒子装饰(
边界半径:边界半径。圆形(6.0),
边框:边框。全部(颜色:颜色。黑色),
),
子项:DefaultTextStyle(
样式:TextStyle(
fontWeight:fontWeight.bold,
尺寸:12,
颜色:颜色。白色),
子对象:行(子对象:[
扩大(
弹性:2,
子:列(
crossAxisAlignment:crossAxisAlignment.start,
儿童:[
文本(后期数据),
],
),
),
]),
),
),
安大略省
  List<Post> selectedPosts;
  @override
  void initState() {
    super.initState();
    selectedPosts = [];
  }


  @override
  Widget build(BuildContext context) => Scaffold(
        appBar: AppBar(
          title: Text(title),
        ),
        body: SafeArea(
          child: Column(
            children: [
              Container(
                padding: EdgeInsets.all(16),
                child: TypeAheadField<Post?>(
                  debounceDuration: Duration(milliseconds: 500),
                  hideSuggestionsOnKeyboardHide: false,
                  textFieldConfiguration: TextFieldConfiguration(
                    decoration: InputDecoration(
                      prefixIcon: Icon(Icons.search),
                      border: OutlineInputBorder(),
                      hintText: 'Select the namespace...',
                    ),
                  ),
                  suggestionsCallback: filterList,
                  itemBuilder: (context, Post? suggestion) {
                    final user = suggestion!;

                    return ListTile(
                      title: Text(user.title),
                    );
                  },
                  noItemsFoundBuilder: (context) => Container(
                    height: 100,
                    child: Center(
                      child: Text(
                        'No Namespace Found.',
                        style: TextStyle(fontSize: 24),
                      ),
                    ),
                  ),
                  onSuggestionSelected: (Post? suggestion) {
                    final user = suggestion!;
                    displaySnack(context, '  Namespace: '+user.title);
                  setState(()=>  selectedPosts.add(suggestion));
               
                  },
                ),
              ),
               testList(context),
            ],
          ),
        ),
      );
itemCount: 2,
itemCount: selectedPosts?.length ?? 0,
class PostsPage extends StatefulWidget {
  final String title;

  const PostsPage({Key? key, required this.title}) : super(key: key);

  static Future<List<Post>> filterList(String value) async {
    // skip
  }

  @override
  _PostsPageState createState() => _PostsPageState();
}

class _PostsPageState extends State<PostsPage> {
  Post? user;
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: SafeArea(
        child: Column(
          children: [
            Container(
              padding: EdgeInsets.all(16),
              child: TypeAheadField<Post>(
                // ... 
                // skip
                // ...
                onSuggestionSelected: (Post? suggestion) {
                  setState(() {
                    user = suggestion!;
                    displaySnack(context, '  Namespace: '+user.title);
                  });
                },
              ),
            ),
            Expanded(child: MyResult(post: user)),
          ],
        ),
      ),
    );
  }
}
class MyResult extends StatelessWidget {
  const MyResult({
    required this.post,
    Key? key,
  }) : super(key: key);

  final Post? post;

  Future<List<OtherObject>> getOtherObjects(Post? post) async{
    if(post == null){
      return [];
    }else{
      return Future.delayed(Duration(seconds:3),()=>[OtherObject(title: '001'),OtherObject(title: '002'),OtherObject(title: '003')]);
    }
  }

  @override
  Widget build(BuildContext context) {
    return FutureBuilder<List<OtherObject>>(
      future: getOtherObjects(post),
      builder: (context, snapshot) {
        if(snapshot.hasData && snapshot.connectionState == ConnectionState.done) {
          final result = snapshot.data!;

          return ListView.separated(
            separatorBuilder: (BuildContext context,
                int index) => const Divider(),
            itemCount: result.length,
            itemBuilder: (context, index) {
              return Card(
                child: ListTile(
                  title: Text(result[index].title),
                  subtitle: Text("ppp"),
                  leading: CircleAvatar(
                    backgroundImage: NetworkImage(
                        "https://images.unsplash.com/photo-1547721064-da6cfb341d50"),
                  ),
                ),
              );
            },
          );
        }else {
          return Center(child: CircularProgressIndicator());
        }
      }
    );
  }
}