标签: flutter-provider

如何在 ChangeNotifier 中使用 Futures?

我有一个sqlite从中读取数据的数据库。我也有一个很长的小部件树。所以经过一番研究,我找到了providerFlutter 包。但是我不知道如何在扩展类中使用 FuturesChangeNotifier或如何在我的小部件树中的任何地方使用它?

class MyProvider with ChangeNotifier {
  dynamic _myValue;

  dynamic get myValue => _myValue;

  set myValue(dynamic newValue) {
    _myValue = newValue;
    notifyListeners();
  }

  MyProvider(){
    loadValue();
  }

  Future<void> loadValue async {
    myValue = await db.instance().getValue();
  }

  Future<void> refetch async {
    myValue = await db.instance().newValue();
    notifyListeners();
  }
}
Run Code Online (Sandbox Code Playgroud)

sqlite dart flutter flutter-provider

2
推荐指数
1
解决办法
2909
查看次数

提供者与ViewModel

更多地了解ProviderChangeNotifier架构,我觉得很类似于老好MVVM架构,其中一个Widget是查看并获取所通知的更改ViewModel,这是ChangeNotifier由联ConsumerProvider

为什么不将其称为Flutter的MVVM?这两种架构之间有什么实际区别?

mvvm flutter flutter-provider

2
推荐指数
2
解决办法
296
查看次数

小部件停用后如何在 ChangeNotifier 中捕获错误?

我有Model要执行的代码。我公司提供ModelProvider。但是如果Model在完成执行之前处理我得到错误:

E/flutter (26180): [ERROR:flutter/lib/ui/ui_dart_state.cc(148)] 未处理的异常:模型被处理后使用。E/flutter (26180):一旦你在模型上调用了 dispose(),它就不能再使用了。

例如Model,如果用户按后退按钮则处理Navigator.pop()。这是因为Model仅适用于此 Widget。

但这意味着我无法在Model?

我的代码:

class Model extends ChangeNotifier {

  bool error = false;

  func() {

    try {

    await execute();
    error = false

    } catch {
    error = true;
    print(e.toString());
    }

  }

}



class ExampleWidget extends StatelessWidget {
  @override
  Widget build(BuildContext context) {

return ChangeNotifierProvider(
      builder: (context) => Model(),
child: Consumer<Model>(builder: (context, model, _) {
return FloatingActionButton(
  child: …
Run Code Online (Sandbox Code Playgroud)

dart flutter flutter-provider

2
推荐指数
1
解决办法
1465
查看次数

通过 addPostFrameCallback 访问 Flutter Provider 表示小部件位于小部件树之外,但 Flutter 检查器显示其他情况

我正在 Flutter 中构建我的第一个大型应用程序,也是我需要状态管理的第一个应用程序,所以我转向了 Provider,这是用于状态管理的推荐包。但是,我在 main.dart 文件和树下声明我的提供者时遇到了一些问题,我想进行更改并与其中一个提供者进行交互,但无论我尝试什么解决方案,我都会遇到相同的错误:“已尝试从窗口小部件树外部收听提供者公开的值。”。即使根据颤振检查器,我尝试对提供程序进行更改的小部件位于小部件树内部(“主屏幕”屏幕来自我更新提供程序的位置),我也会收到此错误。 根据 Flutter 检查器的小部件树

下面我也分享我的代码:main.dart:

import 'package:flutter/material.dart';
import 'package:tic_tac_2/screens/welcome_screen.dart';
import 'package:provider/provider.dart';
import 'package:tic_tac_2/models/restaurants_data.dart';
import 'package:tic_tac_2/models/promotions_data.dart';
import 'package:tic_tac_2/models/user.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return MultiProvider(
      providers: [
        ChangeNotifierProvider<User>(create: (context) => User(),),
        ChangeNotifierProvider<RestaurantsData>(create: (context) => RestaurantsData(),),
        ChangeNotifierProvider<PromotionsData>(create: (context) => PromotionsData(),),
      ],
      child: MaterialApp(
        title: 'Tic Tac',
        theme: ThemeData(
          primarySwatch: Colors.blue,
        ),
        home: WelcomeScreen(),
      ),
    );
  }
}
Run Code Online (Sandbox Code Playgroud)

欢迎_screen.dart:

import 'package:flutter/material.dart';
import 'package:animated_text_kit/animated_text_kit.dart'; …
Run Code Online (Sandbox Code Playgroud)

provider-model flutter flutter-provider

2
推荐指数
1
解决办法
4786
查看次数

flutter_bloc/provider RepositoryProvider vs Provider

我是新手,目前正在研究 DI。
我正在使用flutter_blocprovider包装。

flutter_bloc附带一RepositoryProvider,问题IM问自己现在是什么之探源来Providerprovider

RepositoryProvider存储库有什么特别之处还是只是一种命名策略?

flutter flutter-provider flutter-bloc

2
推荐指数
1
解决办法
854
查看次数

Flutter:如何在 Flutter 中使用 Switch 更改主题 - 我已经使用 Provider 实现了此浅色和深色主题,但无法使用 switch 进行更改

我已经使用提供程序来更改主题,这是浅色和深色主题的代码。我的问题的主要目的是通过开关而不是按钮来更改主题。可以使用“int 模式”正确地通过按钮更改主题。但是当我因为开关而使用“布尔模式”时。该开关需要 true 或 false 值。

如何实现这个开关来改变明暗主题?我需要一个开关,而不是按钮。

import 'package:flutter/material.dart';

class AppStyleModeNotifier extends ChangeNotifier {
  bool mode = true; //0 for light and 1 for dark
  Color primaryBackgroundColor = Colors.white;
  Color appBarBackgroundColor = Colors.cyan[200];
  Color boxColor = Colors.blue[50];
  Color boxTextColor = Colors.indigo;
  Color primaryTextColor = Colors.white;
  Color dashboardColor = Colors.cyan;
  Color dashboardTextColor = Colors.red[600];
  Color dashboardIconColor = Colors.yellow[200];
  //Color typeMessageBoxColor = Colors.grey[200];

  switchMode() {
    if (mode == true) {
      //if it is light mode currently switch to dark
      primaryBackgroundColor = Colors.grey[900]; …
Run Code Online (Sandbox Code Playgroud)

flutter flutter-layout flutter-animation flutter-provider flutter-theme

2
推荐指数
1
解决办法
3976
查看次数

使用 FutureBuilder 和 Provider 在 Flutter 中没有元素的错误状态

使用Provider和FutureBuilder,我刚刚从数据库中删除了数据,同时它也被删除了,它显示一个红色的屏幕,状态不好,没有元素。添加数据没有问题,不显示这个问题。代码如下

堆栈跟踪

ter (12519): ??? EXCEPTION CAUGHT BY WIDGETS LIBRARY ????????????????????????????????????????????????????????????
I/flutter (12519): The following StateError was thrown building ViewNoteScreen(dirty, dependencies:
I/flutter (12519): [_ModalScopeStatus], state: _ViewNoteScreenState#f589b):
I/flutter (12519): Bad state: No element
I/flutter (12519): 
I/flutter (12519): The relevant error-causing widget was:
I/flutter (12519):   ViewNoteScreen file:///C:/Users/Admin/Desktop/daily%2010/provider_note/lib/main.dart:21:46
I/flutter (12519):
I/flutter (12519): When the exception was thrown, this was the stack:
I/flutter (12519): #0      ListMixin.firstWhere (dart:collection/list.dart:148:5)
I/flutter (12519): #1      Providers.findById (package:provider_note/helper/provider.dart:14:19)
I/flutter (12519): #2      _ViewNoteScreenState.build (package:provider_note/screens/view_note.dart:21:35)
I/flutter (12519): #3      StatefulElement.build (package:flutter/src/widgets/framework.dart:4663:28)
I/flutter (12519): …
Run Code Online (Sandbox Code Playgroud)

flutter flutter-provider flutter-futurebuilder

2
推荐指数
1
解决办法
3972
查看次数

在 dispose 方法中获取提供者方法不起作用

我正在尝试访问 dispose 函数中的提供者方法。

@override
void dispose() {
  if (canRemoveData) Provider.of<MyProvider>(context, listen: false).clearData();
  super.dispose();
}
Run Code Online (Sandbox Code Playgroud)

但是当它被调用时我收到错误:

在完成小部件树时抛出以下断言:查找已停用小部件的祖先是不安全的。

此时小部件的元素树的状态不再稳定。

我做错了什么以及如何解决它?

dart flutter flutter-provider

2
推荐指数
1
解决办法
3253
查看次数

Riverpod - 如何将 PreferredSizeWidget 包装在消费者中

我有一个DefaultTabController,我有一个方法可以返回页面List<PreferredSizeWidget>AppBar's 。我希望他们在 a 中观看状态ChangeNotifier,因此我想将它们包装在 a 中Consumer。当我尝试这样做时,我收到如下错误:

“不能将参数类型 'Widget' 分配给参数类型 'PreferredSizeWidget'。”

我怎样才能解决这个问题?

感谢致敬。

dart flutter flutter-provider riverpod

2
推荐指数
1
解决办法
545
查看次数

在小部件树中找不到 Bloc

由于代码太大,我会尝试用文字总结一下。

这是最新的异常:

Error: Could not find the correct Provider<ProdEntriesSearchCubit> above this BlocListener<ProdEntriesSearchCubit, ProdEntriesSearchState> Widget

This likely happens because you used a `BuildContext` that does not include the provider
of your choice. There are a few common scenarios:

- The provider you are trying to read is in a different route.

  Providers are "scoped". So if you insert of provider inside a route, then
  other routes will not be able to access that provider.

- You used a `BuildContext` that is …
Run Code Online (Sandbox Code Playgroud)

flutter-provider flutter-bloc

2
推荐指数
1
解决办法
1734
查看次数