如何将计时器添加到 changenotifier 类

Posted

技术标签:

【中文标题】如何将计时器添加到 changenotifier 类【英文标题】:how to add timer to the changenotifier class 【发布时间】:2021-10-09 06:27:19 【问题描述】:

我正在使用 Flutter 提供程序包来获取数据。

我有 2 个问题。

    在我初始化的 DataProvider 类中,它运行了 3 次 获取数据, 我需要每 5 分钟更新一次数据(我正在更新 通过调用api的数据)我怎么能执行它,我认为需要 添加计时器功能。我可以在哪里添加这些。

`

class DataProvider with ChangeNotifier 

      DataProvider() 
        getData();
 /*this will call 3 times when i call changenotifier provider in the ui*/
      
    
      List<Data> _vData = [];
    //<Data> is my mode
      List<Data> get vData => _vData ;
    
       getData() async 
        try 
          _vData = await instatntApi().Services();
    // got the data from service
          notifyListeners();
          return _vData ;
         catch (e) 
          print("error provider $e");
        
      
    

`

这是我的用户界面调用

class HomePage extends StatefulWidget 
  const HomePage(Key? key) : super(key: key);

  @override
  _HomePageState createState() => _HomePageState();


class _HomePageState extends State<HomePage> 


  @override
  Widget build(BuildContext context) 
    return Scaffold(
      body: SingleChildScrollView(
        child: Container(
          height: MediaQuery.of(context).size.height,
          width: MediaQuery.of(context).size.width,
          child: ChangeNotifierProvider<DataProvider>(
            create:
                (context) => DataProvider(),
            child:  Builder(
              builder: (
                context,
              ) 
                final model = Provider.of<DataProvider>(context);

                return ListView.builder(
                    itemCount: model.vData.length,
                    itemBuilder: (BuildContext context, int index) 
                      
                      return Center(
                        child: Text(
                          model.vData[index].text.toString(),
                          style: TextStyle(color: Colors.black),
                        ),
                      );
                    );
              ,
            ),
          ),
        ),
      ),
    );
  

【问题讨论】:

我需要你发布调用你的Provider 的 UI,因为这可能是三次调用的原因。您是否使用FutureBuilder 并直接在其中初始化future @venir 不,我在我的 ui 中使用 changeNotifierProvider @venir 现在我更新了问题中的 ui 部分 你能发布你的 Provider 的完整实现吗?我们需要深入挖掘我在您的实现中没有看到的 .HomePageList.data 属性 对不起,我忘了欣赏你的作品,谢谢兄弟...... 【参考方案1】:

你可以试试Timer.periodic

class DataProvider with ChangeNotifier 
   bool _call = false;
      DataProvider() 
        if(!_call)
           getData();
           _call = true;
        
      
    
      List<Data> _vData = [];
    
      List<Data> get vData => _vData ;
    
       getData() async 
        await processData();
         Timer.periodic(Duration(minute: 5), (t)
           processData();
         );
      

      processData() async
       try 
          _vData = await instatntApi().Services();
    // got the data from service
          notifyListeners();
         catch (e) 
          print("error provider $e");
        
      
    

【讨论】:

我能知道为什么会这样吗,期待技术回答,兄弟,你知道吗,无论如何谢谢你的回复 在调用初始调用和计时器运行时仍然调用 3 - 4 次

以上是关于如何将计时器添加到 changenotifier 类的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Navigator 中传递 ChangeNotifier?

ChangeNotifier 安装等效?

Flutter Provider实现原理

如何在 ChangeNotifier 中使用 Futures?

如何关闭 ChangeNotifier Provider Flutter 中的函数

为大量听众优化的 ChangeNotifier 的替代方案?