我正在為購物車創建一個柜臺。問題是當一個計數器的值發生變化時,它會影響螢屏上的所有其他計數器。我使用了 ChangeNotifier,但我不知道我做錯了什么。
這是計數器模型
import 'package:flutter/material.dart';
class CounterModel extends ChangeNotifier {
int _count = 0;
int get getCount => _count;
void increment() {
if (_count >= 0) {
_count ;
}
notifyListeners();
}
void decrease() {
if (_count > 0) {
_count--;
}
notifyListeners();
}
}
這是計數器的構建
import 'package:flutter/material.dart';
import 'package:provide_count/counter_model.dart';
import 'package:provider/provider.dart';
class ProvideCount extends StatelessWidget {
@override
Widget build(BuildContext context) {
final counter = Provider.of<CounterModel>(context);
return Row(
children: <Widget>[
IconButton(icon: Icon(Icons.add), onPressed: counter.increment),
Text('${counter.getCount}'),
IconButton(icon: Icon(Icons.remove), onPressed: counter.decrease),
],
);
}
}
這是 main.dart 檔案
import 'package:flutter/material.dart';
import 'package:provide_count/counter_model.dart';
import 'package:provide_count/providecount.dart';
import 'package:provider/provider.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MultiProvider(
providers: [
ChangeNotifierProvider<CounterModel>(create: (_) => CounterModel()),
],
child: MaterialApp(
title: 'Flutter Demo',
home: SafeArea(
top: true,
child: Scaffold(
body: Column(
children: [
ProvideCount(),
ProvideCount(),
ProvideCount(),
],
),
),
),
),
);
}
}
uj5u.com熱心網友回復:
問題是你ChangeNotifierProvider的樹頂有一個。
當您呼叫 時Provider.of<CounterModel>,您正在搜索Provider樹上最近的小部件,這對于所有小部件都是相同的。所以他們同步了。
如果你不希望這種情況發生,你可以停止使用Provider,或者你至少可以ProvideCount用它們自己的包裝Provider:
return MaterialApp(
title: 'Flutter Demo',
home: SafeArea(
top: true,
child: Scaffold(
body: Column(
children: [
ChangeNotifierProvider<CounterModel>(
create: (_) => CounterModel()
child: ProvideCount(),
),
ChangeNotifierProvider<CounterModel>(
create: (_) => CounterModel()
child: ProvideCount(),
),
ChangeNotifierProvider<CounterModel>(
create: (_) => CounterModel()
child: ProvideCount(),
),
],
),
),
),
);
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/471850.html
