我刚刚才刚接触几天。
我正在尝试提供者模式,并发现它易于使用和理解。但是,在实施后我发现按钮需要按两次才能更新状态。
我到处检查过,比如双重函数调用,似乎没有错。这是代码。
class CounterPage extends StatelessWidget {
final changeName = TextEditingController();
final changeNumber = TextEditingController();
@override
Widget build(BuildContext context) {
final CounterBloc counterBloc = Provider.of<CounterBloc>(context);
return Scaffold(
appBar:
AppBar(
title: Text(counterBloc.name.toString()),
),
body: Container(
child: Center(
child: Column(
children: <Widget>[
Text(
counterBloc.counter.toString(),
style: TextStyle(fontSize: 62.0),
),
TextField(
controller: changeName,
),
TextField(
controller: changeNumber,
),
IncrementButton( changeNumber.text, changeName.text),
],
),
),
),
);
}
}
命名是错误的,增量按钮的用法是,只需传递两个字符串并使用提供程序设置到 UI 中的某些地方。
这就是我的增量按钮的样子,简单没什么花哨的
class IncrementButton extends StatelessWidget{
final String name;
final String number;
IncrementButton(this.name, this.number);
@override
Widget build(BuildContext context) {
final CounterBloc counterBloc = Provider.of<CounterBloc>(context);
return FlatButton.icon(
icon: Icon(Icons.add),
label: Text("Add"),
onPressed: ()=>counterBloc.nameAndCounter(name,number),
);
}
}
这就是 counterBloc 的样子
import 'package:flutter/material.dart';
class CounterBloc extends ChangeNotifier{
String _counter = "10";
String _name ="Alphhit";
String get counter => _counter;
String get name => _name;
nameAndCounter( String name, String digit){
_name = name;
_counter = digit;
notifyListeners();
}
}
只有在按下按钮两次后,状态才会更新和反映?有人可以告诉我我做错了什么吗?