在 Flutter 中调用 notificationListner() 后消费者无法更新

问题描述 投票:0回答:1

我有一堂课是

with
ChangeNotifer。当我调用此类中的方法时,我希望更新列表视图。 这是课程:

class WorkoutProvider with ChangeNotifier
{
  List<Exercise> _workoutList = <Exercise>[];

  ///constructor
  WorkoutProvider();

  ///get&set
  List<Exercise> get workout => _workoutList;

  set workout(List<Exercise> value) {
    _workoutList = value;
  }
  ///removing an exercise to the list
  void removeExercise(Exercise exercise)
  {
    _workoutList.remove(exercise);
    print("deleting");
    notifyListeners();
  }
}

这是列表视图:

myPro = Provider.of<WorkoutProvider>(context);


body:Consumer<WorkoutProvider>(
        builder: (BuildContext context, WorkoutProvider value, Widget? child)
        {
          print("building cons");
          return ListView.builder(
            padding: EdgeInsets.symmetric(horizontal: 30, vertical: 10),
            itemCount: value.workout.length,
            itemBuilder: (context, index) =>
                Container(
                    margin: EdgeInsets.symmetric(vertical: 3),
                    child: exerciseCard(value.workout.elementAt(index))),
          );
        },
      ),

/// used to delete the exercise from the list of exercises
  Widget buildDeleteExerciseBt(Exercise delExercise)
  {
    return IconButton(
        onPressed: (){
          myPro.removeExercise(delExercise);
        },
        icon: Icon(
          Icons.delete,
          color: Colors.red,
        ));
  }

检查后,它正在从课堂上删除练习,但 UI 没有更新。

这里是提供商的注册:

 Future<void> main() async {
GlobalContextService.navigatorKey = GlobalKey<NavigatorState>();
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp();
runApp(
  MultiProvider(
    providers: [
      Provider<WorkoutProvider>(create: (_) => WorkoutProvider()),
    ],
    child: MaterialApp(
      debugShowCheckedModeBanner: false,
      routes: {
        '/' : (context) => AlreadyLoggedChecker(),
        '/login-screen': (context) => LoginScreen(),
        '/workout-review' : (context) => WorkoutReviewScreen(),
        '/create-training' : (context) => TrainingCreateScreen(),
      },
      initialRoute: '/',
    ),
  ),
);

}

我尝试添加一些 print(),这样当调用具有 notificationlistners() 的方法时,消费者就不会构建。

flutter dart listview provider consumer
1个回答
0
投票

显然,在

ChangeNotifierProvider
中注册提供商时,我应该使用
Provider
而不是
main

© www.soinside.com 2019 - 2024. All rights reserved.