Skip to content

Commit

Permalink
临时提交
Browse files Browse the repository at this point in the history
  • Loading branch information
chen56 committed Apr 30, 2024
1 parent d5c8481 commit a34ba78
Show file tree
Hide file tree
Showing 11 changed files with 55 additions and 61 deletions.
2 changes: 1 addition & 1 deletion notes/flutter_web/lib/app.dart
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ class App extends StatelessWidget {
title: "flutter note",
theme: ThemeData(colorScheme: ColorScheme.fromSeed(seedColor: Colors.tealAccent.shade700, brightness: Brightness.light), useMaterial3: true),
darkTheme: ThemeData(colorScheme: ColorScheme.fromSeed(seedColor: ColorSeed.m3baseline.color, brightness: Brightness.dark), useMaterial3: true),
routerConfig: router.toRouterConfig(),
routerConfig: router.config(),
);
}
}
8 changes: 5 additions & 3 deletions notes/flutter_web/lib/routes/notes/layout.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,10 @@ import 'package:flutter/widgets.dart';
import 'package:you_flutter/router.dart';
import 'package:you_note_dart/note.dart';
import 'package:you_note_dart/note_layouts.dart';
/// [PageLayoutBuilder]
/// [NoteLayoutBuilder]
@ToType(type: ToNote)
Widget layout(BuildContext context, ToUri uri, Cell cell) {
return NoteLayoutStyle1(uri: uri, cell: cell);
Widget layout(BuildContext context, ToUri uri, NoteBuilder builder) {
// ignore: unnecessary_type_check
assert(layout is NoteLayoutBuilder);
return NoteLayoutStyle1(uri: uri, builder: builder);
}
1 change: 0 additions & 1 deletion packages/you_cli/lib/src/cli_core.dart
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,6 @@ class YouCli {

return _rootRoute ??= await from(dir_routes);
}

AnalysisSession get analysisSession {
return _session ??= AnalysisContextCollection(
includedPaths: [dir_lib.path],
Expand Down
2 changes: 1 addition & 1 deletion packages/you_cli/test/bin/cli_core_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ void main() {
FileSystem fs=LocalFileSystem();
YouCli cli = YouCli(projectDir: fs.directory("../../notes/flutter_web/lib"));
var result =await cli.analysisLayout(fs.file("../../notes/flutter_web/lib/routes/notes/layout.dart"));
check(result.toType!.type).equals(refer("ToNote","package:you_note_dart/note.dart"));
check(result.toType).equals(refer("ToNote","package:you_note_dart/note.dart"));
});
});

Expand Down
25 changes: 12 additions & 13 deletions packages/you_flutter/lib/src/router.dart
Original file line number Diff line number Diff line change
Expand Up @@ -59,25 +59,25 @@ class YouRouter {

/// [PlatformRouteInformationProvider.initialRouteInformation]
required this.initial,
required this.navigatorKey,
}) : assert(root.templatePath == "/") {
routerDelegate = LoggableRouterDelegate(logger: logger, delegate: _RouterDelegate(navigatorKey: navigatorKey, router: this));
config = RouterConfig<Object>(
required GlobalKey<NavigatorState> navigatorKey,
}) : _navigatorKey = navigatorKey, assert(root.templatePath == "/") {
_routerDelegate = LoggableRouterDelegate(logger: logger, delegate: _RouterDelegate(navigatorKey: _navigatorKey, router: this));
_config = RouterConfig<Object>(
routeInformationProvider: PlatformRouteInformationProvider(initialRouteInformation: RouteInformation(uri: initial)),
routerDelegate: routerDelegate,
routerDelegate: _routerDelegate,
routeInformationParser: _RouteInformationParser(router: this),
);
}

final To root;
final Uri initial;
final GlobalKey<NavigatorState> navigatorKey;
late final RouterConfig<Object> config;
late final RouterDelegate<Object> routerDelegate;
final GlobalKey<NavigatorState> _navigatorKey;
late final RouterConfig<Object> _config;
late final RouterDelegate<Object> _routerDelegate;

static YouRouter of(BuildContext context) {
var result = context.findAncestorWidgetOfExactType<_RouterScope>();
assert(result != null, "应把ToRouter配置到您的App中: MaterialApp.router(routerConfig:ToRouter(...))");
assert(result != null, "YouRouter not found, please: MaterialApp.router(routerConfig:YouRouter(...).config())");
return result!.router;
}

Expand All @@ -91,14 +91,14 @@ class YouRouter {

ToUri match(String uri) => matchUri(Uri.parse(uri));

RouterConfig<Object> toRouterConfig() => config;
RouterConfig<Object> config() => _config;

void to(Uri uri) {
ToUri to = matchUri(uri);
var result = routerDelegate.setNewRoutePath(to);
var result = _routerDelegate.setNewRoutePath(to);
bool completed = false;
result.whenComplete(() => completed = true);
assert(completed, "确保routerDelegate.setNewRoutePath内部实现是同步的,我们应该用其他方案来做Route结果,异步不好操纵");
assert(completed, "bug: internal ensure routerDelegate.setNewRoutePath is sync implement");
}
}

Expand Down Expand Up @@ -606,7 +606,6 @@ class _RouterDelegate extends RouterDelegate<ToUri> with ChangeNotifier, PopNavi
return Navigator(
key: navigatorKey,
onPopPage: (route, result) {
debugPrint("onPopPage> $route");
if (!route.didPop(result)) {
return false;
}
Expand Down
2 changes: 1 addition & 1 deletion packages/you_flutter/test/better_ui_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import 'package:flutter_test/flutter_test.dart';
import 'package:you_flutter/src/better_ui.dart';

void main() {
group("ToRouter.parse ok", () {
group("YouRouter.parse ok", () {
test('select() 所有档位都覆盖,测一下', () {
assertScreen(ScreenSize screen) {
// 用此档位的最小宽度+1,来模仿此屏幕大小
Expand Down
4 changes: 2 additions & 2 deletions packages/you_flutter/test/router_to_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import 'package:you_flutter/src/router.dart';

void main() {
WidgetsFlutterBinding.ensureInitialized();
group("ToRouter.parse ok", () {
group("YouRouter.parse ok", () {
var router = YouRouter(
initial: Uri.parse("/"),
navigatorKey: GlobalKey(),
Expand Down Expand Up @@ -81,7 +81,7 @@ void main() {
match("/chen56", expected: (location: "/[user]", routeParameters: {"user": "chen56"}));
});
});
group("ToRouter.parse 404", () {
group("YouRouter.parse 404", () {
var router = YouRouter(
initial: Uri.parse("/"),
navigatorKey: GlobalKey(),
Expand Down
2 changes: 1 addition & 1 deletion packages/you_note_dart/lib/note.dart
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
library note;

export 'src/note.dart' show ToNote, Cell, NoteBuilder, LazyNoteBuilder, NoteSystem;
export 'src/note.dart' show ToNote, Cell, NoteBuilder,NoteLayoutBuilder, NoteSystem;
export 'src/contents/contents.dart' show contents;
export 'src/contents/mockup.dart' show MockupWindow;
export 'src/contents/markdown_content.dart' show MD;
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,10 @@ import 'package:you_flutter/state.dart';
import 'package:you_note_dart/note.dart';

final class NoteLayoutDefault extends StatelessWidget {
final Cell rootCell;
final NoteBuilder builder;
final ToUri uri;

const NoteLayoutDefault({super.key, required this.uri, required this.rootCell});
const NoteLayoutDefault({super.key, required this.uri, required this.builder});

@override
Widget build(BuildContext context) {
Expand All @@ -17,6 +17,8 @@ final class NoteLayoutDefault extends StatelessWidget {
/// Watch是you_flutter的state管理组件, 被其包裹的状态可以被观测刷新(ref: Cell._contents = [].signal())
child: Watch((context) {
// contents是收集到调用print(xx)的所有结果
Cell rootCell = Cell.empty();
builder(context, rootCell);
var pageContents = rootCell.toList().expand((cell) sync* {
for (var content in cell.contents) {
yield Align(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,10 @@ import 'package:you_note_dart/src/note.dart';
/// 一个极简的笔记布局范例
/// 左边routes树,右边页面内容
final class NoteLayoutStyle1 extends StatelessWidget {
final Cell cell;
final NoteBuilder builder;
final ToUri uri;

NoteLayoutStyle1({super.key, required this.uri, required this.cell});
NoteLayoutStyle1({super.key, required this.uri, required this.builder});

@override
Widget build(BuildContext context) {
Expand All @@ -20,6 +20,8 @@ final class NoteLayoutStyle1 extends StatelessWidget {
/// Watch是you_flutter的state管理组件, 被其包裹的状态可以被观测刷新(ref: Cell._contents = [].signal())
child: Watch((context) {
// contents是收集到调用print(xx)的所有结果
Cell cell = Cell.empty();
builder(context, cell);
var pageContents = cell.toList().expand((cell) sync* {
for (var content in cell.contents) {
yield Align(
Expand Down
58 changes: 24 additions & 34 deletions packages/you_note_dart/lib/src/note.dart
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,8 @@ import 'package:http/http.dart' as http;
import 'package:you_note_dart/src/layouts/note_layout_default.dart';

typedef NoteBuilder = void Function(BuildContext context, Cell print);
typedef LazyNoteBuilder = Future<void> Function(BuildContext context, Cell print);
typedef NoteLayoutBuilder = Widget Function(BuildContext context, ToUri uri, Cell cell);
// TODO REMOVE typedef LazyNoteBuilder = Future<void> Function(BuildContext context, Cell print);
typedef NoteLayoutBuilder = Widget Function(BuildContext context, ToUri uri, NoteBuilder builder);

base class ToNote extends To {
final NoteBuilder? _builder;
Expand All @@ -22,23 +22,39 @@ base class ToNote extends To {
ToNote(super.part, {NoteBuilder? builder, NoteLayoutBuilder? layout, List<ToNote> children = const []})
: _builder = builder,
_layout = layout,
super(children: children);
super(
// builder: builder == null
// ? null
// : (context, uri) {
// Cell rootCell = Cell.empty();
// builder(context, rootCell);
// // To? find = findLayoutNode();
// // if (find == null) {
// // return NoteLayoutDefault(uri: uri, rootCell: rootCell);
// // }
// return Text("");
// },
// layout: layout == null
// ? null
// : (context, uri, pageBuilder) {
// var child = pageBuilder(context, uri);
// return layout(context, uri, child);
// },
children: children);

Widget? build(BuildContext context, ToUri uri) {
if (_builder == null) {
return null;
}
Cell rootCell = Cell.empty();
_builder(context, rootCell);

To? find = findLayoutNode();
if (find == null) {
return NoteLayoutDefault(uri: uri, rootCell: rootCell);
return NoteLayoutDefault(uri: uri, builder: _builder);
}
return (find as ToNote)._layout!(context, uri, rootCell);
return (find as ToNote)._layout!(context, uri, _builder);
}
}

@Deprecated("已被you_router取代,待删除")
class NoteRoute {
/// A file system term, that refers to the last part of a path
/// example: a/b/c , c is basename
Expand All @@ -47,25 +63,13 @@ class NoteRoute {
final NoteRoute? parent;
bool expand = false;

@internal
LazyNoteBuilder? lazyNoteBuilder;

NoteConf? conf;

NoteRoute._child({required this.basename, required NoteRoute this.parent});

NoteRoute.root()
: basename = "",
parent = null;

NoteRoute put(String fullPath, LazyNoteBuilder lazyNoteBuilder) {
var p = fullPath.split("/").map((e) => e.trim()).where((e) => e.isNotEmpty).toList();
var path = _ensurePath(p);

path.lazyNoteBuilder = lazyNoteBuilder;
return path;
}

void configTree({int extendLevel = 0}) {
if (extendLevel <= 0) return;

Expand All @@ -77,20 +81,6 @@ class NoteRoute {

List<NoteRoute> get children => List.from(_children.values);

NoteRoute _ensurePath(List<String> nameList) {
if (nameList.isEmpty) {
return this;
}
String name = nameList[0];
assert(name != "" && name != "/", "path:$nameList, path[0]:'$name' must not be '' and '/' ");
var next = _children.putIfAbsent(name, () {
var child = NoteRoute._child(basename: name, parent: this);
_children[name] = child;
return child;
});
return next._ensurePath(nameList.sublist(1));
}

bool get isLeaf => _children.isEmpty;

int get level => isRoot ? 0 : parent!.level + 1;
Expand Down

0 comments on commit a34ba78

Please sign in to comment.