我正在尝试制作一个程序,以便按照https://daemoniolabs.wordpress.com/2011/09/09/codificacao-base64-em-c/上给出的说明在屏幕上逐步显示程序,以便将字符串编码为base64。我一直坚持按位AND操作。
正如我所说,我正在上面的链接中关注本教程,但是找不到该特定步骤的任何答案。
import 'package:flutter/material.dart';
import 'dart:io';
void main() => runApp(MainPage());
class MainPage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp (
debugShowCheckedModeBanner: false,
home:Scaffold (
backgroundColor: Colors.white,
body: Column (
children: <Widget> [
Container (
height: 100.0
),
Body(),
]
)
)
);
}
}
class Body extends StatefulWidget {
@override
_BodyState createState() => _BodyState();
}
class _BodyState extends State<Body> {
final String open1 = 'open';
int count = 1;
@override
Widget build(BuildContext context) {
return Expanded (
child: Container (
child: NotificationListener<OverscrollIndicatorNotification> (
onNotification: (OverscrollIndicatorNotification overscroll) {
overscroll.disallowGlow();
},
child: PageView.builder(
reverse: true,
pageSnapping: false,
controller: PageController(viewportFraction: 0.85),
itemCount: count,
itemBuilder: (context, i) {
if (i == 0) {
return GestureDetector (
onTap: () {
Navigator.push(
context,
MaterialPageRoute (
builder: (context) => RPage (
open: open1,
)
),
);
count++;
},
child: Hero (
tag: open1,
child: Padding (
padding: EdgeInsets.only(
left: MediaQuery.of(context).size.height * 0.015,
right: MediaQuery.of(context).size.height * 0.015,
top: MediaQuery.of(context).size.width * 0.08,
bottom: MediaQuery.of(context).size.width * 0.15
),
child: Material (
borderRadius: BorderRadius.circular(40.0),
color: Colors.white,
elevation: 8.0,
child: InkWell (
child: Column (
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget> [
Icon (
Icons.add,
size: 30.0,
color: Colors.black,
)
]
),
)
)
)
)
);
}
else {
return RCard(i);
}
}
)
)
)
);
}
}
class RCard extends StatefulWidget {
final int count;
RCard(this.count);
@override
RCardState createState() => RCardState();
}
class RCardState extends State<RCard> {
int count;
String open2;
@override
void initState() {
super.initState();
count = widget.count;
open2 = 'open$count';
}
@override
Widget build(BuildContext context) {
return Hero (
tag: open2,
child: GestureDetector (
onTap: () {
Navigator.push(
context,
MaterialPageRoute (
builder: (context) => RPage (
open: open2,
)
),
);
},
child: Padding (
padding: EdgeInsets.only(
left: MediaQuery.of(context).size.height * 0.015,
right: MediaQuery.of(context).size.height * 0.015,
top: MediaQuery.of(context).size.width * 0.08,
bottom: MediaQuery.of(context).size.width * 0.15
),
child: Material (
borderRadius: BorderRadius.circular(40.0),
color: Colors.white,
elevation: 8.0,
)
)
),
);
}
}
class RPage extends StatelessWidget {
final String open;
RPage({this.open});
@override
Widget build(BuildContext context) {
return GestureDetector (
child: Hero (
tag: open,
child: Material (
child: Container (
color: Colors.white,
child: Center (
child: RBody()
)
)
)
),
onTap: () {
Navigator.pop(context);
},
);
}
}
class Constants {
static const String add = 'Add';
static const List<String> choices = <String>[
add
];
}
class RBody extends StatefulWidget {
@override
RBodyState createState() => RBodyState();
}
class RBodyState extends State<RBody> {
final String open1 = 'open';
static bool platform;
int count = 1;
@override
Widget build(BuildContext context) {
if (Platform.isIOS) {
platform = true;
}
if (Platform.isAndroid) {
platform = false;
}
return Column (
children: <Widget> [
Container (
height: MediaQuery.of(context).size.height * 0.15,
width: MediaQuery.of(context).size.width * 1.0,
child: Row (
children: <Widget> [
Expanded (
child: Container (
alignment: Alignment(-0.9, 1.0),
child: IconButton (
iconSize: 15.0,
icon: Icon (Icons.arrow_back_ios),
onPressed: () {
Navigator.pop(context);
},
)
),
),
Expanded (
child: Container (
alignment: Alignment(0.9, 1.0),
child: platform ? RotatedBox (
quarterTurns: 1,
child: PopupMenuButton<String> (
onSelected: (_) {
setState(() {
count ++;
});
},
itemBuilder: (BuildContext context) {
return Constants.choices.map(
(String choice) {
return PopupMenuItem<String> (
value: choice,
child: Text(choice)
);
}
).toList();
},
)
) :
PopupMenuButton<String> (
onSelected: (_) {
setState(() {
count ++;
});
},
itemBuilder: (BuildContext context) {
return Constants.choices.map(
(String choice) {
return PopupMenuItem<String> (
value: choice,
child: Text(choice)
);
}
).toList();
},
)
)
)
]
),
),
Title(),
Padding (
padding: EdgeInsets.symmetric(
vertical: platform ? 10.0 : 30.0
),
),
Expanded (
child: Align (
alignment: Alignment.topCenter,
child: Container (
height: MediaQuery.of(context).size.height * 0.34,
width: MediaQuery.of(context).size.height * 1.0,
child: RList(count)
)
)
)
]
);
}
}
class RList extends StatefulWidget {
int count;
RList(this.count);
@override
RListState createState() => RListState();
}
class RListState extends State<RList> {
@override
Widget build(BuildContext context) {
return NotificationListener<OverscrollIndicatorNotification> (
onNotification: (OverscrollIndicatorNotification overscroll) {
overscroll.disallowGlow();
},
child: ListView.builder(
controller: PageController(viewportFraction: 0.85),
itemCount: widget.count,
itemBuilder: (context, i) {
if (i == 0) {
return Container();
} else {
return Cell(i);
}
}
)
);
}
}
class Title extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Container (
color: Colors.white,
height: MediaQuery.of(context).size.height * 0.2,
width: MediaQuery.of(context).size.width * 1.0,
child: Align (
alignment: Alignment.bottomCenter,
child: Material (
color: Colors.white,
child: Text (
'T I T L E',
style: TextStyle (
fontWeight: FontWeight.bold,
fontSize: 20.0,
),
)
)
)
);
}
}
class Cell extends StatefulWidget {
final int count;
Cell(this.count);
@override
CellState createState() => CellState();
}
class CellState extends State<Cell> {
@override
Widget build(BuildContext context) {
return Column (
children: <Widget> [
Material (
color: Colors.white,
child: Text (
'T E X T',
style: TextStyle (
fontSize: 12.0,
fontWeight: FontWeight.bold,
),
)
),
Padding (
padding: EdgeInsets.symmetric(
vertical: MediaQuery.of(context).size.height * 0.025
),
),
]
);
}
}
我希望在屏幕上打印按位AND运算的结果,但是只达到了我在printf函数中写入所需数字的目标。