Flutter 颤振等待通知程序';要启动的构造函数

Flutter 颤振等待通知程序';要启动的构造函数,flutter,dart,Flutter,Dart,我试图在listView生成器中显示初始化构造函数时加载的列表。 这现在不起作用,因为listView在构造函数完成加载我的列表之前运行 怎么办 我的通知者: class TablesNotifier with ChangeNotifier { // Services // --------------------------------------------------------------------------- final jsonSelectorService = l

我试图在listView生成器中显示初始化构造函数时加载的列表。 这现在不起作用,因为listView在构造函数完成加载我的列表之前运行

怎么办

我的通知者:

class TablesNotifier with ChangeNotifier {

  // Services
  // ---------------------------------------------------------------------------
  final jsonSelectorService = locator<JsonSelectorService>();

  // Variables
  // ---------------------------------------------------------------------------
  List<AltitudeModel> altitudes;

  // Constructor
  // ---------------------------------------------------------------------------
  TablesNotifier(){
    _initialise();
  }

  // Initialisation
  // ---------------------------------------------------------------------------
  Future _initialise() async{
    print('--- initialise');
    altitudes = await jsonSelectorService.altitudes();
  }
}
class TableScreen extends StatelessWidget {
  final String title;
  TableScreen({Key key, @required this.title}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: _buildBody(context),
    );
  }
  
  Widget _buildBody(BuildContext context)
  {
    var _tableProvider = Provider.of<TablesNotifier>(context);
    return ListView.builder(
      itemCount: _tableProvider.altitudes.length,
      itemBuilder: (context, index) {
        return ListTile(
          title: Text('${_tableProvider.altitudes[index]}'),
        );
      },
    );
  }
}
class TablesNotifier和ChangeNotifier{
//服务
// ---------------------------------------------------------------------------
最终jsonSelectorService=locator();
//变数
// ---------------------------------------------------------------------------
列出高度;
//建造师
// ---------------------------------------------------------------------------
表通知程序(){
_初始化();
}
//初始化
// ---------------------------------------------------------------------------
Future\u initialise()异步{
打印(“---初始化”);
高度=等待jsonSelectorService.altitudes();
}
}
我的屏幕:

class TablesNotifier with ChangeNotifier {

  // Services
  // ---------------------------------------------------------------------------
  final jsonSelectorService = locator<JsonSelectorService>();

  // Variables
  // ---------------------------------------------------------------------------
  List<AltitudeModel> altitudes;

  // Constructor
  // ---------------------------------------------------------------------------
  TablesNotifier(){
    _initialise();
  }

  // Initialisation
  // ---------------------------------------------------------------------------
  Future _initialise() async{
    print('--- initialise');
    altitudes = await jsonSelectorService.altitudes();
  }
}
class TableScreen extends StatelessWidget {
  final String title;
  TableScreen({Key key, @required this.title}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: _buildBody(context),
    );
  }
  
  Widget _buildBody(BuildContext context)
  {
    var _tableProvider = Provider.of<TablesNotifier>(context);
    return ListView.builder(
      itemCount: _tableProvider.altitudes.length,
      itemBuilder: (context, index) {
        return ListTile(
          title: Text('${_tableProvider.altitudes[index]}'),
        );
      },
    );
  }
}
class TableScreen扩展了无状态小部件{
最后的字符串标题;
表屏幕({Key Key,@required this.title}):超级(Key:Key);
@凌驾
小部件构建(构建上下文){
返回脚手架(
正文:_buildBody(上下文),
);
}
Widget\u buildBody(BuildContext上下文)
{
var _tableProvider=Provider.of(上下文);
返回ListView.builder(
itemCount:_tableProvider.altitudes.length,
itemBuilder:(上下文,索引){
返回列表块(
标题:文本(“${U tableProvider.altitudes[index]}”),
);
},
);
}
}

您可以复制粘贴运行下面的完整代码
我使用7秒延迟来模拟
jsonSelectorService

步骤1:您可以检查
\u tableProvider.altitudes==null
并返回
CircularProgressIndicator()
ListView

步骤2:当
高度
数据准备就绪时,呼叫
notifyListeners()

代码片段

Future _initialise() async {
    print('--- initialise');
    await Future.delayed(Duration(seconds: 7), () {});
    altitudes = [
      AltitudeModel(title: "1"),
      AltitudeModel(title: "2"),
      AltitudeModel(title: "3"),
      AltitudeModel(title: "4"),
      AltitudeModel(title: "5")
    ];

    notifyListeners();
  }
  
Widget _buildBody(BuildContext context) {
    var _tableProvider = Provider.of<TablesNotifier>(context);
    return _tableProvider.altitudes == null
        ? Center(child: CircularProgressIndicator())
        : ListView.builder(
Future\u initialise()异步{
打印(“---初始化”);
等待未来。延迟(持续时间(秒:7),({});
高度=[
AltitudeModel(标题:“1”),
AltitudeModel(标题:“2”),
AltitudeModel(标题:“3”),
AltitudeModel(标题:“4”),
AltitudeModel(标题:“5”)
];
notifyListeners();
}
Widget\u buildBody(BuildContext上下文){
var _tableProvider=Provider.of(上下文);
返回_tableProvider.altitudes==null
?中心(子项:循环压缩机指示器())
:ListView.builder(
工作演示

完整代码

import 'package:flutter/material.dart';
import 'package:provider/provider.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return ChangeNotifierProvider(
      create: (context) => TablesNotifier(),
      builder: (context, child) => MaterialApp(
        home: TableScreen(),
      ),
    );
  }
}

class AltitudeModel {
  String title;

  AltitudeModel({this.title});
}

class TablesNotifier with ChangeNotifier {
  // Services
  // ---------------------------------------------------------------------------
  //final jsonSelectorService = locator<JsonSelectorService>();

  // Variables
  // ---------------------------------------------------------------------------
  List<AltitudeModel> altitudes;

  // Constructor
  // ---------------------------------------------------------------------------
  TablesNotifier() {
    _initialise();
  }

  // Initialisation
  // ---------------------------------------------------------------------------
  Future _initialise() async {
    print('--- initialise');
    await Future.delayed(Duration(seconds: 7), () {});
    altitudes = [
      AltitudeModel(title: "1"),
      AltitudeModel(title: "2"),
      AltitudeModel(title: "3"),
      AltitudeModel(title: "4"),
      AltitudeModel(title: "5")
    ];

    notifyListeners();
  }
}

class TableScreen extends StatelessWidget {
  final String title;
  TableScreen({Key key, @required this.title}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: _buildBody(context),
    );
  }

  Widget _buildBody(BuildContext context) {
    var _tableProvider = Provider.of<TablesNotifier>(context);
    return _tableProvider.altitudes == null
        ? Center(child: CircularProgressIndicator())
        : ListView.builder(
            itemCount: _tableProvider.altitudes.length,
            itemBuilder: (context, index) {
              return ListTile(
                title: Text('${_tableProvider.altitudes[index].title}'),
              );
            },
          );
  }
}
导入“包装:颤振/材料.省道”;
导入“包:provider/provider.dart”;
void main(){
runApp(MyApp());
}
类MyApp扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回ChangeNotifierProvider(
create:(context)=>TablesNotifier(),
生成器:(上下文,子项)=>MaterialApp(
主页:TableScreen(),
),
);
}
}
类AltitudeModel{
字符串标题;
AltitudeModel({this.title});
}
使用ChangeNotifier类TablesNotifier{
//服务
// ---------------------------------------------------------------------------
//最终jsonSelectorService=locator();
//变数
// ---------------------------------------------------------------------------
列出高度;
//建造师
// ---------------------------------------------------------------------------
表通知程序(){
_初始化();
}
//初始化
// ---------------------------------------------------------------------------
Future\u initialise()异步{
打印(“---初始化”);
等待未来。延迟(持续时间(秒:7),({});
高度=[
AltitudeModel(标题:“1”),
AltitudeModel(标题:“2”),
AltitudeModel(标题:“3”),
AltitudeModel(标题:“4”),
AltitudeModel(标题:“5”)
];
notifyListeners();
}
}
类TableScreen扩展了无状态小部件{
最后的字符串标题;
表屏幕({Key Key,@required this.title}):超级(Key:Key);
@凌驾
小部件构建(构建上下文){
返回脚手架(
正文:_buildBody(上下文),
);
}
Widget\u buildBody(BuildContext上下文){
var _tableProvider=Provider.of(上下文);
返回_tableProvider.altitudes==null
?中心(子项:循环压缩机指示器())
:ListView.builder(
itemCount:_tableProvider.altitudes.length,
itemBuilder:(上下文,索引){
返回列表块(
标题:文本(“${U tableProvider.altitudes[index].title}”),
);
},
);
}
}

您可以复制粘贴运行下面的完整代码
我使用7秒延迟来模拟
jsonSelectorService

步骤1:您可以检查
\u tableProvider.altitudes==null
并返回
CircularProgressIndicator()
ListView

步骤2:当
高度
数据准备就绪时,呼叫
notifyListeners()

代码片段

Future _initialise() async {
    print('--- initialise');
    await Future.delayed(Duration(seconds: 7), () {});
    altitudes = [
      AltitudeModel(title: "1"),
      AltitudeModel(title: "2"),
      AltitudeModel(title: "3"),
      AltitudeModel(title: "4"),
      AltitudeModel(title: "5")
    ];

    notifyListeners();
  }
  
Widget _buildBody(BuildContext context) {
    var _tableProvider = Provider.of<TablesNotifier>(context);
    return _tableProvider.altitudes == null
        ? Center(child: CircularProgressIndicator())
        : ListView.builder(
Future\u initialise()异步{
打印(“---初始化”);
等待未来。延迟(持续时间(秒:7),({});
高度=[
AltitudeModel(标题:“1”),
AltitudeModel(标题:“2”),
AltitudeModel(标题:“3”),
AltitudeModel(标题:“4”),
AltitudeModel(标题:“5”)
];
notifyListeners();
}
Widget\u buildBody(BuildContext上下文){
var _tableProvider=Provider.of(上下文);
返回_tableProvider.altitudes==null
?中心(子项:循环压缩机指示器())
:ListView.builder(
工作演示

完整代码

import 'package:flutter/material.dart';
import 'package:provider/provider.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return ChangeNotifierProvider(
      create: (context) => TablesNotifier(),
      builder: (context, child) => MaterialApp(
        home: TableScreen(),
      ),
    );
  }
}

class AltitudeModel {
  String title;

  AltitudeModel({this.title});
}

class TablesNotifier with ChangeNotifier {
  // Services
  // ---------------------------------------------------------------------------
  //final jsonSelectorService = locator<JsonSelectorService>();

  // Variables
  // ---------------------------------------------------------------------------
  List<AltitudeModel> altitudes;

  // Constructor
  // ---------------------------------------------------------------------------
  TablesNotifier() {
    _initialise();
  }

  // Initialisation
  // ---------------------------------------------------------------------------
  Future _initialise() async {
    print('--- initialise');
    await Future.delayed(Duration(seconds: 7), () {});
    altitudes = [
      AltitudeModel(title: "1"),
      AltitudeModel(title: "2"),
      AltitudeModel(title: "3"),
      AltitudeModel(title: "4"),
      AltitudeModel(title: "5")
    ];

    notifyListeners();
  }
}

class TableScreen extends StatelessWidget {
  final String title;
  TableScreen({Key key, @required this.title}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: _buildBody(context),
    );
  }

  Widget _buildBody(BuildContext context) {
    var _tableProvider = Provider.of<TablesNotifier>(context);
    return _tableProvider.altitudes == null
        ? Center(child: CircularProgressIndicator())
        : ListView.builder(
            itemCount: _tableProvider.altitudes.length,
            itemBuilder: (context, index) {
              return ListTile(
                title: Text('${_tableProvider.altitudes[index].title}'),
              );
            },
          );
  }
}
导入“包装:颤振/材料.省道”;
导入“包:provider/provider.dart”;
void main(){
runApp(MyApp());
}
类MyApp扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回ChangeNotifierProvider(
create:(context)=>TablesNotifier(),
生成器:(上下文,子项)=>MaterialApp(
呵