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