flutter_floor_layout 0.0.1
flutter_floor_layout: ^0.0.1 copied to clipboard
A Flutter package for flexible multi-floor layout rendering.
import 'package:example/viewmodel/other_viewmodel.dart';
import 'package:example/widget/icon_grid_widget.dart';
import 'package:example/widget/other_widget.dart';
import 'package:flutter/material.dart';
import 'package:flutter_floor_layout/flutter_floor_layout.dart';
import '../mock_data.dart';
import '../model/banner_model.dart';
import '../viewmodel/banner_viewmodel.dart';
import '../widget/banner_widget.dart';
import '../viewmodel/icon_grid_viewmodel.dart';
import '../widget/banner_widget.dart';
import '../types/example_floor_section_type.dart';
import 'model/example_floor_model.dart';
void main() {
// 注册 Banner 楼层
FloorRegistry.register(
ExampleFloorType.banner,
(m) => BannerViewModel(m as ExampleFloorModel),
(vm) => BannerWidget(viewModel: vm as BannerViewModel),
);
FloorRegistry.register(
ExampleFloorType.iconGrid,
(m) => IconGridViewModel(m as ExampleFloorModel),
(vm) => IconGridWidget(viewModel: vm as IconGridViewModel),
);
FloorRegistry.register(
ExampleFloorType.product,
(m) => ProductViewModel(m as ExampleFloorModel),
(vm) => ProductWidget(viewModel: vm as ProductViewModel),
);
FloorRegistry.register(
ExampleFloorType.colorBlock,
(m) => ColorBlockViewModel(m as ExampleFloorModel),
(vm) => ColorBlockWidget(viewModel: vm as ColorBlockViewModel),
);
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Floor Layout Example',
home: Scaffold(
appBar: AppBar(title: const Text('Floor Layout Demo')),
body: FloorContainer(floors: mockFloors),
),
);
}
}
/// FloorContainer 用于展示所有楼层,调用 FloorRegistry 根据 floorType 构造对应 Widget
class FloorContainer extends StatelessWidget {
final List<FloorBaseModel> floors;
const FloorContainer({super.key, required this.floors});
@override
Widget build(BuildContext context) {
return ListView.builder(
itemCount: floors.length,
itemBuilder: (context, index) {
final floor = floors[index];
final buildResult = FloorRegistry.build(floor.floorType, floor);
if (buildResult == null) {
return SizedBox.shrink();
}
final (_, widget) = buildResult;
return widget;
},
);
}
}