19 Commits
master ... app

Author SHA1 Message Date
toly
838d6aa668 24 2023-12-11 08:48:30 +08:00
toly
be554094cd 24 2023-12-11 08:47:35 +08:00
toly
7b16b52761 24 2023-12-10 15:25:12 +08:00
toly
2ceed8b9b5 v10 2023-11-26 09:04:44 +08:00
toly
6e8d926693 v10 2023-11-20 20:05:05 +08:00
toly
8de38299e2 v10 2023-11-13 16:15:49 +08:00
toly
5396712cf9 v9 2023-11-11 11:37:41 +08:00
toly
8fb4bf57d6 v8 2023-11-08 09:35:29 +08:00
toly
88cd6fb3b4 v7 2023-11-04 08:48:16 +08:00
toly
8ef81ddb33 v7 2023-10-30 16:12:23 +08:00
toly
a1a70fae78 v6 2023-10-27 17:25:31 +08:00
toly
95e510d814 Merge remote-tracking branch 'origin/app' into app
# Conflicts:
#	pubspec.yaml
2023-10-25 15:05:38 +08:00
toly
39c38ca975 v5。 2023-10-24 15:52:15 +08:00
toly
9c91d7d7f3 v5-old 2023-10-24 13:53:28 +08:00
toly
9313882748 v5 2023-10-24 12:17:11 +08:00
toly
0b3126182e v5 2023-10-24 07:47:09 +08:00
toly
8a95ed4417 v5 2023-10-23 20:01:59 +08:00
toly
e26099ac18 v4 2023-10-23 10:17:40 +08:00
toly
bcba7ebae2 v3 2023-10-21 10:10:48 +08:00
652 changed files with 26830 additions and 12620 deletions

View File

@@ -1,27 +0,0 @@
import 'package:flutter/material.dart';
import 'pages/home_page.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
debugShowCheckedModeBanner: false,
theme: ThemeData(
colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
useMaterial3: true,
),
home: const HomePage(),
);
}
}

View File

@@ -1,67 +0,0 @@
import 'dart:math';
import 'package:flutter/material.dart';
class ColorAddPage extends StatefulWidget {
const ColorAddPage({super.key});
@override
State<ColorAddPage> createState() => _ColorAddPageState();
}
class _ColorAddPageState extends State<ColorAddPage> {
late Color _color;
@override
void initState() {
super.initState();
_color = randomColor;
}
@override
Widget build(BuildContext context) {
String text = '# ${_color.value.toRadixString(16)}';
return Scaffold(
appBar: AppBar(
title: Text('添加颜色'),
actions: [IconButton(onPressed: _selectColor, icon: Icon(Icons.check ))],
),
body: Padding(
padding: const EdgeInsets.symmetric(horizontal: 16.0,vertical: 20),
child: Row(
children: [
Expanded(child: Text(text,style: TextStyle(color: _color,fontSize: 24,letterSpacing: 4),)),
Container(
margin: EdgeInsets.only(left: 10),
width: 40,
height: 40,
child: Icon(
Icons.sell_outlined,
color: Colors.white,
),
decoration: BoxDecoration(
color: _color,
borderRadius: BorderRadius.circular(8),
),
),
],
),
),
);
}
Random _random = Random();
Color get randomColor {
return Color.fromARGB(
255,
_random.nextInt(256),
_random.nextInt(256),
_random.nextInt(256),
);
}
void _selectColor() {
Navigator.of(context).pop(_color);
}
}

View File

@@ -1,51 +0,0 @@
import 'package:flutter/material.dart';
import 'color_add_page.dart';
import '../../../common/components/colors_panel.dart';
import '../../../common/pages/stl_color_page.dart';
class HomePage extends StatefulWidget {
const HomePage({super.key});
@override
State<HomePage> createState() => _HomePageState();
}
class _HomePageState extends State<HomePage> {
final List<Color> _colors = [
Colors.red, Colors.black, Colors.blue, Colors.green, Colors.orange,
Colors.pink, Colors.purple, Colors.indigo, Colors.amber, Colors.cyan,
Colors.redAccent, Colors.grey, Colors.blueAccent, Colors.greenAccent, Colors.orangeAccent,
Colors.pinkAccent, Colors.purpleAccent, Colors.indigoAccent, Colors.amberAccent, Colors.cyanAccent,
];
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title:const Text('颜色主页')),
floatingActionButton: FloatingActionButton(
onPressed: _toAddPage,
child: const Icon(Icons.add),
),
body: ColorsPanel(
colors: _colors,
onSelect: _selectColor,
),
);
}
void _selectColor(Color color){
Route route = MaterialPageRoute(builder: (ctx) => StlColorPage(color: color));
Navigator.of(context).push(route);
}
void _toAddPage() async {
Route<Color> route = MaterialPageRoute<Color>(builder: (ctx) => const ColorAddPage());
Color? color = await Navigator.of(context).push(route);
if (color != null) {
setState(() {
_colors.add(color);
});
}
}
}

View File

@@ -1,60 +0,0 @@
import 'package:flutter/material.dart';
import 'pages/color_add_page.dart';
import '../../common/pages/stl_color_page.dart';
import 'pages/empty_page.dart';
import 'pages/home_page.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
debugShowCheckedModeBanner: false,
theme: ThemeData(
colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
useMaterial3: true,
),
routes: routeMap,
// initialRoute: '/add_color',
onUnknownRoute: _onUnknownRoute,
onGenerateRoute: _onGenerateRoute,
);
}
/// 路由映射 [字符串 --> 组件构造器]
Map<String, WidgetBuilder> get routeMap => {
'/': (ctx) => const HomePage(),
'/add_color': (ctx) => const ColorAddPage(),
};
/// 根据路由配置 [settings] 创建路由
Route? _onGenerateRoute(RouteSettings settings) {
String? name = settings.name;
Widget? child;
if (name == '/color_detail') {
Color color = settings.arguments as Color;
child = StlColorPage(color: color);
}
if (child != null) {
return MaterialPageRoute(
builder: (ctx) => child!,
settings: settings,
);
}
return null;
}
Route? _onUnknownRoute(RouteSettings settings) {
return MaterialPageRoute(
builder: (ctx) => const EmptyPage(),
settings: settings,
);
}
}

View File

@@ -1,67 +0,0 @@
import 'dart:math';
import 'package:flutter/material.dart';
class ColorAddPage extends StatefulWidget {
const ColorAddPage({super.key});
@override
State<ColorAddPage> createState() => _ColorAddPageState();
}
class _ColorAddPageState extends State<ColorAddPage> {
late Color _color;
@override
void initState() {
super.initState();
_color = randomColor;
}
@override
Widget build(BuildContext context) {
String text = '# ${_color.value.toRadixString(16)}';
return Scaffold(
appBar: AppBar(
title: Text('添加颜色'),
actions: [IconButton(onPressed: _selectColor, icon: Icon(Icons.check ))],
),
body: Padding(
padding: const EdgeInsets.symmetric(horizontal: 16.0,vertical: 20),
child: Row(
children: [
Expanded(child: Text(text,style: TextStyle(color: _color,fontSize: 24,letterSpacing: 4),)),
Container(
margin: EdgeInsets.only(left: 10),
width: 40,
height: 40,
child: Icon(
Icons.sell_outlined,
color: Colors.white,
),
decoration: BoxDecoration(
color: _color,
borderRadius: BorderRadius.circular(8),
),
),
],
),
),
);
}
Random _random = Random();
Color get randomColor {
return Color.fromARGB(
255,
_random.nextInt(256),
_random.nextInt(256),
_random.nextInt(256),
);
}
void _selectColor() {
Navigator.of(context).pop(_color);
}
}

View File

@@ -1,49 +0,0 @@
import 'package:flutter/material.dart';
import 'color_add_page.dart';
import '../../../common/components/colors_panel.dart';
import '../../../common/pages/stl_color_page.dart';
class HomePage extends StatefulWidget {
const HomePage({super.key});
@override
State<HomePage> createState() => _HomePageState();
}
class _HomePageState extends State<HomePage> {
final List<Color> _colors = [
Colors.red, Colors.black, Colors.blue, Colors.green, Colors.orange,
Colors.pink, Colors.purple, Colors.indigo, Colors.amber, Colors.cyan,
Colors.redAccent, Colors.grey, Colors.blueAccent, Colors.greenAccent, Colors.orangeAccent,
Colors.pinkAccent, Colors.purpleAccent, Colors.indigoAccent, Colors.amberAccent, Colors.cyanAccent,
];
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title:const Text('颜色主页 V2')),
floatingActionButton: FloatingActionButton(
onPressed: _toAddPage,
child: const Icon(Icons.add),
),
body: ColorsPanel(
colors: _colors,
onSelect: _selectColor,
),
);
}
void _selectColor(Color color){
Navigator.of(context).pushNamed('/color_detail1',arguments: color);
}
void _toAddPage() async {
dynamic color = await Navigator.of(context).pushNamed('/add_color');
if (color != null) {
setState(() {
_colors.add(color);
});
}
}
}

View File

@@ -1,28 +0,0 @@
import 'package:flutter/material.dart';
import 'router1/router1.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
debugShowCheckedModeBanner: false,
theme: ThemeData(
colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
useMaterial3: true,
),
routes: Router1.routeMap,
navigatorKey: Router1.globalNavKey,
onUnknownRoute: Router1.onUnknownRoute,
initialRoute: Router1.initialRoute,
onGenerateRoute: Router1.onGenerateRoute,
);
}
}

View File

@@ -1,67 +0,0 @@
import 'dart:math';
import 'package:flutter/material.dart';
class ColorAddPage extends StatefulWidget {
const ColorAddPage({super.key});
@override
State<ColorAddPage> createState() => _ColorAddPageState();
}
class _ColorAddPageState extends State<ColorAddPage> {
late Color _color;
@override
void initState() {
super.initState();
_color = randomColor;
}
@override
Widget build(BuildContext context) {
String text = '# ${_color.value.toRadixString(16)}';
return Scaffold(
appBar: AppBar(
title: Text('添加颜色'),
actions: [IconButton(onPressed: _selectColor, icon: Icon(Icons.check ))],
),
body: Padding(
padding: const EdgeInsets.symmetric(horizontal: 16.0,vertical: 20),
child: Row(
children: [
Expanded(child: Text(text,style: TextStyle(color: _color,fontSize: 24,letterSpacing: 4),)),
Container(
margin: EdgeInsets.only(left: 10),
width: 40,
height: 40,
child: Icon(
Icons.sell_outlined,
color: Colors.white,
),
decoration: BoxDecoration(
color: _color,
borderRadius: BorderRadius.circular(8),
),
),
],
),
),
);
}
Random _random = Random();
Color get randomColor {
return Color.fromARGB(
255,
_random.nextInt(256),
_random.nextInt(256),
_random.nextInt(256),
);
}
void _selectColor() {
Navigator.of(context).pop(_color);
}
}

View File

@@ -1,49 +0,0 @@
import 'package:flutter/material.dart';
import '../router1/router1.dart';
import '../../../common/components/colors_panel.dart';
class HomePage extends StatefulWidget {
const HomePage({super.key});
@override
State<HomePage> createState() => _HomePageState();
}
class _HomePageState extends State<HomePage> {
final List<Color> _colors = [
Colors.red, Colors.black, Colors.blue, Colors.green, Colors.orange,
Colors.pink, Colors.purple, Colors.indigo, Colors.amber, Colors.cyan,
Colors.redAccent, Colors.grey, Colors.blueAccent, Colors.greenAccent, Colors.orangeAccent,
Colors.pinkAccent, Colors.purpleAccent, Colors.indigoAccent, Colors.amberAccent, Colors.cyanAccent,
];
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title:const Text('颜色主页 V3')),
floatingActionButton: FloatingActionButton(
onPressed: _toAddPage,
child: const Icon(Icons.add),
),
body: ColorsPanel(
colors: _colors,
onSelect: _selectColor,
),
);
}
void _selectColor(Color color){
Router1.nav.pushNamed(Router1.kColorDetail,arguments: color);
}
void _toAddPage() async {
dynamic color = await Router1.nav.pushNamed(Router1.kAddColor);
if (color != null) {
setState(() {
_colors.add(color);
});
}
}
}

View File

@@ -1,56 +0,0 @@
import 'package:flutter/material.dart';
import '../../../common/pages/stl_color_page.dart';
import '../pages/color_add_page.dart';
import '../pages/empty_page.dart';
import '../pages/home_page.dart';
class Router1 {
/// 主页面 [HomePage]
static const String kHome = '/';
/// 颜色详情页 [StlColorPage]
static const String kColorDetail = '${kHome}color_detail';
/// 添加颜色页 [ColorAddPage]
static const String kAddColor = '${kHome}add_color';
static String get initialRoute => kHome;
static final GlobalKey<NavigatorState> globalNavKey = GlobalKey();
static NavigatorState get nav => globalNavKey.currentState!;
/// 路由映射 [字符串 --> 组件构造器]
static Map<String, WidgetBuilder> get routeMap => {
kHome: (ctx) => const HomePage(),
kAddColor: (ctx) => const ColorAddPage(),
};
/// 根据路由配置 [settings] 创建路由
static Route? onGenerateRoute(RouteSettings settings) {
String? name = settings.name;
Widget? child;
if (name == kColorDetail) {
Color color = settings.arguments as Color;
child = StlColorPage(color: color);
}
if (child != null) {
return MaterialPageRoute(
builder: (ctx) => child!,
settings: settings,
);
}
return null;
}
static Route? onUnknownRoute(RouteSettings settings) {
return MaterialPageRoute(
builder: (ctx) => const EmptyPage(),
settings: settings,
);
}
}

View File

@@ -1,36 +0,0 @@
import 'package:flutter/material.dart';
void main() {
runApp(const OverlayPage());
}
class OverlayPage extends StatelessWidget{
const OverlayPage({super.key});
@override
Widget build(BuildContext context) {
final OverlayEntry home = OverlayEntry(builder: (BuildContext context) => const HomePage());
return Directionality(
textDirection: TextDirection.ltr,
child: Overlay(
initialEntries: [home],
),
);
}
}
class HomePage extends StatelessWidget {
const HomePage({super.key});
@override
Widget build(BuildContext context) {
return const ColoredBox(
color: Colors.white,
child: Align(
child: FlutterLogo(size: 60,),
),
);
}
}

View File

@@ -1,54 +0,0 @@
import 'package:flutter/material.dart';
void main() {
runApp(const OverlayPage());
}
class OverlayPage extends StatelessWidget{
const OverlayPage({super.key});
@override
Widget build(BuildContext context) {
final OverlayEntry home = OverlayEntry(builder: (BuildContext context) => const HomePage());
final OverlayEntry circle = OverlayEntry(builder: (BuildContext context) => const Center(child: Circle()));
return Directionality(
textDirection: TextDirection.ltr,
child: Overlay(
initialEntries: [home,circle],
),
);
}
}
class HomePage extends StatelessWidget {
const HomePage({super.key});
@override
Widget build(BuildContext context) {
return const ColoredBox(
color: Colors.white,
child: Align(
child: FlutterLogo(
size: 60,
),
),
);
}
}
class Circle extends StatelessWidget {
const Circle({super.key});
@override
Widget build(BuildContext context) {
return Container(
width: 20,
height: 20,
decoration: const BoxDecoration(
color: Colors.redAccent,
shape: BoxShape.circle
),
);
}
}

View File

@@ -1,59 +0,0 @@
import 'package:flutter/material.dart';
void main() {
runApp(const OverlayPage());
}
class OverlayPage extends StatelessWidget{
const OverlayPage({super.key});
@override
Widget build(BuildContext context) {
final OverlayEntry home =
OverlayEntry(builder: (BuildContext context) => const HomePage());
final OverlayEntry circle = OverlayEntry(
builder: (BuildContext context) => Positioned(
top: 50,
left: 50,
child: const Circle(),
));
return Directionality(
textDirection: TextDirection.ltr,
child: Overlay(
initialEntries: [home, circle],
),
);
}
}
class HomePage extends StatelessWidget {
const HomePage({super.key});
@override
Widget build(BuildContext context) {
return const ColoredBox(
color: Colors.white,
child: Align(
child: FlutterLogo(
size: 60,
),
),
);
}
}
class Circle extends StatelessWidget {
const Circle({super.key});
@override
Widget build(BuildContext context) {
return Container(
width: 20,
height: 20,
decoration:
const BoxDecoration(color: Colors.redAccent, shape: BoxShape.circle),
);
}
}

View File

@@ -1,77 +0,0 @@
import 'package:flutter/material.dart';
void main() {
runApp(const OverlayPage());
}
class OverlayPage extends StatefulWidget {
const OverlayPage({super.key});
@override
State<OverlayPage> createState() => _OverlayPageState();
}
class _OverlayPageState extends State<OverlayPage> {
double _left = 0;
double _top = 0;
@override
Widget build(BuildContext context) {
final OverlayEntry home =
OverlayEntry(builder: (BuildContext context) => const HomePage());
final OverlayEntry circle = OverlayEntry(
builder: (BuildContext context) => Positioned(
top: 50,
left: 50,
child: GestureDetector(
onPanUpdate: _updatePosition,
child: const Circle(),
),
));
return Directionality(
textDirection: TextDirection.ltr,
child: Overlay(
initialEntries: [home, circle],
),
);
}
void _updatePosition(DragUpdateDetails details) {
setState(() {
_top += details.delta.dy;
_left += details.delta.dx;
});
}
}
class HomePage extends StatelessWidget {
const HomePage({super.key});
@override
Widget build(BuildContext context) {
return const ColoredBox(
color: Colors.white,
child: Align(
child: FlutterLogo(
size: 60,
),
),
);
}
}
class Circle extends StatelessWidget {
const Circle({super.key});
@override
Widget build(BuildContext context) {
return Container(
width: 20,
height: 20,
decoration:
const BoxDecoration(color: Colors.redAccent, shape: BoxShape.circle),
);
}
}

View File

@@ -1,127 +0,0 @@
import 'package:flutter/material.dart';
void main() {
runApp(const OverlayPage());
}
class OverlayPage extends StatefulWidget {
const OverlayPage({super.key});
@override
State<OverlayPage> createState() => _OverlayPageState();
}
class _OverlayPageState extends State<OverlayPage> {
@override
Widget build(BuildContext context) {
final OverlayEntry home = OverlayEntry(builder: (BuildContext context) => const HomePage());
return Directionality(
textDirection: TextDirection.ltr,
child: Overlay(
initialEntries: [home],
),
);
}
}
class HomePage extends StatefulWidget {
const HomePage({super.key});
@override
State<HomePage> createState() => _HomePageState();
}
class _HomePageState extends State<HomePage> {
OverlayEntry? entry;
@override
Widget build(BuildContext context) {
return ColoredBox(
color: Colors.white,
child: Align(
child: GestureDetector(
onTap: _toggle,
child: const FlutterLogo(
size: 60,
),
),
),
);
}
void _toggle() {
if(entry==null){
entry = _createPoint();
Overlay.of(context).insert(entry!);
}else{
entry!.remove();
entry = null;
}
}
OverlayEntry _createPoint() {
return OverlayEntry(
builder: (BuildContext context) => Positioned(
width: 20,
height: 20,
left: 20,
top: 20,
child: GestureDetector(child: const Circle()),
),
);
}
}
class ClickShowPage extends StatefulWidget {
const ClickShowPage({super.key});
@override
State<ClickShowPage> createState() => _ClickShowPageState();
}
class _ClickShowPageState extends State<ClickShowPage> {
Offset _position = Offset.zero;
@override
Widget build(BuildContext context) {
return GestureDetector(
onTap: _addPoint,
onTapDown: _onTapDown,
);
}
void _addPoint() {
OverlayEntry entry = _createPoint();
Overlay.of(context).insert(entry);
}
OverlayEntry _createPoint() {
return OverlayEntry(
builder: (BuildContext context) => Positioned(
width: 20,
height: 20,
left: _position.dx - 10,
top: _position.dy - 10,
child: Circle()),
);
}
void _onTapDown(TapDownDetails details) {
_position = details.localPosition;
}
}
class Circle extends StatelessWidget {
const Circle({super.key});
@override
Widget build(BuildContext context) {
return Container(
width: 20,
height: 20,
decoration:
const BoxDecoration(color: Colors.redAccent, shape: BoxShape.circle),
);
}
}

View File

@@ -1,27 +0,0 @@
import 'package:flutter/material.dart';
import 'pages/home_page.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
debugShowCheckedModeBanner: false,
theme: ThemeData(
colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
useMaterial3: true,
),
home: const HomePage(),
);
}
}

View File

@@ -1,67 +0,0 @@
import 'dart:math';
import 'package:flutter/material.dart';
class ColorAddPage extends StatefulWidget {
const ColorAddPage({super.key});
@override
State<ColorAddPage> createState() => _ColorAddPageState();
}
class _ColorAddPageState extends State<ColorAddPage> {
late Color _color;
@override
void initState() {
super.initState();
_color = randomColor;
}
@override
Widget build(BuildContext context) {
String text = '# ${_color.value.toRadixString(16)}';
return Scaffold(
appBar: AppBar(
title: Text('添加颜色'),
actions: [IconButton(onPressed: _selectColor, icon: Icon(Icons.check ))],
),
body: Padding(
padding: const EdgeInsets.symmetric(horizontal: 16.0,vertical: 20),
child: Row(
children: [
Expanded(child: Text(text,style: TextStyle(color: _color,fontSize: 24,letterSpacing: 4),)),
Container(
margin: EdgeInsets.only(left: 10),
width: 40,
height: 40,
child: Icon(
Icons.sell_outlined,
color: Colors.white,
),
decoration: BoxDecoration(
color: _color,
borderRadius: BorderRadius.circular(8),
),
),
],
),
),
);
}
Random _random = Random();
Color get randomColor {
return Color.fromARGB(
255,
_random.nextInt(256),
_random.nextInt(256),
_random.nextInt(256),
);
}
void _selectColor() {
Navigator.of(context).pop(_color);
}
}

View File

@@ -1,51 +0,0 @@
import 'package:flutter/material.dart';
import 'color_add_page.dart';
import '../../../common/components/colors_panel.dart';
import '../../../common/pages/stl_color_page.dart';
class HomePage extends StatefulWidget {
const HomePage({super.key});
@override
State<HomePage> createState() => _HomePageState();
}
class _HomePageState extends State<HomePage> {
final List<Color> _colors = [
Colors.red, Colors.black, Colors.blue, Colors.green, Colors.orange,
Colors.pink, Colors.purple, Colors.indigo, Colors.amber, Colors.cyan,
Colors.redAccent, Colors.grey, Colors.blueAccent, Colors.greenAccent, Colors.orangeAccent,
Colors.pinkAccent, Colors.purpleAccent, Colors.indigoAccent, Colors.amberAccent, Colors.cyanAccent,
];
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title:const Text('颜色主页')),
floatingActionButton: FloatingActionButton(
onPressed: _toAddPage,
child: const Icon(Icons.add),
),
body: ColorsPanel(
colors: _colors,
onSelect: _selectColor,
),
);
}
void _selectColor(Color color){
Route route = MaterialPageRoute(builder: (ctx) => StlColorPage(color: color));
Navigator.of(context).push(route);
}
void _toAddPage() async {
Route<Color> route = MaterialPageRoute<Color>(builder: (ctx) => const ColorAddPage());
Color? color = await Navigator.of(context).push(route);
if (color != null) {
setState(() {
_colors.add(color);
});
}
}
}

View File

@@ -1,27 +0,0 @@
import 'package:flutter/material.dart';
import 'pages/home_page.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
debugShowCheckedModeBanner: false,
theme: ThemeData(
colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
useMaterial3: true,
),
home: const HomePage(),
);
}
}

View File

@@ -1,67 +0,0 @@
import 'dart:math';
import 'package:flutter/material.dart';
class ColorAddPage extends StatefulWidget {
const ColorAddPage({super.key});
@override
State<ColorAddPage> createState() => _ColorAddPageState();
}
class _ColorAddPageState extends State<ColorAddPage> {
late Color _color;
@override
void initState() {
super.initState();
_color = randomColor;
}
@override
Widget build(BuildContext context) {
String text = '# ${_color.value.toRadixString(16)}';
return Scaffold(
appBar: AppBar(
title: Text('添加颜色'),
actions: [IconButton(onPressed: _selectColor, icon: Icon(Icons.check ))],
),
body: Padding(
padding: const EdgeInsets.symmetric(horizontal: 16.0,vertical: 20),
child: Row(
children: [
Expanded(child: Text(text,style: TextStyle(color: _color,fontSize: 24,letterSpacing: 4),)),
Container(
margin: EdgeInsets.only(left: 10),
width: 40,
height: 40,
child: Icon(
Icons.sell_outlined,
color: Colors.white,
),
decoration: BoxDecoration(
color: _color,
borderRadius: BorderRadius.circular(8),
),
),
],
),
),
);
}
Random _random = Random();
Color get randomColor {
return Color.fromARGB(
255,
_random.nextInt(256),
_random.nextInt(256),
_random.nextInt(256),
);
}
void _selectColor() {
Navigator.of(context).pop(_color);
}
}

View File

@@ -1,51 +0,0 @@
import 'package:flutter/material.dart';
import 'color_add_page.dart';
import '../../../common/components/colors_panel.dart';
import '../../../common/pages/stl_color_page.dart';
class HomePage extends StatefulWidget {
const HomePage({super.key});
@override
State<HomePage> createState() => _HomePageState();
}
class _HomePageState extends State<HomePage> {
final List<Color> _colors = [
Colors.red, Colors.black, Colors.blue, Colors.green, Colors.orange,
Colors.pink, Colors.purple, Colors.indigo, Colors.amber, Colors.cyan,
Colors.redAccent, Colors.grey, Colors.blueAccent, Colors.greenAccent, Colors.orangeAccent,
Colors.pinkAccent, Colors.purpleAccent, Colors.indigoAccent, Colors.amberAccent, Colors.cyanAccent,
];
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title:const Text('颜色主页')),
floatingActionButton: FloatingActionButton(
onPressed: _toAddPage,
child: const Icon(Icons.add),
),
body: ColorsPanel(
colors: _colors,
onSelect: _selectColor,
),
);
}
void _selectColor(Color color){
Route route = MaterialPageRoute(builder: (ctx) => StlColorPage(color: color));
Navigator.of(context).push(route);
}
void _toAddPage() async {
Route<Color> route = MaterialPageRoute<Color>(builder: (ctx) => const ColorAddPage());
Color? color = await Navigator.of(context).push(route);
if (color != null) {
setState(() {
_colors.add(color);
});
}
}
}

View File

@@ -1,49 +0,0 @@
import 'package:flutter/material.dart';
import 'pages/page_a.dart';
import 'pages/page_b.dart';
import 'pages/home_page.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
debugShowCheckedModeBanner: false,
theme: ThemeData(
appBarTheme: AppBarTheme(
elevation: 0,
iconTheme: IconThemeData(color: Colors.black),
titleTextStyle: TextStyle(color: Colors.black,fontSize: 18,fontWeight: FontWeight.bold)
)
),
initialRoute: '/a/b',
onGenerateRoute: _onGenerateRoute,
);
}
Route? _onGenerateRoute(RouteSettings settings) {
String? name = settings.name;
Widget? page ;
if(name=='/'){
page = const HomePage();
}
if(name=='/a'){
page = const PageA();
}
if(name=='/a/b'){
page = const PageB();
}
if(page!=null){
return MaterialPageRoute(builder: (_)=> page!,settings: settings);
}
return null;
}
}

View File

@@ -1,28 +0,0 @@
import 'package:flutter/material.dart';
class HomePage extends StatelessWidget {
const HomePage({super.key});
@override
Widget build(BuildContext context) {
const Color bgColor = Color(0xffFFE6CD);
return Scaffold(
backgroundColor: bgColor,
appBar: AppBar(
title: const Text('主页面'),
backgroundColor: bgColor,
),
body: Center(
child: ElevatedButton(
onPressed: ()=>toPageA(context),
child: const Text('Push A'),
),
),
);
}
void toPageA(BuildContext context){
Navigator.of(context).pushNamed('/a');
}
}

View File

@@ -1,28 +0,0 @@
import 'package:flutter/material.dart';
import 'page_b.dart';
class PageA extends StatelessWidget {
const PageA({super.key});
@override
Widget build(BuildContext context) {
const Color bgColor = Color(0xffCCFFFF);
return Scaffold(
backgroundColor: bgColor,
appBar: AppBar(title: const Text('A'),
backgroundColor: bgColor,
),
body: Center(
child: ElevatedButton(
onPressed: ()=>toPageB(context),
child: const Text('Push B'),
),
),
);
}
void toPageB(BuildContext context){
Navigator.of(context).push(MaterialPageRoute(builder: (_)=> const PageB()));
}
}

View File

@@ -1,29 +0,0 @@
import 'package:flutter/material.dart';
import 'home_page.dart';
class PageB extends StatelessWidget {
const PageB({super.key});
@override
Widget build(BuildContext context) {
const Color bgColor = Color(0xffCCE5FF);
return Scaffold(
backgroundColor: bgColor,
appBar: AppBar(title: const Text('B',),
backgroundColor: bgColor,
),
body: Center(
child: ElevatedButton(
onPressed: ()=>toPageC(context),
child: const Text('回到主界面'),
),
),
);
}
void toPageC(BuildContext context){
Navigator.of(context).popUntil(ModalRoute.withName('/'));
}
}

View File

@@ -1,27 +0,0 @@
import 'package:flutter/material.dart';
import 'pages/page_a.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
debugShowCheckedModeBanner: false,
theme: ThemeData(
appBarTheme: AppBarTheme(
elevation: 0,
iconTheme: IconThemeData(color: Colors.black),
titleTextStyle: TextStyle(color: Colors.black,fontSize: 18,fontWeight: FontWeight.bold)
)
),
home: const PageA(),
);
}
}

View File

@@ -1,28 +0,0 @@
import 'package:flutter/material.dart';
import 'page_b.dart';
class PageA extends StatelessWidget {
const PageA({super.key});
@override
Widget build(BuildContext context) {
const Color bgColor = Color(0xffCCFFFF);
return Scaffold(
backgroundColor: bgColor,
appBar: AppBar(title: const Text('A'),
backgroundColor: bgColor,
),
body: Center(
child: ElevatedButton(
onPressed: ()=>toPageB(context),
child: const Text('Push B'),
),
),
);
}
void toPageB(BuildContext context){
Navigator.of(context).push(MaterialPageRoute(builder: (_)=> const PageB()));
}
}

View File

@@ -1,29 +0,0 @@
import 'package:flutter/material.dart';
import 'page_c.dart';
class PageB extends StatelessWidget {
const PageB({super.key});
@override
Widget build(BuildContext context) {
const Color bgColor = Color(0xffCCE5FF);
return Scaffold(
backgroundColor: bgColor,
appBar: AppBar(title: const Text('B',),
backgroundColor: bgColor,
),
body: Center(
child: ElevatedButton(
onPressed: ()=>toPageC(context),
child: const Text('Push C'),
),
),
);
}
void toPageC(BuildContext context){
Navigator.of(context).push(MaterialPageRoute(builder: (_)=> const PageC()));
}
}

View File

@@ -1,21 +0,0 @@
import 'package:flutter/material.dart';
class PageC extends StatelessWidget {
const PageC({super.key});
@override
Widget build(BuildContext context) {
const Color bgColor = Color(0xffFFE6CD);
return Scaffold(
backgroundColor: bgColor,
appBar: AppBar(
title: const Text('C'),
backgroundColor: bgColor,
),
body: const Center(
child: Text('到达终点'),
),
);
}
}

View File

@@ -1,4 +0,0 @@
01: 分析 push 方法。
A、B、C 三个界面跳转。
02: replace

View File

@@ -1,27 +0,0 @@
import 'package:flutter/material.dart';
import 'pages/page_a.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
debugShowCheckedModeBanner: false,
theme: ThemeData(
appBarTheme: AppBarTheme(
elevation: 0,
iconTheme: IconThemeData(color: Colors.black),
titleTextStyle: TextStyle(color: Colors.black,fontSize: 18,fontWeight: FontWeight.bold)
)
),
home: const PageA(),
);
}
}

View File

@@ -1,28 +0,0 @@
import 'package:flutter/material.dart';
import 'page_b.dart';
class PageA extends StatelessWidget {
const PageA({super.key});
@override
Widget build(BuildContext context) {
const Color bgColor = Color(0xffCCFFFF);
return Scaffold(
backgroundColor: bgColor,
appBar: AppBar(title: const Text('A'),
backgroundColor: bgColor,
),
body: Center(
child: ElevatedButton(
onPressed: ()=>toPageB(context),
child: const Text('Push B'),
),
),
);
}
void toPageB(BuildContext context){
Navigator.of(context).pushReplacement(MaterialPageRoute(builder: (_)=> const PageB()));
}
}

View File

@@ -1,29 +0,0 @@
import 'package:flutter/material.dart';
import 'page_c.dart';
class PageB extends StatelessWidget {
const PageB({super.key});
@override
Widget build(BuildContext context) {
const Color bgColor = Color(0xffCCE5FF);
return Scaffold(
backgroundColor: bgColor,
appBar: AppBar(title: const Text('B',),
backgroundColor: bgColor,
),
body: Center(
child: ElevatedButton(
onPressed: ()=>toPageC(context),
child: const Text('Push C'),
),
),
);
}
void toPageC(BuildContext context){
Navigator.of(context).pushReplacement(MaterialPageRoute(builder: (_)=> const PageC()));
}
}

View File

@@ -1,21 +0,0 @@
import 'package:flutter/material.dart';
class PageC extends StatelessWidget {
const PageC({super.key});
@override
Widget build(BuildContext context) {
const Color bgColor = Color(0xffFFE6CD);
return Scaffold(
backgroundColor: bgColor,
appBar: AppBar(
title: const Text('C'),
backgroundColor: bgColor,
),
body: const Center(
child: Text('到达终点'),
),
);
}
}

View File

@@ -1,48 +0,0 @@
import 'package:flutter/material.dart';
import 'pages/page_a.dart';
import 'pages/page_b.dart';
import 'pages/page_c.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
debugShowCheckedModeBanner: false,
theme: ThemeData(
appBarTheme: AppBarTheme(
elevation: 0,
iconTheme: IconThemeData(color: Colors.black),
titleTextStyle: TextStyle(color: Colors.black,fontSize: 18,fontWeight: FontWeight.bold)
)
),
home: const PageA(),
onUnknownRoute: _onUnknownRoute,
);
}
Route? _onUnknownRoute(RouteSettings settings) {
String? name = settings.name;
Widget? page ;
if(name=='/a'){
page = const PageA();
}
if(name=='/b'){
page = const PageB();
}
if(name=='/c'){
page = const PageC();
}
if(page!=null){
return MaterialPageRoute(builder: (_)=> page!,settings: settings);
}
return null;
}
}

View File

@@ -1,28 +0,0 @@
import 'package:flutter/material.dart';
import 'page_b.dart';
class PageA extends StatelessWidget {
const PageA({super.key});
@override
Widget build(BuildContext context) {
const Color bgColor = Color(0xffCCFFFF);
return Scaffold(
backgroundColor: bgColor,
appBar: AppBar(title: const Text('A'),
backgroundColor: bgColor,
),
body: Center(
child: ElevatedButton(
onPressed: ()=>toPageB(context),
child: const Text('Push B'),
),
),
);
}
void toPageB(BuildContext context){
Navigator.of(context).pushNamed('/b');
}
}

View File

@@ -1,29 +0,0 @@
import 'package:flutter/material.dart';
import 'page_c.dart';
class PageB extends StatelessWidget {
const PageB({super.key});
@override
Widget build(BuildContext context) {
const Color bgColor = Color(0xffCCE5FF);
return Scaffold(
backgroundColor: bgColor,
appBar: AppBar(title: const Text('B',),
backgroundColor: bgColor,
),
body: Center(
child: ElevatedButton(
onPressed: ()=>toPageC(context),
child: const Text('Push C'),
),
),
);
}
void toPageC(BuildContext context){
Navigator.of(context).pushNamed('/c');
}
}

View File

@@ -1,36 +0,0 @@
import 'package:flutter/material.dart';
import 'page_d.dart';
class PageC extends StatelessWidget {
const PageC({super.key});
@override
Widget build(BuildContext context) {
const Color bgColor = Color(0xffFFE6CD);
return Scaffold(
backgroundColor: bgColor,
appBar: AppBar(
title: const Text('C'),
backgroundColor: bgColor,
),
body: Center(
child: ElevatedButton(
onPressed: ()=>toPageD(context),
child: const Text('Push D Remove Until A'),
),
),
);
}
void toPageD(BuildContext context){
Navigator.of(context).pushAndRemoveUntil(
MaterialPageRoute<void>(builder: (BuildContext context) => const PageD()),
ModalRoute.withName('/a'),
);
}
}

View File

@@ -1,22 +0,0 @@
import 'package:flutter/material.dart';
import 'package:iroute/06/02/pages/page_a.dart';
class PageD extends StatelessWidget {
const PageD({super.key});
@override
Widget build(BuildContext context) {
const Color bgColor = Color(0xffFFCCFF);
return Scaffold(
backgroundColor: bgColor,
appBar: AppBar(
title: const Text('D'),
backgroundColor: bgColor,
),
body: Center(
child: const Text('到达终点'),
),
);
}
}

View File

@@ -1,5 +0,0 @@
01: 分析 pushReplacement 方法。
A、B、C 三个界面跳转。
02: 分析 pushAndRemoveUntil 方法。
A、B、C、D 四个界面跳转。

View File

@@ -1,27 +0,0 @@
import 'package:flutter/material.dart';
import 'pages/page_a.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
debugShowCheckedModeBanner: false,
theme: ThemeData(
appBarTheme: AppBarTheme(
elevation: 0,
iconTheme: IconThemeData(color: Colors.black),
titleTextStyle: TextStyle(color: Colors.black,fontSize: 18,fontWeight: FontWeight.bold)
)
),
home: const PageA(),
);
}
}

View File

@@ -1,28 +0,0 @@
import 'package:flutter/material.dart';
import 'page_b.dart';
class PageA extends StatelessWidget {
const PageA({super.key});
@override
Widget build(BuildContext context) {
const Color bgColor = Color(0xffCCFFFF);
return Scaffold(
backgroundColor: bgColor,
appBar: AppBar(title: const Text('A'),
backgroundColor: bgColor,
),
body: Center(
child: ElevatedButton(
onPressed: ()=>toPageB(context),
child: const Text('Push B'),
),
),
);
}
void toPageB(BuildContext context){
Navigator.of(context).push(MaterialPageRoute(builder: (_)=> const PageB()));
}
}

View File

@@ -1,29 +0,0 @@
import 'package:flutter/material.dart';
import 'page_c.dart';
class PageB extends StatelessWidget {
const PageB({super.key});
@override
Widget build(BuildContext context) {
const Color bgColor = Color(0xffCCE5FF);
return Scaffold(
backgroundColor: bgColor,
appBar: AppBar(title: const Text('B',),
backgroundColor: bgColor,
),
body: Center(
child: ElevatedButton(
onPressed: ()=>toPageC(context),
child: const Text('Push C'),
),
),
);
}
void toPageC(BuildContext context){
Navigator.of(context).push(MaterialPageRoute(builder: (_)=> const PageC()));
}
}

View File

@@ -1,26 +0,0 @@
import 'package:flutter/material.dart';
class PageC extends StatelessWidget {
const PageC({super.key});
@override
Widget build(BuildContext context) {
const Color bgColor = Color(0xffFFE6CD);
return Scaffold(
backgroundColor: bgColor,
appBar: AppBar(
title: const Text('C'),
backgroundColor: bgColor,
leading: BackButton(
onPressed: (){
Navigator.of(context).pop();
},
),
),
body: const Center(
child: Text('到达终点'),
),
);
}
}

View File

@@ -1,50 +0,0 @@
import 'package:flutter/material.dart';
import 'pages/page_a.dart';
import 'pages/page_b.dart';
import 'pages/page_c.dart';
import 'pages/home_page.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
debugShowCheckedModeBanner: false,
theme: ThemeData(
appBarTheme: AppBarTheme(
elevation: 0,
iconTheme: IconThemeData(color: Colors.black),
titleTextStyle: TextStyle(color: Colors.black,fontSize: 18,fontWeight: FontWeight.bold)
)
),
onUnknownRoute: _onUnknownRoute,
);
}
Route? _onUnknownRoute(RouteSettings settings) {
String? name = settings.name;
Widget? page ;
if(name=='/'){
page = const HomePage();
}
if(name=='/a'){
page = const PageA();
}
if(name=='/b'){
page = const PageB();
}
if(name=='/c'){
page = const PageC();
}
if(page!=null){
return MaterialPageRoute(builder: (_)=> page!,settings: settings);
}
return null;
}
}

View File

@@ -1,29 +0,0 @@
import 'package:flutter/material.dart';
import 'package:iroute/06/02/pages/page_a.dart';
class HomePage extends StatelessWidget {
const HomePage({super.key});
@override
Widget build(BuildContext context) {
const Color bgColor = Color(0xffFFCCFF);
return Scaffold(
backgroundColor: bgColor,
appBar: AppBar(
title: const Text('起点'),
backgroundColor: bgColor,
),
body: Center(
child: ElevatedButton(
onPressed: ()=>toPageA(context),
child: const Text('Push A'),
),
),
);
}
void toPageA(BuildContext context){
Navigator.of(context).pushNamed('/a');
}
}

View File

@@ -1,28 +0,0 @@
import 'package:flutter/material.dart';
import 'page_b.dart';
class PageA extends StatelessWidget {
const PageA({super.key});
@override
Widget build(BuildContext context) {
const Color bgColor = Color(0xffCCFFFF);
return Scaffold(
backgroundColor: bgColor,
appBar: AppBar(title: const Text('A'),
backgroundColor: bgColor,
),
body: Center(
child: ElevatedButton(
onPressed: ()=>toPageB(context),
child: const Text('Push B'),
),
),
);
}
void toPageB(BuildContext context){
Navigator.of(context).pushNamed('/b');
}
}

View File

@@ -1,29 +0,0 @@
import 'package:flutter/material.dart';
import 'page_c.dart';
class PageB extends StatelessWidget {
const PageB({super.key});
@override
Widget build(BuildContext context) {
const Color bgColor = Color(0xffCCE5FF);
return Scaffold(
backgroundColor: bgColor,
appBar: AppBar(title: const Text('B',),
backgroundColor: bgColor,
),
body: Center(
child: ElevatedButton(
onPressed: ()=>toPageC(context),
child: const Text('Push C'),
),
),
);
}
void toPageC(BuildContext context){
Navigator.of(context).pushNamed('/c');
}
}

View File

@@ -1,34 +0,0 @@
import 'package:flutter/material.dart';
class PageC extends StatelessWidget {
const PageC({super.key});
@override
Widget build(BuildContext context) {
const Color bgColor = Color(0xffFFE6CD);
return Scaffold(
backgroundColor: bgColor,
appBar: AppBar(
title: const Text('C'),
backgroundColor: bgColor,
),
body: Center(
child: ElevatedButton(
onPressed: ()=>toPageD(context),
child: const Text('pop Until A'),
),
),
);
}
void toPageD(BuildContext context){
Navigator.of(context).popUntil(
ModalRoute.withName('/a')
);
}
}

View File

@@ -1,11 +0,0 @@
import 'package:flutter/material.dart';
import 'pages/app/app.dart';
void main() {
runApp(const App());
}

Some files were not shown because too many files have changed in this diff Show More