Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.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 颤振:有可能在构建方法完成之前获得未来的数据吗? 导入“包装:颤振/材料.省道”; 导入“package:hello_world/ui/food_show_case.dart”; 导入“自定义appbar.dart”; 类RestaurantsMenu扩展StatefulWidget{ var结果; RestaurantsMenu({this.result}); @凌驾 _RestaurantsMenuState createState()=>\u RestaurantsMenuState(结果); } 类_restaurantsmenstate扩展状态{ var结果; var identifier=newmap(); Future getData()异步{ 等待结果。然后((代表){ 标识符=代表; }); } @凌驾 void initState(){ super.initState(); getData(); } _RestaurantsMenuState(此结果); @凌驾 小部件构建(构建上下文){ 返回脚手架( 正文:安全区( 子:容器( 子:ListView( 儿童:[ CustomAppBar(), 选项卡(标识符、标识符、键、长度), ], ), ), )); } 小部件选项卡(地图,int longueur){ 返回SingleChildScrollView( 子:容器( 身高:560, 宽度:double.infinity, 子级:DefaultTabController( 初始索引:0, 长度:朗古尔, 孩子:脚手架( appBar:appBar( 标高:0.0, 背景颜色:颜色。透明, 底部:首选尺寸( 首选尺寸:尺寸。从高度(65), 子:容器( 颜色:颜色。透明, 儿童:安全区( 子:列( mainAxisAlignment:mainAxisAlignment.center, 儿童:[ 塔巴( isScrollable:是的, 标签填充:仅限边缘集(顶部:15), 指示颜色:颜色。透明, labelColor:Colors.black, 标签样式:文本样式( 尺寸:25, fontWeight:fontWeight.w800, fontFamily:“斯拉博”, ), 未选择的标签颜色:Colors.black 26, 未选择的标签样式:TextStyle( 尺寸:25, fontWeight:fontWeight.w800, fontFamily:“斯拉博”, ), 选项卡:[ for(映射键中的变量元素) 容器( 填充:仅限边缘设置(左:40), 子:文本(元素), ), ], ), ], ), ), ), ), ), 正文:选项卡视图( 儿童:[ for(map.keys中的变量tabu) 食品展示箱( 映射:标识符, 禁忌:禁忌, ), ], ), ), ), ), ); } }_Flutter_Dart - Fatal编程技术网

Flutter 颤振:有可能在构建方法完成之前获得未来的数据吗? 导入“包装:颤振/材料.省道”; 导入“package:hello_world/ui/food_show_case.dart”; 导入“自定义appbar.dart”; 类RestaurantsMenu扩展StatefulWidget{ var结果; RestaurantsMenu({this.result}); @凌驾 _RestaurantsMenuState createState()=>\u RestaurantsMenuState(结果); } 类_restaurantsmenstate扩展状态{ var结果; var identifier=newmap(); Future getData()异步{ 等待结果。然后((代表){ 标识符=代表; }); } @凌驾 void initState(){ super.initState(); getData(); } _RestaurantsMenuState(此结果); @凌驾 小部件构建(构建上下文){ 返回脚手架( 正文:安全区( 子:容器( 子:ListView( 儿童:[ CustomAppBar(), 选项卡(标识符、标识符、键、长度), ], ), ), )); } 小部件选项卡(地图,int longueur){ 返回SingleChildScrollView( 子:容器( 身高:560, 宽度:double.infinity, 子级:DefaultTabController( 初始索引:0, 长度:朗古尔, 孩子:脚手架( appBar:appBar( 标高:0.0, 背景颜色:颜色。透明, 底部:首选尺寸( 首选尺寸:尺寸。从高度(65), 子:容器( 颜色:颜色。透明, 儿童:安全区( 子:列( mainAxisAlignment:mainAxisAlignment.center, 儿童:[ 塔巴( isScrollable:是的, 标签填充:仅限边缘集(顶部:15), 指示颜色:颜色。透明, labelColor:Colors.black, 标签样式:文本样式( 尺寸:25, fontWeight:fontWeight.w800, fontFamily:“斯拉博”, ), 未选择的标签颜色:Colors.black 26, 未选择的标签样式:TextStyle( 尺寸:25, fontWeight:fontWeight.w800, fontFamily:“斯拉博”, ), 选项卡:[ for(映射键中的变量元素) 容器( 填充:仅限边缘设置(左:40), 子:文本(元素), ), ], ), ], ), ), ), ), ), 正文:选项卡视图( 儿童:[ for(map.keys中的变量tabu) 食品展示箱( 映射:标识符, 禁忌:禁忌, ), ], ), ), ), ), ); } }

Flutter 颤振:有可能在构建方法完成之前获得未来的数据吗? 导入“包装:颤振/材料.省道”; 导入“package:hello_world/ui/food_show_case.dart”; 导入“自定义appbar.dart”; 类RestaurantsMenu扩展StatefulWidget{ var结果; RestaurantsMenu({this.result}); @凌驾 _RestaurantsMenuState createState()=>\u RestaurantsMenuState(结果); } 类_restaurantsmenstate扩展状态{ var结果; var identifier=newmap(); Future getData()异步{ 等待结果。然后((代表){ 标识符=代表; }); } @凌驾 void initState(){ super.initState(); getData(); } _RestaurantsMenuState(此结果); @凌驾 小部件构建(构建上下文){ 返回脚手架( 正文:安全区( 子:容器( 子:ListView( 儿童:[ CustomAppBar(), 选项卡(标识符、标识符、键、长度), ], ), ), )); } 小部件选项卡(地图,int longueur){ 返回SingleChildScrollView( 子:容器( 身高:560, 宽度:double.infinity, 子级:DefaultTabController( 初始索引:0, 长度:朗古尔, 孩子:脚手架( appBar:appBar( 标高:0.0, 背景颜色:颜色。透明, 底部:首选尺寸( 首选尺寸:尺寸。从高度(65), 子:容器( 颜色:颜色。透明, 儿童:安全区( 子:列( mainAxisAlignment:mainAxisAlignment.center, 儿童:[ 塔巴( isScrollable:是的, 标签填充:仅限边缘集(顶部:15), 指示颜色:颜色。透明, labelColor:Colors.black, 标签样式:文本样式( 尺寸:25, fontWeight:fontWeight.w800, fontFamily:“斯拉博”, ), 未选择的标签颜色:Colors.black 26, 未选择的标签样式:TextStyle( 尺寸:25, fontWeight:fontWeight.w800, fontFamily:“斯拉博”, ), 选项卡:[ for(映射键中的变量元素) 容器( 填充:仅限边缘设置(左:40), 子:文本(元素), ), ], ), ], ), ), ), ), ), 正文:选项卡视图( 儿童:[ for(map.keys中的变量tabu) 食品展示箱( 映射:标识符, 禁忌:禁忌, ), ], ), ), ), ), ); } },flutter,dart,Flutter,Dart,以下是错误: 引发了另一个异常:“package:flatter/src/material/tab_controller.dart”:失败的断言:第316行位置15:“initialIndex>=0&&initialIndex

以下是错误: 引发了另一个异常:“package:flatter/src/material/tab_controller.dart”:失败的断言:第316行位置15:“initialIndex>=0&&initialIndex
如果我没有弄错的话,问题是Flatter正试图使用未来数据的长度(这些数据是我从Firebase检索到的一组信息)构建一个选项卡控制器,但构建方法已经超过了它(当我在获得此错误数秒后执行热重新加载时,一切正常,错误消失)而且它不能被构建,我可以停止或暂停它一小会儿,直到需要的数据到达,然后再继续吗?。谁能帮帮我吗?!谢谢

您可以创建一个名为
\u loaded
的布尔值,并在init状态下将其设置为false。然后在设置
identifier=rep
您可以设置
\u loaded=true
并调用
setState((){})。最后,在构建方法中,是否将
选项卡(identifier、identifier.keys.length)替换为
?选项卡(标识符、标识符.键.长度):CircularProgressIndicator(),
,这意味着它将显示一个加载循环,直到收到数据。使用FutureBuilder实现您想要的。以下是文档的详细信息。
import 'package:flutter/material.dart';
import 'package:hello_world/ui/food_show_case.dart';
import 'custom_appbar.dart';

class RestaurantsMenu extends StatefulWidget {
  var result;


  RestaurantsMenu({this.result});

  @override
  _RestaurantsMenuState createState() => _RestaurantsMenuState(result);
}

class _RestaurantsMenuState extends State<RestaurantsMenu> {
  var result;
  var identifier = new Map();
  Future getData() async {
    await result.then((rep) {
      identifier = rep;
    });
  }

  @override
  void initState() {
    super.initState();

    getData();
  }

  _RestaurantsMenuState(this.result);
  @override
  Widget build(BuildContext context) {
    return Scaffold(
        body: SafeArea(
      child: Container(
        child: ListView(
          children: <Widget>[
            CustomAppBar(),
            tab(identifier, identifier.keys.length),
          ],
        ),
      ),
    ));
  }

  Widget tab(Map map, int longueur) {
    return SingleChildScrollView(
      child: Container(
        height: 560,
        width: double.infinity,
        child: DefaultTabController(
          initialIndex: 0,
          length: longueur,
          child: Scaffold(
            appBar: AppBar(
              elevation: 0.0,
              backgroundColor: Colors.transparent,
              bottom: PreferredSize(
                preferredSize: Size.fromHeight(65),
                child: Container(
                  color: Colors.transparent,
                  child: SafeArea(
                    child: Column(
                      mainAxisAlignment: MainAxisAlignment.center,
                      children: <Widget>[
                        TabBar(
                          isScrollable: true,
                          labelPadding: EdgeInsets.only(top: 15),
                          indicatorColor: Colors.transparent,
                          labelColor: Colors.black,
                          labelStyle: TextStyle(
                            fontSize: 25,
                            fontWeight: FontWeight.w800,
                            fontFamily: 'slabo',
                          ),
                          unselectedLabelColor: Colors.black26,
                          unselectedLabelStyle: TextStyle(
                            fontSize: 25,
                            fontWeight: FontWeight.w800,
                            fontFamily: 'slabo',
                          ),
                          tabs: <Widget>[
                            for (var elem in map.keys)
                              Container(
                                padding: EdgeInsets.only(left: 40),
                                child: Text(elem),
                              ),
                          ],
                        ),
                      ],
                    ),
                  ),
                ),
              ),
            ),
            body: TabBarView(
              children: <Widget>[
                for (var tabu in map.keys)
                  FoodShowCase(
                    map: identifier,
                    tabofnow: tabu,
                  ),
              ],
            ),
          ),
        ),
      ),
    );
  }
}