Futter部品内部状態管理小結のVueを実現するv-model機能
Futter部品内部状態管理
本文は Futter部品の内部状態管理のまとめは、部品の基礎から部品の状態管理まで、過程で類似のものを実現する。 Vueの v-modelの機能です。
widgetベース
widget(部品)
如き Reactには全てのものがセットされています。 Javaにある凡てのものは対象であり、 Futterで見ることができるのはすべてwidgetです。ボタンやテキストボックスなどです。
Futterの内部はもう私達のためにいくつかの基礎を作ってくれました。例えば: Text:これはテキスト部品で、テキストを置くためのものです。 Row、 Column:行列構成要素 コンタイナー: HTMLの div
状態
状態はwidget内にあるメンバー変数として理解できます。
無状態widget
無状態とは、メンバー変数が変更できない、すなわち使用することです。 final修飾子は定数であり、無状態コンポーネントを作成するステップは以下の通りである。
クラスの継承を作成します。 Stteless Widget
実現する build方法(類比書) HTML+ CSS)
状態があるということは、このwidget内部のメンバー変数は使わなくてもいいです。 final修繕符を通過します。 set State()メソッドがメンバー変数の値を変更した場合、widgetの状態変化を引き起こして絵を描き直す(例えばテキスト枠バインディング変数A、変数Aを変更してテキストボックスの値を変更することで、ここでの変数Aは可変状態として理解できる)
状態のあるwidgetを実現しました。 Stteful Widgetと Stateの二つのサブクラスが実現され、ステップは以下の通りである。作成します。 Widget類、継承 Stteful Widget
継承を作成します。 Stateのクラス
は Stateクラスで状態(メンバー変数)を作成し、実行します。 build方法(画面を描く)
widget自己管理状態
上の状態部品の例と同じです。直接コードを入れます。
この小節は一つの和を実現するであろう。 Vueの v-modelのような機能で、親部品管理子のステップは以下の通りです。は、サブ構成要素として無状態構成要素を作成し、構成関数において受信状態の値と状態変化が必要な場合のコールバック関数 を作成する。は、親部品として状態構成要素を作成し、管理が必要な状態を定義する 。は、親部品にサブコンポーネントを作成し、結合状態とコールバックイベントを作成する。
このような管理モードでは、親管理のサブ部品との違いは、サブ部品も自分の状態を管理しなければならないので、サブ部品も状態のある部品となる(違い)。
ステップは以下の通りですは、サブコンポーネントとして「状態コンポーネント」を作成し、構成関数において受信状態の値と状態の変化が必要な場合のコールバック関数 を作成する。は、サブコンポーネントの内部の状態(複数のステップ)を定義する である。は、親部品として状態構成要素を作成し、管理が必要な状態を定義する 。は、親部品にサブコンポーネントを作成し、結合状態とコールバックイベントを作成する。
以上は小编が绍介したFutter部品の内部状态管理小结之がVueのv-model机能を実现しました。皆さんに助けてほしいです。もし何かご质问がありましたら、メッセージをください。小编はすぐにご返事します。ここでも私たちのサイトを応援してくれてありがとうございます。
本文があなたのためになると思ったら、転載を歓迎します。出所を明記してください。ありがとうございます。
本文は Futter部品の内部状態管理のまとめは、部品の基礎から部品の状態管理まで、過程で類似のものを実現する。 Vueの v-modelの機能です。
widgetベース
widget(部品)
如き Reactには全てのものがセットされています。 Javaにある凡てのものは対象であり、 Futterで見ることができるのはすべてwidgetです。ボタンやテキストボックスなどです。
Futterの内部はもう私達のためにいくつかの基礎を作ってくれました。例えば:
状態はwidget内にあるメンバー変数として理解できます。
無状態widget
無状態とは、メンバー変数が変更できない、すなわち使用することです。 final修飾子は定数であり、無状態コンポーネントを作成するステップは以下の通りである。
クラスの継承を作成します。 Stteless Widget
実現する build方法(類比書) HTML+ CSS)
import 'package:flutter/material.dart';
class StateLessDemoWidget extends StatelessWidget {
/// final ,
/// This class (or a class which this class inherits from) is marked as '@immutable', but one or more of its instance fields are not final: StateLessDemoWidget.listInde
/// int [listIndex];
@override
Widget build(BuildContext context) {
return Container();
}
}
状態widgetがあります状態があるということは、このwidget内部のメンバー変数は使わなくてもいいです。 final修繕符を通過します。 set State()メソッドがメンバー変数の値を変更した場合、widgetの状態変化を引き起こして絵を描き直す(例えばテキスト枠バインディング変数A、変数Aを変更してテキストボックスの値を変更することで、ここでの変数Aは可変状態として理解できる)
状態のあるwidgetを実現しました。 Stteful Widgetと Stateの二つのサブクラスが実現され、ステップは以下の通りである。
import 'package:flutter/material.dart';
/// [StatefulWidget] widget
/// ,
/// ,
class FavoriteWidget extends StatefulWidget {
@override
_FavoriteWidgetState createState() => _FavoriteWidgetState();
}
/// [State] ,FavoriteWidget
/// [_isFavorited]
class _FavoriteWidgetState extends State<FavoriteWidget> {
bool _isFavorited = true;
@override
Widget build(BuildContext context) {
return Row(
mainAxisSize: MainAxisSize.min,
children: [
Container(
padding: EdgeInsets.all(0),
child: IconButton(
/// [_isFavorited] true Icons.star Icons.star_border
icon: (_isFavorited ? Icon(Icons.star) : Icon(Icons.star_border)),
color: Colors.red[500],
/// ,
onPressed: _toggleFavorite,
),
),
],
);
}
/// [_isFavorited]
void _toggleFavorite() {
setState(() {
if (_isFavorited) {
_isFavorited = false;
} else {
_isFavorited = true;
}
});
}
}
widgetで内部状態を管理する3つの方法widget自己管理状態
上の状態部品の例と同じです。直接コードを入れます。
import 'package:flutter/material.dart';
class TapboxA extends StatefulWidget {
@override
_TapboxAState createState() => _TapboxAState();
}
/// [TapboxA] [_active], [_handleTap] [_active]
class _TapboxAState extends State<TapboxA> {
bool _active = false;
void _handleTap() {
setState(() {
_active = !_active;
});
}
Widget build(BuildContext context) {
return GestureDetector(
onTap: _handleTap,
child: Center(
child: Text(
_active ? 'Active' : 'Inactive',
),
),
);
}
}
父widget管理子widget状態この小節は一つの和を実現するであろう。 Vueの v-modelのような機能で、親部品管理子のステップは以下の通りです。
import 'package:flutter/material.dart';
/// TapboxB
///
/// [ParentWidget] [_active] , [TapboxB] [active]
/// [TapboxB] , [onChanged] , [_active]
/// [TapboxB] [active]
///
/// Vue v-model , Vue v-model
//------------------------ ParentWidget --------------------------------
class ParentWidget extends StatefulWidget {
@override
_ParentWidgetState createState() => _ParentWidgetState();
}
class _ParentWidgetState extends State<ParentWidget> {
bool _active = false;
void _handleTapboxChanged(bool newValue) {
setState(() {
_active = newValue;
});
}
@override
Widget build(BuildContext context) {
return Container(
child: TapboxB(
active: _active,
onChanged: _handleTapboxChanged,
),
);
}
}
//------------------------- TapboxB ----------------------------------
// [TapboxB] , final
class TapboxB extends StatelessWidget {
// onChanged,
TapboxB({Key key, this.active: false, @required this.onChanged})
: super(key: key);
final bool active;
final ValueChanged<bool> onChanged;
void _handleTap() {
// active
onChanged(!active);
}
Widget build(BuildContext context) {
return GestureDetector(
//
onTap: _handleTap,
child: Center(
child: Text(
// active
active ? 'Active' : 'Inactive',
),
),
);
}
}
ハイブリッド管理このような管理モードでは、親管理のサブ部品との違いは、サブ部品も自分の状態を管理しなければならないので、サブ部品も状態のある部品となる(違い)。
ステップは以下の通りです
import 'package:flutter/material.dart';
//---------------------------- ParentWidget ----------------------------
class ParentWidget extends StatefulWidget {
@override
_ParentWidgetState createState() => _ParentWidgetState();
}
class _ParentWidgetState extends State<ParentWidget> {
bool _active = false;
void _handleTapboxChanged(bool newValue) {
setState(() {
_active = newValue;
});
}
@override
Widget build(BuildContext context) {
return Container(
child: TapboxC(
active: _active,
onChanged: _handleTapboxChanged,
),
);
}
}
//----------------------------- TapboxC ------------------------------
class TapboxC extends StatefulWidget {
TapboxC({Key key, this.active: false, @required this.onChanged})
: super(key: key);
final bool active;
final ValueChanged<bool> onChanged;
_TapboxCState createState() => _TapboxCState();
}
class _TapboxCState extends State<TapboxC> {
/// [TapboxC] , [_highlight]
bool _highlight = false;
void _handleTapDown(TapDownDetails details) {
setState(() {
_highlight = true;
});
}
void _handleTapUp(TapUpDetails details) {
setState(() {
_highlight = false;
});
}
void _handleTapCancel() {
setState(() {
_highlight = false;
});
}
void _handleTap() {
//
widget.onChanged(!widget.active);
}
Widget build(BuildContext context) {
return GestureDetector(
// onXXX
onTapDown: _handleTapDown,
onTapUp: _handleTapUp,
onTap: _handleTap,
onTapCancel: _handleTapCancel,
child: Container(
child: Center(
child: Text(widget.active ? 'Active' : 'Inactive',
style: TextStyle(fontSize: 32.0, color: Colors.white)),
),
width: 200.0,
height: 200.0,
decoration: BoxDecoration(
color: widget.active ? Colors.lightGreen[700] : Colors.grey[600],
//
border: _highlight
? Border.all(
color: Colors.teal[700],
width: 10.0,
)
: null,
),
),
);
}
}
締め括りをつける以上は小编が绍介したFutter部品の内部状态管理小结之がVueのv-model机能を実现しました。皆さんに助けてほしいです。もし何かご质问がありましたら、メッセージをください。小编はすぐにご返事します。ここでも私たちのサイトを応援してくれてありがとうございます。
本文があなたのためになると思ったら、転載を歓迎します。出所を明記してください。ありがとうございます。