Flutter 如何为ChangeNotifierProvider创建依赖项并使其等待完成?

Flutter 如何为ChangeNotifierProvider创建依赖项并使其等待完成?,flutter,flutter-change-notifier,Flutter,Flutter Change Notifier,我有一个ChangeNotifierProvider对象,它使用存储在sqflite资产数据库中的数据,这些数据需要在开始时作为将来加载。问题在于ChangeNotifierProvider不会等待将来的操作完成。我试图添加一种机制使ChangeNotifierProvider等待,但未能成功。(尝试了FutureBuilder、FutureBrovider、使用all-together等) 注意:FutureProvider解决了等待问题,但它不像ChangeNotifierProvider那

我有一个ChangeNotifierProvider对象,它使用存储在sqflite资产数据库中的数据,这些数据需要在开始时作为将来加载。问题在于ChangeNotifierProvider不会等待将来的操作完成。我试图添加一种机制使ChangeNotifierProvider等待,但未能成功。(尝试了FutureBuilder、FutureBrovider、使用all-together等)

注意:FutureProvider解决了等待问题,但它不像ChangeNotifierProvider那样侦听对象。当我在multiprovider中使用它们时,我有两个不同的对象实例

我在StackOverflow或其他站点中找到的所有解决方案都没有为这个特定问题提供通用的解决方案或方法。(或者我找不到)我相信一定有一个非常基本的解决方案/方法,并决定寻求您的帮助。如何实现此代码的未来,或者如何使ChangeNotifierProvider等待未来

这是我的摘要代码


class DataSource with ChangeNotifier {
  int _myId;
  List _myList;

  int get myId => _myId;
  List get myList => _myList;

  void setMyId(int changeMyId) {
    _myId = changeMyId;
    notifyListeners();
  }
  .... same setter code for myList object.
  
  DataSource(){initDatabase();}
  
  Future<bool> initDatabase() {
    .... fetching data from asset database. (this code works properly)
    return true;
  }
}

main.dart

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

Following code and widgets has this code part (it works fine)

return Consumer<DataSource>(
      builder: (context, myDataSource, child) {.......

使用ChangeNotifier类DataSource{
int_myId;
列表(myList),;
int get myId=>\u myId;
List get myList=>\u myList;
void setMyId(int changeMyId){
_myId=changeMyId;
notifyListeners();
}
..myList对象的设置器代码相同。
数据源(){initDatabase();}
未来数据库(){
..正在从资产数据库获取数据。(此代码工作正常)
返回true;
}
}
主飞镖
类MyApp扩展了无状态小部件{
@凌驾
小部件构建(构建上下文){
返回ChangeNotifierProvider(
create:(context)=>DataSource(),
孩子:MaterialApp(
主页:主页(),
),
);
}
}
下面的代码和小部件有这个代码部分(工作正常)
退货消费者(
生成器:(上下文,myDataSource,子项){。。。。。。。

您可以通过多种方式实现。其要点是您应该坚持被动原则,而不是试图等待更改。例如,当ajax请求更改时,您可以更改DataSource类中布尔值的状态

class DataSource extends ChangeNotifier{
  bool isDone = false;
  
  Future<bool> initDatabase(){
    //Do Whatever
    
    isDone = true;
    notifyListeners();
  }
}
类数据源扩展ChangeNotifier{
bool-isDone=false;
未来数据库(){
//做任何事
isDone=true;
notifyListeners();
}
}
然后,您可以像这样聆听构建方法中的这种变化

  Widget build(BuildContext ctx){
    bool isDone = Provider.of<DataSource>(context).isDone;
    
    if(isDone){
      // render result
    }else{
      // maybe render loading
    }
  }
Widget构建(BuildContext-ctx){
bool isDone=Provider.of(context).isDone;
中频(isDone){
//渲染结果
}否则{
//可能是渲染加载
}
}

已解决!非常感谢。@NurolAlacaatli如果您能接受答案,将不胜感激