我剛開始學習使用 Flutter 和 Dart 撰寫代碼。我無法完全理解 Flutter 的作業原理。我在下面分享的代碼沒有錯誤。但我沒有得到我想要的結果。在代碼上,計數器從 0 開始。計數器上有一個文本顯示這個計數器是偶數還是奇數。這是在單擊按鈕時完成的。但是按鈕只能作業一次。計數器增加但文本沒有改變。
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
debugShowCheckedModeBanner: false,
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: const MyHomePage(title: 'Flutter Demo Home Page'),
);
}
}
class MyHomePage extends StatefulWidget {
final String title;
const MyHomePage({
Key? key,
required this.title,
}) : super(key: key);
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
int _counter = 0;
String evenNumber = "Even Number";
String oddNumber = "Odd Number";
void _incrementCounter() {
setState(() {
_counter ;
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(_counter / 2 == 0 ? evenNumber : oddNumber),
Text(
'$_counter',
style: Theme.of(context).textTheme.headline4,
),
],
),
),
floatingActionButton: FloatingActionButton(
onPressed: _incrementCounter,
tooltip: 'Increment',
child: const Icon(Icons.add),
),
);
}
}
uj5u.com熱心網友回復:
改變這一行:
_counter / 2 == 0 ? evenNumber : oddNumber
到:
_counter % 2 == 0 ? evenNumber : oddNumber
'%' 運算子計算您需要的余數。不是計數器值的一半 (_counter/2)。
uj5u.com熱心網友回復:
你沒有得到你想要的結果,因為你使用的是正常division而不是modulo. 有了/你只檢查結果0,并與%您可以檢查,如果數字是偶數。要解決此問題,請將您的Text小部件更改為以下內容。
Text(_counter % 2 == 0 ? evenNumber : oddNumber),
您的完整代碼現在應該如下所示。
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
debugShowCheckedModeBanner: false,
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: const MyHomePage(title: 'Flutter Demo Home Page'),
);
}
}
class MyHomePage extends StatefulWidget {
final String title;
const MyHomePage({
Key? key,
required this.title,
}) : super(key: key);
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
int _counter = 0;
String evenNumber = "Even Number";
String oddNumber = "Odd Number";
void _incrementCounter() {
setState(() {
_counter ;
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(_counter / 2 == 0 ? evenNumber : oddNumber),
Text(
'$_counter',
style: Theme.of(context).textTheme.headline4,
),
],
),
),
floatingActionButton: FloatingActionButton(
onPressed: _incrementCounter,
tooltip: 'Increment',
child: const Icon(Icons.add),
),
);
}
}
uj5u.com熱心網友回復:
是的,我通常使用 if 塊中的 % 運算子,如下所示,但我無法理解錯誤來自運算子,因為我猜它來自代碼塊。那么為什么我不能在這樣的使用中得到我想要的結果呢?
class _MyHomePageState extends State<MyHomePage> {
int _counter = 0;
String evenNumber = "Even Number";
String oddNumber = "Odd Number";
void _incrementCounter() {
setState(() {
_counter ;
if (_counter % 2 == 0){
evenNumber = evenNumber;
} else {
evenNumber = oddNumber;
}
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(widget.title),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(evenNumber),
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/374034.html
