一統天下 flutter - 資源: rootBundle - 訪問程序內資源

源碼 https://github.com/webabcd/flutter_demo
作者 webabcd

一統天下 flutter - 資源: rootBundle - 訪問程序內資源

示例如下:

lib\resource\root_bundle.dart

/*
 * rootBundle - 訪問程序內資源
 *
 * 在 pubspec.yaml 中配置需要打包的程序內資源,可以按文件配置,也可以按文件夾配置,類似如下
 * flutter:
 *   assets:
 *     - assets/README.md
 *     - assets/son.jpg
 *     - assets/i18n/
 */

import 'package:flutter/material.dart';
import 'package:flutter/services.dart';

import '../helper.dart';

class RootBundleDemo extends StatefulWidget {
  const RootBundleDemo({Key? key}) : super(key: key);

  @override
  _RootBundleDemoState createState() => _RootBundleDemoState();
}

class _RootBundleDemoState extends State<RootBundleDemo> {

  Future<String> _loadStringData() async {
    /// rootBundle.loadString() 以文本的方式讀取程序內的指定的資源
    return rootBundle.loadString('assets/README.md');
  }

  Future<Uint8List> _loadBinaryData() async {
    /// rootBundle.load() 以二進制的方式讀取程序內的指定的資源
    var byteData = await rootBundle.load("assets/son.jpg");
    return byteData.buffer.asUint8List(byteData.offsetInBytes, byteData.lengthInBytes);
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: const Text("title"),),
      backgroundColor: Colors.orange,
      body: Center(
        child: Column(
          children: [
            FutureBuilder(
              future: _loadStringData(),
              builder: (context, snapshot) {
                if (snapshot.connectionState == ConnectionState.done) {
                  if (snapshot.hasData) {
                    return MyTextSmall(snapshot.data!.substring(0, 200));
                  } else if (snapshot.hasError) {
                    return MyText('error: ${snapshot.error}');
                  }
                }
                return const MyText('loading');
              },
            ),
            FutureBuilder(
              future: _loadBinaryData(),
              builder: (context, snapshot) {
                if (snapshot.connectionState == ConnectionState.done) {
                  if (snapshot.hasData) {
                    return Image.memory(snapshot.data!,
                      width: 50,
                      height: 50,
                    );
                  } else if (snapshot.hasError) {
                    return MyText('error: ${snapshot.error}');
                  }
                }
                return const MyText('loading');
              },
            ),
          ],
        ),
      ),
    );
  }
}

源碼 https://github.com/webabcd/flutter_demo
作者 webabcd

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章