fetch_pages 0.1.2
fetch_pages: ^0.1.2 copied to clipboard
Flutter package to fetch and render json pages for json_dynamic_widget from server.
fetch_pages #
A Flutter package that leverages json_dynamic_widget to dynamically render pages from JSON data. This package fetches all the pages from a server when the app launches and provides a function to get a specific page by its name. It also caches the fetched data using SharedPreferences.
Features #
- Fetch pages from a server and store them locally.
- Retrieve and render pages dynamically using
json_dynamic_widget. - Cache the fetched data for offline usage.
- Simple API to get a page by its name.
- Display a loading indicator while the page data is being fetched.
- Handle page-specific data via the
RenderPagewidget.
Getting started #
Prerequisites #
- Flutter SDK
httppackageloggerpackageshared_preferencespackagejson_dynamic_widgetpackage
Add the following dependencies to your pubspec.yaml file:
dependencies:
flutter:
sdk: flutter
http: ^0.13.3
logger: ^1.0.0
shared_preferences: ^2.0.6
json_dynamic_widget: ^4.0.0
API Response Format #
The API should return JSON in the following format:
{
"pageName1": { /* page_json */ },
"pageName2": { /* page_json */ },
// more pages...
}
Usage #
Fetching Pages from API #
To fetch pages from the API and store them locally:
import 'package:fetch_pages/fetch_pages.dart';
void main() async {
String apiUrl = 'https://your-api-url.com/pages';
await FetchPages.fetchPagesFromAPI(apiUrl);
}
Getting a Page by Name #
To get a specific page by its name:
String? pageJson = await FetchPages.getPageByName('page_name');
if (pageJson != null) {
// Use the pageJson to render the page using json_dynamic_widget
}
Rendering a Page #
To render a page using the RenderPage widget, ensure your map format is as follows:
{
"pageName": "pagename",
"data": {
"key": "value",
// more key-value pairs...
}
}
Here's an example of how to use the RenderPage widget with your page data:
import 'package:fetch_pages/fetch_pages.dart';
import 'package:flutter/material.dart';
import 'package:json_dynamic_widget/json_dynamic_widget.dart';
final navigatorKey = GlobalKey<NavigatorState>();
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await FetchPages.fetchPagesFromAPI("http://your-api-url.com/pages");
JsonWidgetRegistry registry = JsonWidgetRegistry.instance;
registry.navigatorKey = navigatorKey;
// you can define custom widgets and registry functions here.
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
title: "Render Page",
initialRoute: '/home',
routes: {
'/home': (context) =>
const RenderPage(pageData: {"pageName": "index.json"}, registry),
/*
you can also add page data that is to be added to registry,
example:
{
"pageName": "index.json",
"data": {
"title":"Hello there",
...
}
}
*/
},
navigatorKey: navigatorKey,
);
}
}
JSON Format for json_dynamic_widget #
For detailed examples and documentation on the JSON format supported by json_dynamic_widget, refer to the json_dynamic_widget repository.
Additional information #
For more information on how to use json_dynamic_widget to render the pages, refer to its documentation.
Contributing #
Contributions are welcome! If you find any issues or have suggestions for improvements, please open an issue or create a pull request.
Issues #
If you encounter any problems or have questions, please file an issue on the GitHub repository.
This README provides a clear overview of the package, including its purpose, features, prerequisites, and usage. It also includes an example to help users get started quickly. The additional information about the API response format ensures that users know how the server should respond with page data.